From b6ebb8543acc0219948469227db8defa44feea8a Mon Sep 17 00:00:00 2001 From: peter Date: Sat, 6 Aug 2011 14:05:18 +0200 Subject: [PATCH] show the inferred groovy variable type in the completion type text --- .../lang/completion/GroovyCompletionUtil.java | 15 ++++++++------- .../lang/completion/weighers/GrKindWeigher.java | 8 ++++++-- .../groovy/completion/GroovyCompletionTest.groovy | 9 +++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java index 8a763c9fd363..3447b524cdc2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionUtil.java @@ -346,16 +346,17 @@ public class GroovyCompletionUtil { private static LookupElementBuilder setTypeText(PsiElement element, LookupElementBuilder builder, PsiSubstitutor substitutor) { - if (element instanceof PsiVariable) { - builder = builder.setTypeText(substitutor.substitute(((PsiVariable)element).getType()).getPresentableText()); + PsiType type = null; + if (element instanceof GrVariable) { + type = ((GrVariable)element).getTypeGroovy(); + } + else if (element instanceof PsiVariable) { + type = ((PsiVariable)element).getType(); } else if (element instanceof PsiMethod) { - final PsiType type = substitutor.substitute(((PsiMethod)element).getReturnType()); - if (type != null) { - builder = builder.setTypeText(type.getPresentableText()); - } + type = substitutor.substitute(((PsiMethod)element).getReturnType()); } - return builder; + return type != null ? builder.setTypeText(type.getPresentableText()) : builder; } public static boolean hasConstructorParameters(@NotNull PsiClass clazz, @NotNull GroovyPsiElement place) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java index cdb8e42dc9fa..a681d920474d 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/weighers/GrKindWeigher.java @@ -69,7 +69,11 @@ public class GrKindWeigher extends CompletionWeigher { if (o instanceof PsiPackage) return NotQualifiedKind.aPackage; if (isLightElement(o)) return NotQualifiedKind.anImplicitGroovyMethod; if (o instanceof PsiMember) return NotQualifiedKind.aMember; - if (o instanceof String) return NotQualifiedKind.aString; + if (o instanceof String) { + if ("for".equals(o)) return NotQualifiedKind.aKeyword; + + return NotQualifiedKind.aString; + } } else { if (o instanceof PsiClass) return QualifiedKind.aClass; @@ -97,7 +101,7 @@ public class GrKindWeigher extends CompletionWeigher { } static enum NotQualifiedKind { - aPackage, aClass, anImplicitGroovyMethod, aMember, aLocal, aString + aPackage, aClass, anImplicitGroovyMethod, aKeyword, aMember, aLocal, aString } static enum QualifiedKind { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy index 0e6f886b8678..3c8849b70068 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/GroovyCompletionTest.groovy @@ -21,6 +21,7 @@ import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.plugins.groovy.GroovyFileType import org.jetbrains.plugins.groovy.util.TestUtils import com.intellij.codeInsight.CodeInsightSettings +import com.intellij.codeInsight.lookup.LookupElementPresentation /** * @author Maxim.Medvedev @@ -205,6 +206,14 @@ public class GroovyCompletionTest extends GroovyCompletionTestBase { myFixture.testCompletionVariants(getTestName(false) + ".groovy", "geteMail", "getePost"); } + public void testInferredVariableType() throws Exception { + myFixture.configureByText "a.groovy", "def foo = 'xxx'; fo" + def presentation = new LookupElementPresentation() + myFixture.completeBasic()[0].renderElement(presentation) + assert presentation.itemText == 'foo' + assert presentation.typeText == 'String' + } + public void testIntCompletionInPlusMethod() {doBasicTest();} public void testIntCompletionInGenericParameter() {doBasicTest();}