List of usage examples for org.aspectj.weaver.patterns SignaturePattern getName
public NamePattern getName()
From source file:org.caesarj.compiler.aspectj.CaesarWrapperPatternParser.java
License:Open Source License
public CaesarPointcutWrapper parsePointcutWrapper() { int start = tokenSource.getIndex(); IToken t = tokenSource.peek();//from w ww . j av a2 s .com 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(); } }
From source file:org.caesarj.compiler.aspectj.CaesarWrapperPatternParser.java
License:Open Source License
/** * Creates a signature pattern which is a clone of this signature but has the mixinType * as declaringType/*from www . j av a2s .c o m*/ * * @param sig * @param mixinType * @return */ protected SignaturePattern createMixinSignature(SignaturePattern sig, TypePattern mixinType) { CaesarCloner c = CaesarCloner.instance(); return new SignaturePattern(sig.getKind(), sig.getModifiers(), c.clone(sig.getReturnType()), mixinType, c.clone(sig.getName()), c.clone(sig.getParameterTypes()), c.clone(sig.getThrowsPattern())); }
From source file:org.codehaus.aspectwerkz.transform.aspectj.AspectJAspectModel.java
License:Open Source License
/** * Defines the aspect./*from w w w. java 2s . c om*/ * * @param classInfo * @param aspectDef * @param loader */ public void defineAspect(final ClassInfo classInfo, final AspectDefinition aspectDef, final ClassLoader loader) { JavaClass javaClass = null; String classFileName = classInfo.getName().replace('.', '/') + ".class"; try { InputStream classStream = loader.getResourceAsStream(classFileName); ClassParser classParser = new ClassParser(classStream, classFileName); javaClass = classParser.parse(); } catch (IOException e) { throw new WrappedRuntimeException(e); } List attributes = getAspectAttributes(javaClass); if (attributes.size() == 0) { return; // not an AspectJ aspect } aspectDef.setAspectModel(getAspectModelType()); for (Iterator it = attributes.iterator(); it.hasNext();) { AjAttribute attr = (AjAttribute) it.next(); if (attr instanceof AjAttribute.PointcutDeclarationAttribute) { AjAttribute.PointcutDeclarationAttribute pcAttr = (AjAttribute.PointcutDeclarationAttribute) attr; Pointcut pointcut = pcAttr.reify().getPointcut(); if (pointcut instanceof KindedPointcut) { try { Field sigField = KindedPointcut.class.getDeclaredField("signature"); sigField.setAccessible(true); SignaturePattern signature = (SignaturePattern) sigField.get(pointcut); DefinitionParserHelper.createAndAddPointcutDefToAspectDef(signature.getName().toString(), pointcut.toString(), aspectDef); } catch (Exception e) { throw new WrappedRuntimeException(e); } } } } for (Iterator iterator = getAroundAdviceInfo(javaClass).iterator(); iterator.hasNext();) { AdviceInfo ajAdviceInfo = (AdviceInfo) iterator.next(); AdviceDefinition adviceDef = handleAdviceInfo(classInfo, aspectDef, ajAdviceInfo); aspectDef.addAroundAdviceDefinition(adviceDef); } for (Iterator iterator = getBeforeAdviceInfo(javaClass).iterator(); iterator.hasNext();) { AdviceInfo ajAdviceInfo = (AdviceInfo) iterator.next(); AdviceDefinition adviceDef = handleAdviceInfo(classInfo, aspectDef, ajAdviceInfo); aspectDef.addBeforeAdviceDefinition(adviceDef); } for (Iterator iterator = getAfterFinallyAdviceInfo(javaClass).iterator(); iterator.hasNext();) { AdviceInfo ajAdviceInfo = (AdviceInfo) iterator.next(); AdviceDefinition adviceDef = handleAdviceInfo(classInfo, aspectDef, ajAdviceInfo); aspectDef.addAfterAdviceDefinition(adviceDef); } for (Iterator iterator = getAfterReturningAdviceInfo(javaClass).iterator(); iterator.hasNext();) { AdviceInfo ajAdviceInfo = (AdviceInfo) iterator.next(); AdviceDefinition adviceDef = handleAdviceInfo(classInfo, aspectDef, ajAdviceInfo); aspectDef.addAfterAdviceDefinition(adviceDef); } for (Iterator iterator = getAfterThrowingAdviceInfo(javaClass).iterator(); iterator.hasNext();) { AdviceInfo ajAdviceInfo = (AdviceInfo) iterator.next(); AdviceDefinition adviceDef = handleAdviceInfo(classInfo, aspectDef, ajAdviceInfo); aspectDef.addAfterAdviceDefinition(adviceDef); } }