diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java index 9be048cc95a..5f2d750ed5d 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java @@ -4,10 +4,15 @@ import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.patterns.PlatformPatterns; import com.intellij.psi.PsiElement; +import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.Consumer; import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.psi.JetQualifiedExpression; +import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; +import org.jetbrains.jet.lang.psi.JetUserType; +import org.jetbrains.jet.lexer.JetTokens; /** * @author Nikolay Krasko @@ -30,46 +35,44 @@ public class JetCompletionContributor extends CompletionContributor { } CompletionResultSet result = _result.withPrefixMatcher(CompletionUtil.findReferenceOrAlphanumericPrefix(parameters)); - JavaClassNameCompletionContributor.addAllClasses(parameters, JavaCompletionSorting.addJavaSorting( + + if (shouldRunClassNameCompletion(parameters, context)) { + JavaClassNameCompletionContributor.addAllClasses(parameters, JavaCompletionSorting.addJavaSorting( parameters, result), parameters.getInvocationCount() <= 1, new Consumer() { - @Override - public void consume(LookupElement element) { - _result.addElement(element); - } - }); + + @Override + public void consume(LookupElement element) { + _result.addElement(element); + + } + }); + } } }); } -// @Override -// public void beforeCompletion(@NotNull CompletionInitializationContext context) { -// final PsiFile file = context.getFile(); -// -// if (file instanceof JetFile) { -// autoImport(file, context.getStartOffset() - 1, context.getEditor()); -// } -// } -// -// private static void autoImport(final PsiFile file, int offset, final Editor editor) { -// final CharSequence text = editor.getDocument().getCharsSequence(); -// while (offset > 0 && Character.isJavaIdentifierPart(text.charAt(offset))) offset--; -// if (offset <= 0) return; -// -// while (offset > 0 && Character.isWhitespace(text.charAt(offset))) offset--; -// if (offset <= 0 || text.charAt(offset) != '.') return; -// -// offset--; -// -// while (offset > 0 && Character.isWhitespace(text.charAt(offset))) offset--; -// if (offset <= 0) return; -// -// final JetSimpleNameExpression nameExpression = -// PsiTreeUtil.findElementOfClassAtOffset(file, offset, JetSimpleNameExpression.class, false); -// if (nameExpression == null) return; -// -// final ImportClassFix importClassFix = new ImportClassFix(nameExpression); -// if (importClassFix.isAvailable(file.getProject(), editor, file)) { -// new ImportClassFix(nameExpression).invoke(file.getProject(), editor, file); -// } -// } + private static boolean shouldRunClassNameCompletion(@NotNull CompletionParameters parameters, ProcessingContext context) { + final PsiElement element = parameters.getPosition(); + + if (parameters.getInvocationCount() > 1) { + return true; + } + + if (element.getNode().getElementType() == JetTokens.IDENTIFIER) { + if (element.getParent() instanceof JetSimpleNameExpression) { + JetSimpleNameExpression nameExpression = (JetSimpleNameExpression) element.getParent(); + if (PsiTreeUtil.getParentOfType(nameExpression, JetQualifiedExpression.class) != null) { + return false; + } + + if (PsiTreeUtil.getParentOfType(nameExpression, JetUserType.class) != null) { + return true; + } + + return parameters.getInvocationCount() == 1; + } + } + + return false; + } } diff --git a/idea/testData/completion/basic/JavaClassNames.kt b/idea/testData/completion/basic/JavaClassNames.kt new file mode 100644 index 00000000000..554921794bc --- /dev/null +++ b/idea/testData/completion/basic/JavaClassNames.kt @@ -0,0 +1,10 @@ +package testing + +// Should show java names by short name +class Hello() { + fun test() { + val a : S + } +} + +// EXIST: SortedMap, Short, Socket \ No newline at end of file