mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
inference: reuse dependencies graph
This commit is contained in:
+6
-8
@@ -570,9 +570,9 @@ public class InferenceSession {
|
||||
}
|
||||
|
||||
PsiSubstitutor prepareSubstitution() {
|
||||
ArrayList<InferenceVariable> allVars = new ArrayList<InferenceVariable>(myInferenceVariables);
|
||||
while (!allVars.isEmpty()) {
|
||||
final List<InferenceVariable> variables = InferenceVariablesOrder.resolveOrder(allVars, this);
|
||||
Iterator<List<InferenceVariable>> iterator = InferenceVariablesOrder.resolveOrderIterator(myInferenceVariables, this);
|
||||
while (iterator.hasNext()) {
|
||||
final List<InferenceVariable> variables = iterator.next();
|
||||
for (InferenceVariable inferenceVariable : variables) {
|
||||
final PsiTypeParameter typeParameter = inferenceVariable.getParameter();
|
||||
PsiType instantiation = inferenceVariable.getInstantiation();
|
||||
@@ -583,7 +583,6 @@ public class InferenceSession {
|
||||
.put(typeParameter, JavaPsiFacade.getInstance(typeParameter.getProject()).getElementFactory().createType(typeParameter));
|
||||
}
|
||||
}
|
||||
allVars.removeAll(variables);
|
||||
}
|
||||
return mySiteSubstitutor;
|
||||
}
|
||||
@@ -1053,11 +1052,10 @@ public class InferenceSession {
|
||||
|
||||
private PsiSubstitutor resolveSubsetOrdered(Set<InferenceVariable> varsToResolve, PsiSubstitutor siteSubstitutor) {
|
||||
PsiSubstitutor substitutor = siteSubstitutor;
|
||||
final HashSet<InferenceVariable> copy = new HashSet<InferenceVariable>(varsToResolve);
|
||||
while (!copy.isEmpty()) {
|
||||
final List<InferenceVariable> vars = InferenceVariablesOrder.resolveOrder(copy, this);
|
||||
final Iterator<List<InferenceVariable>> varsIterator = InferenceVariablesOrder.resolveOrderIterator(varsToResolve, this);
|
||||
while (varsIterator.hasNext()) {
|
||||
List<InferenceVariable> vars = varsIterator.next();
|
||||
final PsiSubstitutor resolveSubset = resolveSubset(vars, substitutor);
|
||||
copy.removeAll(vars);
|
||||
substitutor = substitutor.putAll(resolveSubset);
|
||||
}
|
||||
return substitutor;
|
||||
|
||||
+5
-2
@@ -27,8 +27,11 @@ import java.util.*;
|
||||
*/
|
||||
|
||||
public class InferenceVariablesOrder {
|
||||
|
||||
public static List<InferenceVariable> resolveOrder(Collection<InferenceVariable> vars, InferenceSession session) {
|
||||
return resolveOrderIterator(vars, session).next();
|
||||
}
|
||||
|
||||
public static Iterator<List<InferenceVariable>> resolveOrderIterator(Collection<InferenceVariable> vars, InferenceSession session) {
|
||||
Map<InferenceVariable, InferenceGraphNode<InferenceVariable>> nodes =
|
||||
new LinkedHashMap<InferenceVariable, InferenceGraphNode<InferenceVariable>>();
|
||||
for (InferenceVariable var : vars) {
|
||||
@@ -52,7 +55,7 @@ public class InferenceVariablesOrder {
|
||||
public List<InferenceVariable> fun(InferenceGraphNode<InferenceVariable> node) {
|
||||
return node.getValue();
|
||||
}
|
||||
}).iterator().next();
|
||||
}).iterator();
|
||||
}
|
||||
|
||||
public static <T> List<List<InferenceGraphNode<T>>> tarjan(Collection<InferenceGraphNode<T>> nodes) {
|
||||
|
||||
Reference in New Issue
Block a user