Example usage for org.aspectj.weaver Shadow StaticInitialization

List of usage examples for org.aspectj.weaver Shadow StaticInitialization

Introduction

In this page you can find the example usage for org.aspectj.weaver Shadow StaticInitialization.

Prototype

Kind StaticInitialization

To view the source code for org.aspectj.weaver Shadow StaticInitialization.

Click Source Link

Usage

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