From bd05ade459dcc8b2ebfd36dbdfdd1ff9779ec01d Mon Sep 17 00:00:00 2001 From: Maxim Medvedev Date: Wed, 27 Jan 2010 16:54:56 +0300 Subject: [PATCH] IDEA-51822 & IDEA-51820 --- .../groovy/lang/psi/impl/statements/expressions/TypesUtil.java | 8 ++++++++ .../org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java | 10 ++++------ .../jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java | 2 ++ .../testdata/highlighting/StringAndGStringUpperBound.groovy | 2 ++ 4 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 plugins/groovy/testdata/highlighting/StringAndGStringUpperBound.groovy diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java index da7951ea4f..e4d6fa8b2f 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/TypesUtil.java @@ -349,6 +349,14 @@ public class TypesUtil { return GrClosureType.create(returnType, paramTypes, opts, manager, scope, LanguageLevel.JDK_1_5); } } + else if (GrStringUtil.GROOVY_LANG_GSTRING.equals(type1.getCanonicalText()) && + CommonClassNames.JAVA_LANG_STRING.equals(type2.getInternalCanonicalText())) { + return type2; + } + else if (GrStringUtil.GROOVY_LANG_GSTRING.equals(type2.getCanonicalText()) && + CommonClassNames.JAVA_LANG_STRING.equals(type1.getInternalCanonicalText())) { + return type1; + } return GenericsUtil.getLeastUpperBound(type1, type2, manager); } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java index a0af3e2819..69fa130139 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/resolve/ResolveUtil.java @@ -144,7 +144,7 @@ public class ResolveUtil { if (!membersProcessor.processNonCodeMembers(type, processor, place, forCompletion)) return false; } - if (type instanceof PsiArrayType) { + if (type instanceof PsiArrayType && visited.size() == 1) { //implicit super types PsiElementFactory factory = JavaPsiFacade.getInstance(project).getElementFactory(); PsiClassType t = factory.createTypeByFQClassName("java.lang.Object", GlobalSearchScope.allScope(project)); @@ -154,11 +154,9 @@ public class ResolveUtil { t = factory.createTypeByFQClassName("java.io.Serializable", GlobalSearchScope.allScope(project)); if (!processNonCodeMethods(t, processor, project, visited, place, forCompletion)) return false; } - else { - for (PsiType superType : type.getSuperTypes()) { - if (!processNonCodeMethods(TypeConversionUtil.erasure(superType), processor, project, visited, place, forCompletion)) { - return false; - } + for (PsiType superType : type.getSuperTypes()) { + if (!processNonCodeMethods(TypeConversionUtil.erasure(superType), processor, project, visited, place, forCompletion)) { + return false; } } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java index f114047df0..b988a1b9d9 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyHighlightingTest.java @@ -199,4 +199,6 @@ public class GroovyHighlightingTest extends LightCodeInsightFixtureTestCase { public void testOverlyLongMethodInspection() throws Exception { doTest(new GroovyOverlyLongMethodInspection()); } + + public void testStringAndGStringUpperBound() throws Exception {doTest();} } \ No newline at end of file diff --git a/plugins/groovy/testdata/highlighting/StringAndGStringUpperBound.groovy b/plugins/groovy/testdata/highlighting/StringAndGStringUpperBound.groovy new file mode 100644 index 0000000000..00af95a21e --- /dev/null +++ b/plugins/groovy/testdata/highlighting/StringAndGStringUpperBound.groovy @@ -0,0 +1,2 @@ +def foo(String s) {} +foo(this.is(5) ? "ac" : "jk${2}") -- 2.11.4.GIT