From f5341956f04bcc7d4d0695863f35a7b10e8741e8 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 9 Mar 2016 19:25:43 +0300 Subject: [PATCH] [groovy] do not try to infer rValue within index property assignment (EA-58298) --- .../processors/SubstitutorComputer.java | 11 +++++++++-- .../highlighting/GroovyHighlightingTest.groovy | 18 ++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java index deeae4e88e43..87ecf001c2f4 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * 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. @@ -33,6 +33,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrReturnState import org.jetbrains.plugins.groovy.lang.psi.api.statements.branch.GrThrowStatement; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.path.GrIndexProperty; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinitionBody; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrGdkMethod; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; @@ -95,7 +96,13 @@ public class SubstitutorComputer { } } else if (parent instanceof GrAssignmentExpression && myPlaceToInferContext.equals(((GrAssignmentExpression)parent).getRValue())) { - return ((GrAssignmentExpression)parent).getLValue().getType(); + GrExpression lValue = ((GrAssignmentExpression)parent).getLValue(); + if (lValue instanceof GrIndexProperty) { + return null; + } + else { + return lValue.getType(); + } } else if (parent instanceof GrVariable) { return ((GrVariable)parent).getDeclaredType(); diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy index f37b6c998232..c328a68656cb 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy @@ -1969,6 +1969,24 @@ import groovy.transform.Field @Field def (,) +''' + } + + void 'test no SOE in index property assignment with generic function'() { + testHighlighting ''' +class Main { + + static T foo() {} + + static void main(String[] args) { + def main = new Main() + main[Main] = foo() + } + + def putAt(x, String t) { + println "Works: $x = $t" + } +} ''' } }