Example usage for org.aspectj.weaver.patterns TypePattern ANY

List of usage examples for org.aspectj.weaver.patterns TypePattern ANY

Introduction

In this page you can find the example usage for org.aspectj.weaver.patterns TypePattern ANY.

Prototype

TypePattern ANY

To view the source code for org.aspectj.weaver.patterns TypePattern ANY.

Click Source Link

Usage

From source file:org.caesarj.compiler.aspectj.CaesarKindedPointcut.java

License:Open Source License

private void warnOnConfusingSig(Shadow shadow) {
    // no warnings for declare error/warning
    if (munger instanceof Checker)
        return;//from  w  w  w. jav a 2s.c  om

    World world = shadow.getIWorld();

    // warning never needed if the declaring type is any
    TypeX exactDeclaringType = signature.getDeclaringType().getExactType();

    ResolvedTypeX shadowDeclaringType = shadow.getSignature().getDeclaringType().resolve(world);

    if (signature.getDeclaringType().isStar() || exactDeclaringType == ResolvedTypeX.MISSING)
        return;

    // warning not needed if match type couldn't ever be the declaring type
    if (!shadowDeclaringType.isAssignableFrom(exactDeclaringType)) {
        return;
    }

    // if the method in the declaring type is *not* visible to the
    // exact declaring type then warning not needed.
    int shadowModifiers = shadow.getSignature().getModifiers(world);
    if (!ResolvedTypeX.isVisible(shadowModifiers, shadowDeclaringType, exactDeclaringType.resolve(world))) {
        return;
    }

    // PR60015 - Don't report the warning if the declaring type is object and 'this' is an interface
    if (exactDeclaringType.isInterface(world)
            && shadowDeclaringType.equals(world.resolve("java.lang.Object"))) {
        return;
    }

    SignaturePattern nonConfusingPattern = new SignaturePattern(signature.getKind(), signature.getModifiers(),
            signature.getReturnType(), TypePattern.ANY, signature.getName(), signature.getParameterTypes(),
            signature.getThrowsPattern());

    if (nonConfusingPattern.matches(shadow.getSignature(), shadow.getIWorld())) {
        shadow.getIWorld().getLint().unmatchedSuperTypeInCall.signal(
                new String[] { shadow.getSignature().getDeclaringType().toString(),
                        signature.getDeclaringType().toString() },
                this.getSourceLocation(), new ISourceLocation[] { shadow.getSourceLocation() });
    }
}

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  a v a  2  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

private NamePattern tryToExtractName(TypePattern nextType) {
    if (nextType == TypePattern.ANY) {
        return NamePattern.ANY;
    } else if (nextType instanceof CaesarWildTypePattern) {
        CaesarWildTypePattern p = (CaesarWildTypePattern) nextType;
        return p.extractName();
    } else if (nextType instanceof WildTypePattern) {
        WildTypePattern p = (WildTypePattern) nextType;
        return p.extractName();
    } else {/*from ww w.ja  v a  2  s.  com*/
        return null;
    }
}

From source file:org.caesarj.compiler.aspectj.CaesarWrapperPatternParser.java

License:Open Source License

public TypePattern parseSingleTypePattern() {
    List<NamePattern> names = parseDottedNamePattern();
    //      new ArrayList();
    //      NamePattern p1 = parseNamePattern();
    //      names.add(p1);
    //      while (maybeEat(".")) {
    //         if (maybeEat(".")) {
    //            names.add(NamePattern.ELLIPSIS);
    //         }//  w  w  w . j  a v a  2s.c om
    //         NamePattern p2 = parseNamePattern();
    //         names.add(p2);
    //      }
    int dim = 0;
    while (maybeEat("[")) {
        eat("]");
        dim++;
    }

    boolean includeSubtypes = maybeEat("+");
    int endPos = tokenSource.peek(-1).getEnd();

    //??? what about the source location of any's????
    if (names.size() == 1 && ((NamePattern) names.get(0)).isAny() && dim == 0)
        return TypePattern.ANY;

    return new CaesarWildTypePattern(names, includeSubtypes, dim, endPos);
}

From source file:org.caesarj.compiler.aspectj.CaesarWrapperPatternParser.java

License:Open Source License

/**
 * Creates a signator which select constructors:
 * /*from  ww w . j  a v a  2s . com*/
 *   * $constructor(..)
 *   
 * @return
 */
protected SignaturePattern createConstructorSignature() {

    return new SignaturePattern(Member.METHOD, ModifiersPattern.ANY, TypePattern.ANY, TypePattern.ANY,
            new NamePattern("$constructor"), new TypePatternList(new TypePattern[] { TypePattern.ELLIPSIS }),
            ThrowsPattern.ANY);
}