mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-193165 Groovy 2.5 @NamedParam support
This commit is contained in:
+3
-3
@@ -10,7 +10,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpres
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression
|
||||
|
||||
class ExpressionConstraint(val expression: GrExpression, val leftType: PsiType) : ConstraintFormula {
|
||||
class ExpressionConstraint(val expression: GrExpression, val leftType: PsiType?) : ConstraintFormula {
|
||||
override fun reduce(session: InferenceSession, constraints: MutableList<ConstraintFormula>): Boolean {
|
||||
when (expression) {
|
||||
is GrMethodCall -> {
|
||||
@@ -20,8 +20,8 @@ class ExpressionConstraint(val expression: GrExpression, val leftType: PsiType)
|
||||
else -> return true
|
||||
}
|
||||
}
|
||||
is GrClosableBlock -> constraints.add(ClosureConstraint(expression, leftType))
|
||||
else -> constraints.add(TypeConstraint(leftType, expression.type, expression))
|
||||
is GrClosableBlock -> if (leftType != null) constraints.add(ClosureConstraint(expression, leftType))
|
||||
else -> if (leftType != null) constraints.add(TypeConstraint(leftType, expression.type, expression))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
+1
-1
@@ -75,7 +75,7 @@ class GroovyInferenceSessionBuilder(val ref: GrReferenceExpression, val candidat
|
||||
} else {
|
||||
val session = GroovyInferenceSession(siteTypeParams, PsiSubstitutor.EMPTY, ref, skipClosureBlock)
|
||||
val methodCall = ref.parent as? GrMethodCall ?: return session
|
||||
session.addConstraint(ReferenceExpressionConstraint(getMostTopLevelCall(methodCall).invokedExpression as GrReferenceExpression, left))
|
||||
session.addConstraint(ExpressionConstraint(getMostTopLevelCall(methodCall), left))
|
||||
return session
|
||||
}
|
||||
}
|
||||
|
||||
+38
@@ -432,6 +432,44 @@ class Cl {
|
||||
}
|
||||
|
||||
}
|
||||
'''
|
||||
}
|
||||
|
||||
void 'test call without reference'() {
|
||||
testHighlighting '''
|
||||
class E {
|
||||
E call() {
|
||||
null
|
||||
}
|
||||
E bar() {null}
|
||||
|
||||
}
|
||||
|
||||
new E().bar()()
|
||||
|
||||
'''
|
||||
}
|
||||
|
||||
//TODO: IDEA-194192
|
||||
void '_test call without reference with generics'() {
|
||||
testHighlighting '''
|
||||
import groovy.transform.CompileStatic
|
||||
|
||||
class E {
|
||||
def <K,V> Map<K, V> call(Map<K, V> m) {
|
||||
m
|
||||
}
|
||||
E bar() {null}
|
||||
}
|
||||
|
||||
static <K,V> Map<K, V> getMap() {
|
||||
return new HashMap<K,V>()
|
||||
}
|
||||
|
||||
@CompileStatic
|
||||
def com() {
|
||||
Map<String, Integer> correct = new E()(getMap().withDefault({ 0 }))
|
||||
}
|
||||
'''
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user