List of usage examples for org.aspectj.weaver Shadow StaticInitialization
Kind StaticInitialization
To view the source code for org.aspectj.weaver Shadow StaticInitialization.
Click Source Link
From source file:org.caesarj.compiler.aspectj.CaesarPointcutScope.java
License:Open Source License
/** * Performs a lookup for the given typeName. * //w w w .j a v a2 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
public CaesarPointcutWrapper parsePointcutWrapper() { int start = tokenSource.getIndex(); IToken t = tokenSource.peek();/* w ww . ja v a 2s . c om*/ Pointcut p = t.maybeGetParsedPointcut(); if (p != null) { tokenSource.next(); return new CaesarPointcutWrapper(p); } String kind = parseIdentifier(); tokenSource.setIndex(start); if (kind.equals("if")) { return parseIfPointcut(); } else if (kind.equals("super")) { return parseSuperPointcut(); } else if (kind.equals("execution") || kind.equals("call") || kind.equals("get") || kind.equals("set")) { return parseKindedPointcut(); } else if (kind.equals("args")) { return parseArgsPointcut(); } else if (kind.equals("this") || kind.equals("target")) { return parseThisOrTargetPointcut(); } else if (kind.equals("within")) { return parseWithinPointcut(); } else if (kind.equals("withincode")) { return parseWithinCodePointcut(); } else if (kind.equals("cflow")) { return parseCflowPointcut(false); } else if (kind.equals("cflowbelow")) { return parseCflowPointcut(true); } else if (kind.equals("adviceexecution")) { parseIdentifier(); eat("("); eat(")"); // Creates the wrapper CaesarKindedPointcut pointcut = new CaesarKindedPointcut(Shadow.AdviceExecution, new SignaturePattern(Member.ADVICE, ModifiersPattern.ANY, TypePattern.ANY, TypePattern.ANY, NamePattern.ANY, TypePatternList.ANY, ThrowsPattern.ANY)); CaesarPointcutWrapper wrapper = new CaesarPointcutWrapper(pointcut); return wrapper; } else if (kind.equals("handler")) { parseIdentifier(); eat("("); TypePattern typePat = parseTypePattern(); eat(")"); // Creates the wrapper HandlerPointcut pointcut = new HandlerPointcut(typePat); CaesarPointcutWrapper wrapper = new CaesarPointcutWrapper(pointcut); wrapper.setExceptionType(typePat); return wrapper; } else if (kind.equals("initialization")) { parseIdentifier(); eat("("); SignaturePattern sig = parseConstructorSignaturePattern(); eat(")"); // Creates the wrapper CaesarKindedPointcut regular = new CaesarKindedPointcut(Shadow.Initialization, sig); return new CaesarPointcutWrapper(regular); } else if (kind.equals("staticinitialization")) { parseIdentifier(); eat("("); TypePattern typePat = parseTypePattern(); eat(")"); SignaturePattern sig = new SignaturePattern(Member.STATIC_INITIALIZATION, ModifiersPattern.ANY, TypePattern.ANY, typePat, NamePattern.ANY, TypePatternList.EMPTY, ThrowsPattern.ANY); // Creates the wrapper and register it CaesarKindedPointcut pt = new CaesarKindedPointcut(Shadow.StaticInitialization, sig); CaesarPointcutWrapper wrapper = new CaesarPointcutWrapper(pt); 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(Shadow.StaticInitialization, 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(pt, mixin); return new CaesarPointcutWrapper(orPointcut); } else if (kind.equals("preinitialization")) { parseIdentifier(); eat("("); SignaturePattern sig = parseConstructorSignaturePattern(); eat(")"); CaesarCloner c = CaesarCloner.instance(); SignaturePattern cclassSig = new SignaturePattern(Member.CONSTRUCTOR, sig.getModifiers(), c.clone(sig.getReturnType()), c.clone(sig.getDeclaringType()), c.clone(sig.getName()), createObjectTypeList(), c.clone(sig.getThrowsPattern())); CaesarKindedPointcut regular = new CaesarKindedPointcut(Shadow.PreInitialization, sig); CaesarKindedPointcut cclass = new CaesarKindedPointcut(Shadow.PreInitialization, 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); } else { return parseReferencePointcut(); } }