Browse Source

synchronization to allow multiple threads to start using the world (see Thorstens post on the mailing list)

tags/V1_6_11RC1
aclement 13 years ago
parent
commit
f7e5b6d7cf

+ 1
- 1
org.aspectj.matcher/src/org/aspectj/weaver/ReferenceType.java View File

@@ -111,7 +111,7 @@ public class ReferenceType extends ResolvedType {
// this.delegate = genericReferenceType.getDelegate();
// genericReferenceType.addDependentType(this);
// }
private void addDependentType(ReferenceType dependent) {
private synchronized void addDependentType(ReferenceType dependent) {
this.derivativeTypes.add(dependent);
}


+ 16
- 14
org.aspectj.matcher/src/org/aspectj/weaver/World.java View File

@@ -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;


Loading…
Cancel
Save