diff options
Diffstat (limited to 'org.aspectj.matcher/src/org/aspectj/weaver/World.java')
-rw-r--r-- | org.aspectj.matcher/src/org/aspectj/weaver/World.java | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/org.aspectj.matcher/src/org/aspectj/weaver/World.java b/org.aspectj.matcher/src/org/aspectj/weaver/World.java index 779804c2f..43a63b10d 100644 --- a/org.aspectj.matcher/src/org/aspectj/weaver/World.java +++ b/org.aspectj.matcher/src/org/aspectj/weaver/World.java @@ -272,8 +272,8 @@ public abstract class World implements Dump.INode { } // dispatch back to the type variable reference to resolve its - // constituent parts - // don't do this for other unresolved types otherwise you'll end up in a + // constituent parts don't do this for other unresolved types otherwise + // you'll end up in a // loop if (ty.isTypeVariableReference()) { return ty.resolve(this); @@ -300,18 +300,18 @@ public abstract class World implements Dump.INode { } // no existing resolved type, create one - if (ty.isArray()) { - ResolvedType componentType = resolve(ty.getComponentType(), allowMissing); - // String brackets = - // signature.substring(0,signature.lastIndexOf("[")+1); - ret = new ArrayReferenceType(signature, "[" + componentType.getErasureSignature(), this, componentType); - } else { - ret = resolveToReferenceType(ty, allowMissing); - if (!allowMissing && ret.isMissing()) { - ret = handleRequiredMissingTypeDuringResolution(ty); - } - if (completeBinaryTypes) { - completeBinaryType(ret); + synchronized (buildingTypeLock) { + if (ty.isArray()) { + ResolvedType componentType = resolve(ty.getComponentType(), allowMissing); + ret = new ArrayReferenceType(signature, "[" + componentType.getErasureSignature(), this, componentType); + } else { + ret = resolveToReferenceType(ty, allowMissing); + if (!allowMissing && ret.isMissing()) { + ret = handleRequiredMissingTypeDuringResolution(ty); + } + if (completeBinaryTypes) { + completeBinaryType(ret); + } } } @@ -329,6 +329,8 @@ public abstract class World implements Dump.INode { } } + private Object buildingTypeLock = new Object(); + // Only need one representation of '?' in a world - can be shared private BoundedReferenceType wildcard; |