List of usage examples for org.aspectj.weaver Shadow ConstructorExecution
Kind ConstructorExecution
To view the source code for org.aspectj.weaver Shadow ConstructorExecution.
Click Source Link
From source file:org.caesarj.compiler.aspectj.CaesarKindedPointcut.java
License:Open Source License
public void resolveBindings(IScope scope, Bindings bindings) { if (kind == Shadow.Initialization) { // scope.getMessageHandler().handleMessage( // MessageUtil.error( // "initialization unimplemented in 1.1beta1", // this.getSourceLocation())); }/*from w ww . j av a2 s. c o m*/ signature = signature.resolveBindings(scope, bindings); if (kind == Shadow.ConstructorExecution) { // Bug fix 60936 if (signature.getDeclaringType() != null) { World world = scope.getWorld(); TypeX exactType = signature.getDeclaringType().getExactType(); // Ignore this check for caesar classes if (scope instanceof CaesarPointcutScope) { CaesarPointcutScope s = (CaesarPointcutScope) scope; CClass cclass = s.lookupClass(exactType.getName()); if (cclass != null && cclass.getAbstractType().isCaesarReference()) { return; } } if (signature.getKind() == Member.CONSTRUCTOR && !exactType.equals(ResolvedTypeX.MISSING) && exactType.isInterface(world) && !signature.getDeclaringType().isIncludeSubtypes()) { world.getLint().noInterfaceCtorJoinpoint.signal(exactType.toString(), getSourceLocation()); } } } }
From source file:org.caesarj.compiler.aspectj.CaesarPointcutScope.java
License:Open Source License
/** * Performs a lookup for the given typeName. * //from w ww .j a va 2 s.co m * @param typeName * @param location * * @return TypeX */ public TypeX lookupType(String typeName, IHasPosition location) { // Primitive types are resolved directly if (context.getTypeFactory().isPrimitive(typeName)) return TypeX.forName(typeName); // Resolve the type CClass cclass = lookupClass(typeName); // Just process if it is not a regular Java class or it was not found if (cclass != null && !cclass.isClass()) { // Copies the name object String name = new String(typeName); // Check if the map has a pointcut for this location if (map.containsKey(location)) { // Gets the pointcut for the location CaesarPointcutWrapper wrapper = map.get(location); Pointcut p = wrapper.getWrappee(); // Kinded Pointcuts if (p instanceof CaesarKindedPointcut) { CaesarKindedPointcut kp = (CaesarKindedPointcut) p; if (Shadow.MethodCall.equals(kp.getKind())) { if (hasStaticModifier(kp) || kp.wasConstructor()) { name = cclass.getImplQualifiedName(); } } if (Shadow.MethodExecution.equals(kp.getKind())) { if (hasStaticModifier(kp)) { name = cclass.getImplQualifiedName(); } } if (Shadow.FieldGet.equals(kp.getKind())) { if (!kp.getSignature().getDeclaringType().isIncludeSubtypes()) { name = cclass.getImplQualifiedName(); } } if (Shadow.FieldSet.equals(kp.getKind())) { if (!kp.getSignature().getDeclaringType().isIncludeSubtypes()) { name = cclass.getImplQualifiedName(); } } if (Shadow.ConstructorCall.equals(kp.getKind())) { name = cclass.getImplQualifiedName(); } if (Shadow.ConstructorExecution.equals(kp.getKind())) { name = cclass.getImplQualifiedName(); } if (Shadow.PreInitialization.equals(kp.getKind())) { name = cclass.getImplQualifiedName(); } if (Shadow.StaticInitialization.equals(kp.getKind())) { name = cclass.getImplQualifiedName(); } if (Shadow.Initialization.equals(kp.getKind())) { //name = cclass.getImplQualifiedName(); } // TODO - Still couldn't find a running example if (Shadow.AdviceExecution.equals(kp.getKind())) { name = cclass.getImplQualifiedName(); } } // Within Pointcuts if (p instanceof WithinPointcut) { name = cclass.getImplQualifiedName(); } // WithinCode Pointcuts if (p instanceof WithincodePointcut) { name = cclass.getImplQualifiedName(); } // Reference Pointcuts if (p instanceof ReferencePointcut) { ReferencePointcut kp = (ReferencePointcut) p; name = cclass.getImplQualifiedName() + "$Registry"; } if (p instanceof ThisOrTargetPointcut) { name = cclass.getImplQualifiedName(); } } cclass = lookupClass(name); } // Resolve the class if (cclass == null) { return ResolvedTypeX.MISSING; } else { return world.get().resolve(cclass); } }
From source file:org.caesarj.compiler.aspectj.CaesarWrapperPatternParser.java
License:Open Source License
private CaesarPointcutWrapper parseKindedPointcut() { String kind = parseIdentifier(); eat("(");/*from ww w. j a v a 2s . c om*/ SignaturePattern sig; Shadow.Kind shadowKind = null; if (kind.equals("execution")) { sig = parseMethodOrConstructorSignaturePattern(); if (sig.getKind() == Member.METHOD) { shadowKind = Shadow.MethodExecution; } else if (sig.getKind() == Member.CONSTRUCTOR) { shadowKind = Shadow.ConstructorExecution; } } else if (kind.equals("call")) { sig = parseMethodOrConstructorSignaturePattern(); if (sig.getKind() == Member.METHOD) { shadowKind = Shadow.MethodCall; } else if (sig.getKind() == Member.CONSTRUCTOR) { shadowKind = Shadow.ConstructorCall; } } else if (kind.equals("get")) { sig = parseFieldSignaturePattern(); shadowKind = Shadow.FieldGet; } else if (kind.equals("set")) { sig = parseFieldSignaturePattern(); shadowKind = Shadow.FieldSet; } else { throw new ParserException("bad kind: " + kind, tokenSource.peek()); } eat(")"); // Creates the wrapper if (Shadow.MethodCall.equals(shadowKind) || Shadow.MethodExecution.equals(shadowKind)) { // Method call and execution are wrapped in an "and pointcut" to avoid getting constructors CaesarKindedPointcut p = new CaesarKindedPointcut(shadowKind, sig); registerPointcut(new CaesarPointcutWrapper(p)); Pointcut andPointcut = new AndPointcut(p, new NotPointcut(new CaesarKindedPointcut(shadowKind, this.createConstructorSignature()), tokenSource.peek().getStart())); return new CaesarPointcutWrapper(andPointcut); } else if (Shadow.ConstructorCall.equals(shadowKind) || Shadow.ConstructorExecution.equals(shadowKind)) { Shadow.Kind cclassShadowKind = null; // Transform the constructor call/execution to a method call/execution, // using $constructor and the same parameters if (Shadow.ConstructorCall.equals(shadowKind)) { cclassShadowKind = Shadow.MethodCall; } else { cclassShadowKind = Shadow.MethodExecution; } CaesarCloner c = CaesarCloner.instance(); SignaturePattern cclassSig = new SignaturePattern(Member.METHOD, sig.getModifiers(), createCaesarObjectPattern(), c.clone(sig.getDeclaringType()), new NamePattern("$constructor"), c.clone(sig.getParameterTypes()), c.clone(sig.getThrowsPattern())); CaesarKindedPointcut regular = new CaesarKindedPointcut(shadowKind, sig); CaesarKindedPointcut cclass = new CaesarKindedPointcut(cclassShadowKind, cclassSig); registerPointcut(new CaesarPointcutWrapper(regular)); registerPointcut(new CaesarPointcutWrapper(cclass)); // Creates an orPointcut for both the regular java and cclass constructors Pointcut orPointcut = new OrPointcut(regular, cclass); return new CaesarPointcutWrapper(orPointcut); } if (Shadow.FieldGet.equals(shadowKind) || Shadow.FieldSet.equals(shadowKind)) { // Creates the wrapper and register it CaesarKindedPointcut p = new CaesarKindedPointcut(shadowKind, sig); CaesarPointcutWrapper wrapper = new CaesarPointcutWrapper(p); registerPointcut(wrapper); // Append something like || get(public * Classname_Impl_Mixin_*.field) TypePattern mixinType = createMixinType(sig.getDeclaringType()); SignaturePattern mixinSignature = createMixinSignature(sig, mixinType); CaesarKindedPointcut mixin = new CaesarKindedPointcut(shadowKind, mixinSignature); // Register the mixin wrapper = new CaesarPointcutWrapper(mixin, sig.getDeclaringType()); wrapper.setDeclaringType(mixinType); registerPointcut(wrapper); // Creates an orPointcut for both the type and the mixin Pointcut orPointcut = new OrPointcut(p, mixin); return new CaesarPointcutWrapper(orPointcut); } CaesarKindedPointcut p = new CaesarKindedPointcut(shadowKind, sig); return new CaesarPointcutWrapper(p); }