aboutsummaryrefslogtreecommitdiffstats
path: root/org.aspectj.matcher/src/org/aspectj/weaver/World.java
diff options
context:
space:
mode:
Diffstat (limited to 'org.aspectj.matcher/src/org/aspectj/weaver/World.java')
-rw-r--r--org.aspectj.matcher/src/org/aspectj/weaver/World.java30
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;