diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ClosureConstraint.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ClosureConstraint.kt index 6fcc58b78897..aabdcf5c67be 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ClosureConstraint.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ClosureConstraint.kt @@ -2,10 +2,8 @@ package org.jetbrains.plugins.groovy.lang.resolve.processors.inference import com.intellij.psi.PsiClassType -import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiType import com.intellij.psi.impl.source.resolve.graphInference.FunctionalInterfaceParameterizationUtil.getNonWildcardParameterization -import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession import com.intellij.psi.impl.source.resolve.graphInference.constraints.ConstraintFormula import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock import org.jetbrains.plugins.groovy.lang.psi.impl.signatures.GrClosureSignatureUtil.findCall @@ -14,10 +12,10 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames import org.jetbrains.plugins.groovy.lang.sam.findSingleAbstractMethod import org.jetbrains.plugins.groovy.lang.sam.isSamConversionAllowed -class ClosureConstraint(private val closure: GrClosableBlock, private val leftType: PsiType) : ConstraintFormula { +class ClosureConstraint(private val closure: GrClosableBlock, private val leftType: PsiType) : GrConstraintFormula() { - override fun reduce(session: InferenceSession, constraints: MutableList): Boolean { - if ((session as GroovyInferenceSession).skipClosureBlock || session.closureSkipList.contains(findCall(closure))) { + override fun reduce(session: GroovyInferenceSession, constraints: MutableList): Boolean { + if (session.skipClosureBlock || session.closureSkipList.contains(findCall(closure))) { //TODO:add explicit typed closure constraints } else { @@ -57,6 +55,4 @@ class ClosureConstraint(private val closure: GrClosableBlock, private val leftTy } return null } - - override fun apply(substitutor: PsiSubstitutor, cache: Boolean) {} } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ExpressionConstraint.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ExpressionConstraint.kt index 521f2c9e102d..c7891aeb17cb 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ExpressionConstraint.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/ExpressionConstraint.kt @@ -1,18 +1,16 @@ // 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 org.jetbrains.plugins.groovy.lang.resolve.processors.inference -import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiType -import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession import com.intellij.psi.impl.source.resolve.graphInference.constraints.ConstraintFormula import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression -class ExpressionConstraint(private val expression: GrExpression, private val leftType: PsiType?) : ConstraintFormula { +class ExpressionConstraint(private val expression: GrExpression, private val leftType: PsiType?) : GrConstraintFormula() { - override fun reduce(session: InferenceSession, constraints: MutableList): Boolean { + override fun reduce(session: GroovyInferenceSession, constraints: MutableList): Boolean { when (expression) { is GrMethodCall -> { val invokedExpression = expression.invokedExpression as? GrReferenceExpression ?: return true @@ -23,6 +21,4 @@ class ExpressionConstraint(private val expression: GrExpression, private val lef } return true } - - override fun apply(substitutor: PsiSubstitutor, cache: Boolean) {} } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/GrConstraintFormula.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/GrConstraintFormula.kt new file mode 100644 index 000000000000..74a85d0322d9 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/GrConstraintFormula.kt @@ -0,0 +1,18 @@ +// 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 org.jetbrains.plugins.groovy.lang.resolve.processors.inference + +import com.intellij.psi.PsiSubstitutor +import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession +import com.intellij.psi.impl.source.resolve.graphInference.constraints.ConstraintFormula + +abstract class GrConstraintFormula : ConstraintFormula { + + final override fun reduce(session: InferenceSession?, constraints: MutableList): Boolean { + if (session !is GroovyInferenceSession) return true + return reduce(session, constraints) + } + + abstract fun reduce(session: GroovyInferenceSession, constraints: MutableList): Boolean + + override fun apply(substitutor: PsiSubstitutor, cache: Boolean) = Unit +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/MethodCallConstraint.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/MethodCallConstraint.kt index 6814b1088897..268d2cee25f8 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/MethodCallConstraint.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/MethodCallConstraint.kt @@ -1,14 +1,12 @@ // 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 org.jetbrains.plugins.groovy.lang.resolve.processors.inference -import com.intellij.psi.PsiSubstitutor -import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession import com.intellij.psi.impl.source.resolve.graphInference.constraints.ConstraintFormula import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression -class MethodCallConstraint(private val callRef: GrReferenceExpression, private val candidate: MethodCandidate) : ConstraintFormula { +class MethodCallConstraint(private val callRef: GrReferenceExpression, private val candidate: MethodCandidate) : GrConstraintFormula() { - override fun reduce(session: InferenceSession, constraints: MutableList): Boolean { + override fun reduce(session: GroovyInferenceSession, constraints: MutableList): Boolean { processArguments(constraints) return true } @@ -27,6 +25,4 @@ class MethodCallConstraint(private val callRef: GrReferenceExpression, private v } } } - - override fun apply(substitutor: PsiSubstitutor, cache: Boolean) {} -} \ No newline at end of file +} 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 e3ab2b47bde4..d9acb4b1fa8f 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 @@ -1,19 +1,16 @@ // 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 org.jetbrains.plugins.groovy.lang.resolve.processors.inference -import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiType -import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession import com.intellij.psi.impl.source.resolve.graphInference.constraints.ConstraintFormula import com.intellij.psi.impl.source.resolve.graphInference.constraints.TypeCompatibilityConstraint import org.jetbrains.plugins.groovy.lang.psi.api.GroovyMethodResult import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil -class ReferenceExpressionConstraint(private val callRef: GrReferenceExpression, private val leftType: PsiType?) : ConstraintFormula { +class ReferenceExpressionConstraint(private val callRef: GrReferenceExpression, private val leftType: PsiType?) : GrConstraintFormula() { - override fun reduce(session: InferenceSession, constraints: MutableList): Boolean { - if (session !is GroovyInferenceSession) return true + override fun reduce(session: GroovyInferenceSession, constraints: MutableList): Boolean { val resolved = callRef.advancedResolve() if (resolved !is GroovyMethodResult) return true resolved.candidate?.let { @@ -44,6 +41,4 @@ class ReferenceExpressionConstraint(private val callRef: GrReferenceExpression, } return true } - - override fun apply(substitutor: PsiSubstitutor, cache: Boolean) {} } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/TypeConstraint.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/TypeConstraint.kt index 7bb2108a0950..3ba8c176b8c9 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/TypeConstraint.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/inference/TypeConstraint.kt @@ -3,9 +3,7 @@ package org.jetbrains.plugins.groovy.lang.resolve.processors.inference import com.intellij.psi.CommonClassNames import com.intellij.psi.PsiElement -import com.intellij.psi.PsiSubstitutor import com.intellij.psi.PsiType -import com.intellij.psi.impl.source.resolve.graphInference.InferenceSession import com.intellij.psi.impl.source.resolve.graphInference.constraints.ConstraintFormula import com.intellij.psi.impl.source.resolve.graphInference.constraints.TypeCompatibilityConstraint import org.jetbrains.plugins.groovy.lang.psi.impl.GrLiteralClassType @@ -13,10 +11,9 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GrMapType import org.jetbrains.plugins.groovy.lang.psi.impl.GrTupleType import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil -class TypeConstraint(private val leftType: PsiType, private val rightType: PsiType?, private val context: PsiElement) : ConstraintFormula { +class TypeConstraint(private val leftType: PsiType, private val rightType: PsiType?, private val context: PsiElement) : GrConstraintFormula() { - override fun reduce(session: InferenceSession, constraints: MutableList): Boolean { - if (session !is GroovyInferenceSession) return true + override fun reduce(session: GroovyInferenceSession, constraints: MutableList): Boolean { var argType = rightType ?: PsiType.NULL if (argType is GrTupleType) { val rawWildcardType = TypesUtil.rawWildcard(argType, context) @@ -34,6 +31,4 @@ class TypeConstraint(private val leftType: PsiType, private val rightType: PsiTy constraints.add(TypeCompatibilityConstraint(t, s)) return true } - - override fun apply(substitutor: PsiSubstitutor, cache: Boolean) {} }