1 24 package org.aspectj.compiler.crosscuts.joinpoints; 25 26 import org.aspectj.compiler.base.ast.*; 27 import org.aspectj.compiler.crosscuts.ast.*; 28 29 import org.aspectj.compiler.base.JavaCompiler; 30 import org.aspectj.util.JavaStrings; 31 32 import java.util.*; 33 34 35 public abstract class CallJp extends ExprJp { 36 private Formals codeFormals = null; 37 protected Exprs argValues; 38 protected Exprs innerArgs; 39 40 public CallJp(AnyCallExpr callExpr, JoinPoint enclosingJp) { 41 super(callExpr, enclosingJp); 42 } 43 44 public Dec getTargetDec() { return getCalledCodeDec(); } 45 46 public AnyCallExpr getCallExpr() { return (AnyCallExpr)expr; } 47 48 public Exprs makeArgsExprs() { 49 getCodeFormals(); 50 return (Exprs)CopyWalker.copy(argValues); } 52 53 public abstract Type getTargetType(); 54 public abstract Type getTargetExprType(); 55 public abstract boolean isMethodCall(); 56 57 public CodeDec getCalledCodeDec() { 58 return getCallExpr().getCodeDec(); 59 } 60 61 public boolean canThrow(Type t) { return getCalledCodeDec().canThrow(t); } 62 public Collection getPossibleCheckedExceptions() { 63 return getCalledCodeDec().getPossibleCheckedExceptions(); 64 } 65 66 public Formals getCodeFormals() { 67 if (codeFormals == null) { 68 final AST ast = getAST(); 69 codeFormals = ast.makeFormals(); 70 argValues = ast.makeExprs(); 71 innerArgs = ast.makeExprs(); 72 73 Formals calledFormals = getCalledCodeDec().getFormals(); 74 final int N = calledFormals.size(); 75 for (int i = 0; i < N; i++) { 76 FormalDec formal = 77 ast.makeFinalFormal(calledFormals.get(i).getType(), 78 calledFormals.get(i).getId()); 79 argValues.add(ast.makeVar(formal)); 80 codeFormals.add(formal); 81 innerArgs.add(ast.makeVar(formal)); 82 } 83 } 84 return codeFormals; 85 } 86 87 protected abstract ASTObject makeInnerCall(Expr targetExpr, Exprs argsExprs); 88 89 protected AnonymousMethodExpr makeSyntheticCall() { 90 return makeAnonMethodExpr(getCodeFormals(), getCallExpr().getExpr(), 91 getCallExpr().getArgs()); 92 } 93 } 94 | Popular Tags |