KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > aspectj > compiler > crosscuts > MixinImplementationPass


1 /* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This file is part of the compiler and core tools for the AspectJ(tm)
4  * programming language; see http://aspectj.org
5  *
6  * The contents of this file are subject to the Mozilla Public License
7  * Version 1.1 (the "License"); you may not use this file except in
8  * compliance with the License. You may obtain a copy of the License at
9  * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/.
10  *
11  * Software distributed under the License is distributed on an "AS IS" basis,
12  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13  * for the specific language governing rights and limitations under the
14  * License.
15  *
16  * The Original Code is AspectJ.
17  *
18  * The Initial Developer of the Original Code is Xerox Corporation. Portions
19  * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation.
20  * All Rights Reserved.
21  *
22  * Contributor(s):
23  */

24
25 package org.aspectj.compiler.crosscuts;
26
27 import org.aspectj.compiler.base.ast.*;
28 import org.aspectj.compiler.base.*;
29
30 import java.util.*;
31
32
33 public class MixinImplementationPass extends WalkerPass {
34     private TypeDec inTypeDec;
35     
36     public MixinImplementationPass(JavaCompiler compiler) {
37         super(compiler);
38     }
39     
40     public TypeDec getInTypeDec() { return inTypeDec; }
41     public void setInTypeDec(TypeDec typeDec) { inTypeDec = typeDec; }
42  
43     public String JavaDoc getDisplayName() {
44         return "desugaring mixin methods";
45     }
46     
47     public Dec copyToClass(Dec dec, final TypeDec toClassDec) {
48         final Type toType = toClassDec.getType();
49         final Type fromType = dec.getBytecodeTypeDec().getType();
50         
51         //XXX we need a general and powerful simplification mechanism here...
52
Walker w = new CopyWalker(getCompiler(), fromType, toType) {
53             public Expr makeThisExpr() {
54                 return this.getAST().makeThis(this.toType);
55             }
56         };
57         //System.out.println("copying: " + dec.unparse());
58
Dec newDec = (Dec)w.process(dec);
59
60         newDec.setBytecodeId(dec.getBytecodeId());
61         newDec.setLexicalType(dec.getLexicalType());
62         //System.out.println(" to: " + newDec.unparse());
63
return newDec;
64     }
65         
66     
67     public ASTObject process(ASTObject object) {
68         object.implementMixin(this);
69         return object.postImplementMixin(this);
70     }
71 }
72
Popular Tags