Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java54
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:

Back to the top