diff options
Diffstat (limited to 'org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java')
-rw-r--r-- | org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java | 54 |
1 files changed, 4 insertions, 50 deletions
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java index 2bae65c59..ab2691c3c 100644 --- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java +++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/InferenceContext18.java @@ -131,7 +131,6 @@ public class InferenceContext18 { /** The inference variables for which as solution is sought. */ InferenceVariable[] inferenceVariables; - int nextVarId; /** Constraints that have not yet been reduced and incorporated. */ ConstraintFormula[] initialConstraints; @@ -165,43 +164,12 @@ public class InferenceContext18 { /** Not per JLS: signal when current is ready to directly merge all bounds from inner. */ private boolean directlyAcceptingInnerBounds = false; - // InferenceVariable interning: - private InferenceVariable[] internedVariables; - - private InferenceVariable getInferenceVariable(TypeBinding typeParameter, int rank, InvocationSite site) { - InferenceContext18 outermostContext = this.environment.currentInferenceContext; - if (outermostContext == null) - outermostContext = this; - int i = 0; - InferenceVariable[] interned = outermostContext.internedVariables; - if (interned == null) { - outermostContext.internedVariables = new InferenceVariable[10]; - } else { - int len = interned.length; - for (i = 0; i < len; i++) { - InferenceVariable var = interned[i]; - if (var == null) - break; - if (var.typeParameter == typeParameter && var.rank == rank && isSameSite(var.site, site)) //$IDENTITY-COMPARISON$ - return var; - } - if (i >= len) - System.arraycopy(interned, 0, outermostContext.internedVariables = new InferenceVariable[len+10], 0, len); - } - boolean differentContext = outermostContext != this; - int id = differentContext ? Math.max(this.nextVarId, outermostContext.nextVarId) : this.nextVarId; - this.nextVarId = id + 1; - if (differentContext) - outermostContext.nextVarId = this.nextVarId; - return outermostContext.internedVariables[i] = new InferenceVariable(typeParameter, rank, id, site, this.environment, this.object); - } - - boolean isSameSite(InvocationSite site1, InvocationSite site2) { + public static boolean isSameSite(InvocationSite site1, InvocationSite site2) { if (site1 == site2) return true; if (site1 == null || site2 == null) return false; - if (site1.sourceStart() == site2.sourceStart() && site1.sourceEnd() == site2.sourceEnd() && site1.toString().equals(site2.toString())) + if (site1.sourceStart() == site2.sourceStart() && site1.sourceEnd() == site2.sourceEnd()) return true; return false; } @@ -337,7 +305,7 @@ public class InferenceContext18 { } InferenceVariable[] newVariables = new InferenceVariable[len]; for (int i = 0; i < len; i++) - newVariables[i] = getInferenceVariable(typeVariables[i], i, this.currentInvocation); + newVariables[i] = InferenceVariable.get(typeVariables[i], i, this.currentInvocation, this.scope, this.object); addInferenceVariables(newVariables); return newVariables; } @@ -365,7 +333,7 @@ public class InferenceContext18 { newVariables[i] = (InferenceVariable) typeVariables[i]; // prevent double substitution of an already-substituted inferenceVariable else toAdd[numToAdd++] = - newVariables[i] = getInferenceVariable(typeVariables[i], i, this.currentInvocation); + newVariables[i] = InferenceVariable.get(typeVariables[i], i, this.currentInvocation, this.scope, this.object); } if (numToAdd > 0) { int start = 0; @@ -1571,18 +1539,6 @@ public class InferenceContext18 { if (!isSameSite(innerCtx.currentInvocation, this.currentInvocation)) innerCtx.outerContext = this; this.usesUncheckedConversion = innerCtx.usesUncheckedConversion; - for (InferenceVariable variable : this.inferenceVariables) - if (!isInterned(variable)) - variable.updateSourceName(this.nextVarId++); - } - - boolean isInterned(InferenceVariable iv) { - if (this.internedVariables != null) - for (int i = 0; i < this.internedVariables.length; i++) { - if (this.internedVariables[i] == iv) //$IDENTITY-COMPARISON$ - return true; - } - return false; } public void resumeSuspendedInference(SuspendedInferenceRecord record) { @@ -1595,8 +1551,6 @@ public class InferenceContext18 { // move to back, add previous to front: System.arraycopy(this.inferenceVariables, 0, this.inferenceVariables=new InferenceVariable[l1+l2], l2, l1); System.arraycopy(record.inferenceVariables, 0, this.inferenceVariables, 0, l2); - for (int i=l1;i<l1+l2;i++) - this.inferenceVariables[i].updateSourceName(this.nextVarId++); } // replace invocation site & arguments: |