]> source.dussan.org Git - aspectj.git/commitdiff
from branch: new exprs supported
authoraclement <aclement>
Tue, 19 Apr 2005 12:27:55 +0000 (12:27 +0000)
committeraclement <aclement>
Tue, 19 Apr 2005 12:27:55 +0000 (12:27 +0000)
weaver/src/org/aspectj/weaver/ast/CastExpr.java [new file with mode: 0644]
weaver/src/org/aspectj/weaver/ast/Expr.java
weaver/src/org/aspectj/weaver/ast/FieldGetOn.java [new file with mode: 0644]
weaver/src/org/aspectj/weaver/ast/IExprVisitor.java
weaver/src/org/aspectj/weaver/ast/StringConstExpr.java [new file with mode: 0644]

diff --git a/weaver/src/org/aspectj/weaver/ast/CastExpr.java b/weaver/src/org/aspectj/weaver/ast/CastExpr.java
new file mode 100644 (file)
index 0000000..1e6302a
--- /dev/null
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) Jonas Bonér, Alexandre Vasseur
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *******************************************************************************/
+package org.aspectj.weaver.ast;
+
+import org.aspectj.weaver.ResolvedTypeX;
+
+/**
+ * Represents a cast expression.
+ * <p/>
+ * Used when aspectOf is not existing in the aspect class (no pre-processing of aspects) ie when
+ * Object Aspects.aspectOf(..) API is used.
+ *
+ * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
+ */
+public class CastExpr extends Expr {
+
+    private String m_castToTypeName;
+
+    private CallExpr m_expr;
+
+    public CastExpr(CallExpr expr, String castToSignature) {
+        super();
+        m_expr = expr;
+        m_castToTypeName = castToSignature;
+    }
+
+    public void accept(IExprVisitor v) {
+        v.visit(m_expr);
+        v.visit(this);
+    }
+
+    public String getTypeName() {
+        return m_castToTypeName;
+    }
+
+    public ResolvedTypeX getType() {
+        throw new RuntimeException("not supported");
+    }
+}
index f660109918db2eccaedf320cb7037119ed926636..fd4b7a46c5cd1741cbb6f74b7ed5280ff3c0c273 100644 (file)
@@ -25,13 +25,19 @@ public abstract class Expr extends ASTNode {
     public static final Expr[] NONE = new Expr[0];
 
     public abstract void accept(IExprVisitor v);    
+
        public abstract ResolvedTypeX getType();
 
     public static FieldGet makeFieldGet(Member myField, ResolvedTypeX inAspect) {
         return new FieldGet(myField, inAspect);
     }
-       public static Expr makeCallExpr(Member member, Expr[] exprs, ResolvedTypeX returnType) {
+
+       public static CallExpr makeCallExpr(Member member, Expr[] exprs, ResolvedTypeX returnType) {
                return new CallExpr(member, exprs, returnType);
        }
 
+    public static Expr makeStringConstantExpr(final String stringConst) {
+        return new StringConstExpr(stringConst);
+    }
+
 }
diff --git a/weaver/src/org/aspectj/weaver/ast/FieldGetOn.java b/weaver/src/org/aspectj/weaver/ast/FieldGetOn.java
new file mode 100644 (file)
index 0000000..63f175c
--- /dev/null
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) Jonas Bonér, Alexandre Vasseur
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *******************************************************************************/
+package org.aspectj.weaver.ast;
+
+import org.aspectj.weaver.Member;
+import org.aspectj.weaver.TypeX;
+
+/**
+ * Represents a field access on a given type.
+ * <p/>
+ * Used when aspectOf is not existing in the aspect class (no pre-processing of aspects)
+ *
+ * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
+ */
+public class FieldGetOn extends FieldGet {
+
+    private TypeX m_declaringType;
+
+    public FieldGetOn(Member field, TypeX declaringType) {
+        super(field, null);
+        m_declaringType = declaringType;
+    }
+
+    public TypeX getDeclaringType() {
+        return m_declaringType;
+    }
+
+    public void accept(IExprVisitor v) {
+        v.visit(this);
+    }
+
+}
index ea18ff327d3b476cf130f44d299e20ce39dfc560..4f9373593bed2df8345d9ca29a4861a5686e5445 100644 (file)
@@ -19,5 +19,24 @@ public interface IExprVisitor {
        void visit(Var i);
     void visit(FieldGet fieldGet);
        void visit(CallExpr callExpr);
+       
+       /**
+     * Visit a string constant
+     * @param stringConstExpr
+     */
+    void visit(StringConstExpr stringConstExpr);
+
+    /**
+     * Visit a CHECKCAST instruction
+     * @param castExpr
+     */
+    void visit(CastExpr castExpr);
+
+    /**
+     * Visit a field GET
+     * @param fieldGetOn
+     */
+    void visit(FieldGetOn fieldGetOn);
+
 
 }
diff --git a/weaver/src/org/aspectj/weaver/ast/StringConstExpr.java b/weaver/src/org/aspectj/weaver/ast/StringConstExpr.java
new file mode 100644 (file)
index 0000000..cb1024b
--- /dev/null
@@ -0,0 +1,41 @@
+/*******************************************************************************
+ * Copyright (c) Jonas Bonér, Alexandre Vasseur
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *******************************************************************************/
+package org.aspectj.weaver.ast;
+
+import org.aspectj.weaver.ast.Expr;
+import org.aspectj.weaver.ast.IExprVisitor;
+import org.aspectj.weaver.ResolvedTypeX;
+
+/**
+ * Represents a String constant instruction.
+ * <p/>
+ * Used when aspectOf is not existing in the aspect class (no pre-processing of aspects)
+ *
+ * @author <a href="mailto:alex AT gnilux DOT com">Alexandre Vasseur</a>
+ */
+public class StringConstExpr extends Expr {
+
+    private String m_stringConst;
+
+    public StringConstExpr(String stringConst) {
+        super();
+        m_stringConst = stringConst;
+    }
+
+    public void accept(IExprVisitor v) {
+        v.visit(this);
+    }
+
+    public ResolvedTypeX getType() {
+        throw new RuntimeException("not supported");
+    }
+
+    public String getStringConst() {
+        return m_stringConst;
+    }
+}