123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- /* *******************************************************************
- * Copyright (c) 2005 Contributors.
- * All rights reserved.
- * This program and the accompanying materials are made available
- * under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution and is available at
- * http://eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Adrian Colyer Initial implementation
- * ******************************************************************/
- package org.aspectj.weaver;
-
- import java.util.Collections;
- import java.util.List;
-
- import org.aspectj.bridge.ISourceLocation;
- import org.aspectj.bridge.context.CompilationAndWeavingContext;
-
- /**
- * When we try to resolve a type in the world that we require to be present, and then fail to find it, we return an instance of this
- * class. This class defers the production of the "can't find type error" until the first time that someone asks a question that
- * can't be answered solely from the signature. This enables the weaver to be more tolerant of missing types.
- *
- */
- public class MissingResolvedTypeWithKnownSignature extends ResolvedType {
-
- private static ResolvedMember[] NO_MEMBERS = new ResolvedMember[0];
- private static ResolvedType[] NO_TYPES = new ResolvedType[0];
- private boolean issuedCantFindTypeError = false;
- private boolean issuedJoinPointWarning = false;
- private boolean issuedMissingInterfaceWarning = false;
-
- /**
- * @param signature
- * @param world
- */
- public MissingResolvedTypeWithKnownSignature(String signature, World world) {
- super(signature, world);
- }
-
- @Override
- public boolean isMissing() {
- return true;
- }
-
- /**
- * @param signature
- * @param signatureErasure
- * @param world
- */
- public MissingResolvedTypeWithKnownSignature(String signature, String signatureErasure, World world) {
- super(signature, signatureErasure, world);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.aspectj.weaver.ResolvedType#getDeclaredFields()
- */
- @Override
- public ResolvedMember[] getDeclaredFields() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_FIELDS);
- return NO_MEMBERS;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.aspectj.weaver.ResolvedType#getDeclaredMethods()
- */
- @Override
- public ResolvedMember[] getDeclaredMethods() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_METHODS);
- return NO_MEMBERS;
- }
-
- @Override
- public AnnotationAJ[] getAnnotations() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_ANNOTATION);
- return AnnotationAJ.EMPTY_ARRAY;
- }
-
- @Override
- public ResolvedType[] getDeclaredInterfaces() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_INTERFACES);
- return NO_TYPES;
- }
-
- @Override
- public ResolvedMember[] getDeclaredPointcuts() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_POINTCUTS);
- return NO_MEMBERS;
- }
-
- @Override
- public ResolvedType getSuperclass() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_SUPERCLASS);
- return ResolvedType.MISSING;
- }
-
- @Override
- public int getModifiers() {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_MODIFIERS);
- return 0;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.aspectj.weaver.ResolvedType#getSourceContext()
- */
- @Override
- public ISourceContext getSourceContext() {
- return new ISourceContext() {
-
- @Override
- public ISourceLocation makeSourceLocation(IHasPosition position) {
- return null;
- }
-
- @Override
- public ISourceLocation makeSourceLocation(int line, int offset) {
- return null;
- }
-
- @Override
- public int getOffset() {
- return 0;
- }
-
- @Override
- public void tidy() {
- }
-
- };
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.aspectj.weaver.ResolvedType#isAssignableFrom(org.aspectj.weaver.ResolvedType)
- */
- @Override
- public boolean isAssignableFrom(ResolvedType other) {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_ASSIGNABLE, other.getName());
- return false;
- }
-
- @Override
- public boolean isAssignableFrom(ResolvedType other, boolean allowMissing) {
- if (allowMissing) {
- return false;
- } else {
- return isAssignableFrom(other);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.aspectj.weaver.ResolvedType#isCoerceableFrom(org.aspectj.weaver.ResolvedType)
- */
- @Override
- public boolean isCoerceableFrom(ResolvedType other) {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_COERCEABLE, other.getName());
- return false;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.aspectj.weaver.AnnotatedElement#hasAnnotation(org.aspectj.weaver.UnresolvedType)
- */
- @Override
- public boolean hasAnnotation(UnresolvedType ofType) {
- raiseCantFindType(WeaverMessages.CANT_FIND_TYPE_ANNOTATION);
- return false;
- }
-
- @Override
- public List getInterTypeMungers() {
- return Collections.EMPTY_LIST;
- }
-
- @Override
- public List getInterTypeMungersIncludingSupers() {
- return Collections.EMPTY_LIST;
- }
-
- @Override
- public List getInterTypeParentMungers() {
- return Collections.EMPTY_LIST;
- }
-
- @Override
- public List getInterTypeParentMungersIncludingSupers() {
- return Collections.EMPTY_LIST;
- }
-
- @Override
- protected void collectInterTypeMungers(List collector) {
- return;
- }
-
- public void raiseWarningOnJoinPointSignature(String signature) {
- if (issuedJoinPointWarning) {
- return;
- }
- String message = WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_JOINPOINT, getName(), signature);
- message += "\n" + CompilationAndWeavingContext.getCurrentContext();
- world.getLint().cantFindTypeAffectingJoinPointMatch.signal(message, null);
- // MessageUtil.warn(world.getMessageHandler(),message);
- issuedJoinPointWarning = true;
- }
-
- public void raiseWarningOnMissingInterfaceWhilstFindingMethods() {
- if (issuedMissingInterfaceWarning) {
- return;
- }
- String message = WeaverMessages.format(WeaverMessages.CANT_FIND_TYPE_INTERFACE_METHODS, getName(), signature);
- message += "\n" + CompilationAndWeavingContext.getCurrentContext();
- world.getLint().cantFindTypeAffectingJoinPointMatch.signal(message, null);
- // MessageUtil.warn(world.getMessageHandler(),message);
- issuedMissingInterfaceWarning = true;
- }
-
- private void raiseCantFindType(String key) {
- if (!world.getLint().cantFindType.isEnabled()) {
- return;
- }
- if (issuedCantFindTypeError) {
- return;
- }
- String message = WeaverMessages.format(key, getName());
- message += "\n" + CompilationAndWeavingContext.getCurrentContext();
- world.getLint().cantFindType.signal(message, null);
- // MessageUtil.error(world.getMessageHandler(),message);
- issuedCantFindTypeError = true;
- }
-
- private void raiseCantFindType(String key, String insert) {
- if (issuedCantFindTypeError) {
- return;
- }
- String message = WeaverMessages.format(key, getName(), insert);
- message += "\n" + CompilationAndWeavingContext.getCurrentContext();
- world.getLint().cantFindType.signal(message, null);
- // MessageUtil.error(world.getMessageHandler(),message);
- issuedCantFindTypeError = true;
- }
-
- }
|