From 96ebaaed65fe5d507cae3d56126d76f217a9f13a Mon Sep 17 00:00:00 2001 From: Andy Clement Date: Mon, 21 Jan 2013 10:46:15 -0800 Subject: 398588 fix --- weaver/src/org/aspectj/weaver/bcel/BcelWorld.java | 51 ++++++++++++----------- 1 file changed, 27 insertions(+), 24 deletions(-) (limited to 'weaver') diff --git a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java index c46c68985..7bf873bb1 100644 --- a/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java +++ b/weaver/src/org/aspectj/weaver/bcel/BcelWorld.java @@ -1000,41 +1000,44 @@ public class BcelWorld extends World implements Repository { @Override public boolean hasUnsatisfiedDependency(ResolvedType aspectType) { - if (!aspectRequiredTypesProcessed) { - if (aspectRequiredTypes != null) { - List forRemoval = new ArrayList(); - for (Map.Entry entry : aspectRequiredTypes.entrySet()) { - ResolvedType rt = this.resolve(UnresolvedType.forName(entry.getValue())); - if (!rt.isMissing()) { - forRemoval.add(entry.getKey()); - } else { - if (!getMessageHandler().isIgnoring(IMessage.INFO)) { - getMessageHandler().handleMessage( - MessageUtil.info("deactivating aspect '" + aspectType.getName() + "' as it requires type '" - + rt.getName() + "' which cannot be found on the classpath")); - } + if (aspectRequiredTypes == null) { + // no aspects require anything, so there can be no unsatisfied dependencies + return false; + } + String aspectName = aspectType.getName(); + if (!aspectRequiredTypesProcessed.contains(aspectName)) { + String requiredTypeName = aspectRequiredTypes.get(aspectName); + if (requiredTypeName==null) { + aspectRequiredTypesProcessed.add(aspectName); + return false; + } else { + ResolvedType rt = resolve(UnresolvedType.forName(requiredTypeName)); + if (!rt.isMissing()) { + aspectRequiredTypesProcessed.add(aspectName); + aspectRequiredTypes.remove(aspectName); + return false; + } else { + if (!getMessageHandler().isIgnoring(IMessage.INFO)) { + getMessageHandler().handleMessage( + MessageUtil.info("deactivating aspect '" + aspectName + "' as it requires type '" + + requiredTypeName + "' which cannot be found on the classpath")); } - } - for (String key : forRemoval) { - aspectRequiredTypes.remove(key); + aspectRequiredTypesProcessed.add(aspectName); + return true; } } - aspectRequiredTypesProcessed = true; - } - if (aspectRequiredTypes == null) { - return false; } - return aspectRequiredTypes.containsKey(aspectType.getName()); + return aspectRequiredTypes.containsKey(aspectName); } - private boolean aspectRequiredTypesProcessed = false; + private List aspectRequiredTypesProcessed = new ArrayList(); private Map aspectRequiredTypes = null; - public void addAspectRequires(String name, String requiredType) { + public void addAspectRequires(String aspectClassName, String requiredType) { if (aspectRequiredTypes == null) { aspectRequiredTypes = new HashMap(); } - aspectRequiredTypes.put(name, requiredType); + aspectRequiredTypes.put(aspectClassName, requiredType); } /** -- cgit v1.2.3