Example usage for org.aspectj.weaver Member STATIC_INITIALIZATION

List of usage examples for org.aspectj.weaver Member STATIC_INITIALIZATION

Introduction

In this page you can find the example usage for org.aspectj.weaver Member STATIC_INITIALIZATION.

Prototype

MemberKind STATIC_INITIALIZATION

To view the source code for org.aspectj.weaver Member STATIC_INITIALIZATION.

Click 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  w w  .  j av  a2s. c  o m
    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();
    }
}