Example usage for org.aspectj.weaver.patterns SignaturePattern getName

List of usage examples for org.aspectj.weaver.patterns SignaturePattern getName

Introduction

In this page you can find the example usage for org.aspectj.weaver.patterns SignaturePattern getName.

Prototype

public NamePattern getName() 

Source Link

Usage

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);
    }
}