From d3b39580fad61a90b9038c83aefa2deef95e3dcd Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 7 Nov 2018 16:09:30 +0300 Subject: [PATCH] [java] make InferenceSession#propagateVariables accept InferenceSession to propagate from --- .../graphInference/InferenceSession.java | 6 +++--- .../InferenceSessionContainer.java | 18 ++---------------- .../ExpressionCompatibilityConstraint.java | 4 ++-- .../inference/ReferenceExpressionConstraint.kt | 4 ++-- 4 files changed, 9 insertions(+), 23 deletions(-) diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java index ef865a13fcab..a410628a53ba 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSession.java @@ -1922,9 +1922,9 @@ public class InferenceSession { return myContext; } - public void propagateVariables(Collection variables, PsiSubstitutor restoreNamesSubstitution) { - myInferenceVariables.addAll(variables); - myRestoreNameSubstitution = myRestoreNameSubstitution.putAll(restoreNamesSubstitution); + public final void propagateVariables(@NotNull InferenceSession from) { + myInferenceVariables.addAll(from.getInferenceVariables()); + myRestoreNameSubstitution = myRestoreNameSubstitution.putAll(from.getRestoreNameSubstitution()); } public PsiType substituteWithInferenceVariables(@Nullable PsiType type) { diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java index a57377868709..a6323c1e60c9 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/InferenceSessionContainer.java @@ -1,18 +1,4 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.psi.impl.source.resolve.graphInference; import com.intellij.openapi.diagnostic.Logger; @@ -55,7 +41,7 @@ public class InferenceSessionContainer { ExpressionCompatibilityConstraint.reduceExpressionCompatibilityConstraint(session, returnExpression, returnType, false); if (inferenceSession != null && inferenceSession != session) { registerNestedSession(inferenceSession); - session.propagateVariables(inferenceSession.getInferenceVariables(), inferenceSession.getRestoreNameSubstitution()); + session.propagateVariables(inferenceSession); } } } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java index f36ba22cd1ce..5431414ba1ed 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/resolve/graphInference/constraints/ExpressionCompatibilityConstraint.java @@ -89,7 +89,7 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm } if (callSession != session) { session.getInferenceSessionContainer().registerNestedSession(callSession); - session.propagateVariables(callSession.getInferenceVariables(), callSession.getRestoreNameSubstitution()); + session.propagateVariables(callSession); for (Pair pair : callSession.myIncorporationPhase.getCaptures()) { session.myIncorporationPhase.addCapture(pair.first, pair.second); } @@ -149,7 +149,7 @@ public class ExpressionCompatibilityConstraint extends InputOutputConstraintForm if (typeParams != null) { PsiSubstitutor siteSubstitutor = InferenceSession.chooseSiteSubstitutor(candidateProperties, resolveResult, method); final InferenceSession callSession = new InferenceSession(typeParams, siteSubstitutor, expression.getManager(), expression); - callSession.propagateVariables(session.getInferenceVariables(), session.getRestoreNameSubstitution()); + callSession.propagateVariables(session); if (method != null) { final PsiExpression[] args = argumentList.getExpressions(); final PsiParameter[] parameters = method.getParameterList().getParameters(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ReferenceExpressionConstraint.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ReferenceExpressionConstraint.kt index 5945034dd842..f0bac2094d5d 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ReferenceExpressionConstraint.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ReferenceExpressionConstraint.kt @@ -20,7 +20,7 @@ class ReferenceExpressionConstraint(private val callRef: GrReferenceExpression, val typeParameters = it.method.typeParameters val nestedSession = GroovyInferenceSession(typeParameters, it.siteSubstitutor, callRef, emptyList(), session.skipClosureBlock) session.myNestedSessions[callRef] = nestedSession - nestedSession.propagateVariables(session.inferenceVariables, session.restoreNameSubstitution) + nestedSession.propagateVariables(session) nestedSession.addConstraint(MethodCallConstraint(callRef, it)) nestedSession.repeatInferencePhases() @@ -31,7 +31,7 @@ class ReferenceExpressionConstraint(private val callRef: GrReferenceExpression, nestedSession.repeatInferencePhases() } - session.propagateVariables(nestedSession.inferenceVariables, nestedSession.restoreNameSubstitution) + session.propagateVariables(nestedSession) for (pair in nestedSession.myIncorporationPhase.captures) { session.myIncorporationPhase.addCapture(pair.first, pair.second) }