From 26b47c0180a089d662a1f5b3e5a83afd826545ce Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 11 Apr 2012 17:53:51 +0400 Subject: [PATCH] KT-1755 Duplicates in completion #KT-1755 fixed --- .../jetbrains/jet/asJava/JetLightClass.java | 10 +-- .../jet/plugin/caches/JetShortNamesCache.java | 15 +---- .../completion/DescriptorLookupConverter.java | 13 ++-- .../JetClassCompletionContributor.java | 40 ++++++----- .../completion/JetCompletionContributor.java | 26 ++----- .../plugin/completion/JetLookupObject.java | 52 ++++++++++++-- .../completion/LookupPositionObject.java | 59 ---------------- .../handlers/JetClassInsertHandler.java | 67 +++++++++++++++++++ .../handlers/JetJavaClassInsertHandler.java | 1 + .../basic/ExtensionFromStandardLibrary.kt | 5 +- .../basic/NoClassNameDuplication.kt | 12 ++++ .../multifile/JetClassCompletionImport-1.kt | 5 ++ .../multifile/JetClassCompletionImport-2.kt | 3 + .../JetClassCompletionImport.kt.after | 7 ++ .../completion/JetBasicCompletionTest.java | 4 ++ .../CompletionMultifileHandlerTest.java | 4 ++ 16 files changed, 200 insertions(+), 123 deletions(-) delete mode 100644 idea/src/org/jetbrains/jet/plugin/completion/LookupPositionObject.java create mode 100644 idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java create mode 100644 idea/testData/completion/basic/NoClassNameDuplication.kt create mode 100644 idea/testData/completion/handlers/multifile/JetClassCompletionImport-1.kt create mode 100644 idea/testData/completion/handlers/multifile/JetClassCompletionImport-2.kt create mode 100644 idea/testData/completion/handlers/multifile/JetClassCompletionImport.kt.after diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java index 9fe97e20b42..8a89bb36ab0 100644 --- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java +++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetLightClass.java @@ -49,11 +49,7 @@ import org.jetbrains.jet.codegen.GenerationState; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.FqName; -import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; -import org.jetbrains.jet.lang.resolve.java.CompilerDependencies; -import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode; -import org.jetbrains.jet.lang.resolve.java.JetFilesProvider; -import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker; +import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.util.QualifiedNamesUtil; @@ -119,6 +115,10 @@ public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMa return qualifiedName.getFqName(); } + public FqName getFqName() { + return qualifiedName; + } + private PsiJavaFileStub getStub() { CachedValue answer = file.getUserData(JAVA_API_STUB); if (answer == null) { diff --git a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java index 547e8a8310a..c96b6146d27 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java +++ b/idea/src/org/jetbrains/jet/plugin/caches/JetShortNamesCache.java @@ -130,7 +130,7 @@ public class JetShortNamesCache extends PsiShortNamesCache { @NotNull public Collection getFQNamesByName(@NotNull final String name, @NotNull GlobalSearchScope scope) { - BindingContext context = getResolutionContext(scope); + BindingContext context = WholeProjectAnalyzerFacade.analyzeProjectWithCache(project, scope).getBindingContext(); return Collections2.filter(context.getKeys(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR), new Predicate() { @Override public boolean apply(@Nullable FqName fqName) { @@ -195,11 +195,6 @@ public class JetShortNamesCache extends PsiShortNamesCache { return result; } - @NotNull - public BindingContext getResolutionContext(@NotNull GlobalSearchScope scope) { - return WholeProjectAnalyzerFacade.analyzeProjectWithCache(project, scope).getBindingContext(); - } - /** * Get jet extensions top-level function names. Method is allowed to give invalid names - all result should be * checked with getAllJetExtensionFunctionsByName(). @@ -279,14 +274,6 @@ public class JetShortNamesCache extends PsiShortNamesCache { return resultDescriptors; } - public Collection getJetFunctionsByName(@NonNls @NotNull String name, @NotNull GlobalSearchScope scope) { - return JetShortFunctionNameIndex.getInstance().get(name, project, scope); - } - - public Collection getAllJetOnlyTopFunctionsNames() { - return JetShortFunctionNameIndex.getInstance().getAllKeys(project); - } - @NotNull @Override public PsiMethod[] getMethodsByName(@NonNls @NotNull String name, @NotNull GlobalSearchScope scope) { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java index 79b17f5f528..e91f50eee11 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/DescriptorLookupConverter.java @@ -29,6 +29,7 @@ import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.plugin.completion.handlers.JetClassInsertHandler; import org.jetbrains.jet.plugin.completion.handlers.JetFunctionInsertHandler; import org.jetbrains.jet.resolve.DescriptorRenderer; @@ -48,9 +49,10 @@ public final class DescriptorLookupConverter { private DescriptorLookupConverter() {} @NotNull - public static LookupElement createLookupElement(@NotNull DeclarationDescriptor descriptor, @Nullable PsiElement declaration) { + public static LookupElement createLookupElement(@NotNull BindingContext bindingContext, @NotNull DeclarationDescriptor descriptor, @Nullable PsiElement declaration) { - LookupElementBuilder element = LookupElementBuilder.create(new JetLookupObject(descriptor, declaration), descriptor.getName()); + LookupElementBuilder element = LookupElementBuilder.create( + new JetLookupObject(descriptor, bindingContext, declaration), descriptor.getName()); String typeText = ""; String tailText = ""; boolean tailTextGrayed = false; @@ -88,8 +90,11 @@ public final class DescriptorLookupConverter { typeText = DescriptorRenderer.TEXT.renderType(outType); } else if (descriptor instanceof ClassDescriptor) { - tailText = " (" + DescriptorUtils.getFQName(descriptor.getContainingDeclaration()) + ")"; + DeclarationDescriptor declaredIn = descriptor.getContainingDeclaration(); + assert declaredIn != null; + tailText = " (" + DescriptorUtils.getFQName(declaredIn) + ")"; tailTextGrayed = true; + element = element.setInsertHandler(JetClassInsertHandler.INSTANCE); } else { typeText = DescriptorRenderer.TEXT.render(descriptor); @@ -114,7 +119,7 @@ public final class DescriptorLookupConverter { } descriptor = callableMemberDescriptor; } - return createLookupElement(descriptor, bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor)); + return createLookupElement(bindingContext, descriptor, bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, descriptor)); } public static LookupElement[] collectLookupElements(BindingContext bindingContext, Iterable descriptors) { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java index 71738d84ebc..f882c89dbdb 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetClassCompletionContributor.java @@ -18,20 +18,21 @@ package org.jetbrains.jet.plugin.completion; import com.intellij.codeInsight.completion.*; import com.intellij.codeInsight.lookup.LookupElement; -import com.intellij.openapi.project.Project; import com.intellij.patterns.PlatformPatterns; +import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiReference; -import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Consumer; import com.intellij.util.ProcessingContext; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.asJava.JetLightClass; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.jet.plugin.caches.JetCacheManager; import org.jetbrains.jet.plugin.caches.JetShortNamesCache; import org.jetbrains.jet.plugin.completion.handlers.JetJavaClassInsertHandler; +import org.jetbrains.jet.plugin.project.WholeProjectAnalyzerFacade; import org.jetbrains.jet.plugin.references.JetSimpleNameReference; import java.util.Collection; @@ -74,17 +75,14 @@ public class JetClassCompletionContributor extends CompletionContributor { static void addClasses( @NotNull final CompletionParameters parameters, @NotNull final CompletionResultSet result, - @NotNull final Consumer consumer) { - + @NotNull final Consumer consumer + ) { CompletionResultSet tempResult = result.withPrefixMatcher(CompletionUtil.findReferenceOrAlphanumericPrefix(parameters)); - Project project = parameters.getPosition().getProject(); - - JetShortNamesCache namesCache = JetCacheManager.getInstance(project).getNamesCache(); - // TODO: Make icon for standard types - Collection jetOnlyClasses = JetShortNamesCache.getJetOnlyTypes(); - BindingContext bindingContext = namesCache.getResolutionContext(GlobalSearchScope.allScope(project)); + final Collection jetOnlyClasses = JetShortNamesCache.getJetOnlyTypes(); + final BindingContext bindingContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile( + (JetFile)parameters.getPosition().getContainingFile()).getBindingContext(); for (DeclarationDescriptor jetOnlyClass : jetOnlyClasses) { consumer.consume(DescriptorLookupConverter.createLookupElement(bindingContext, jetOnlyClass)); @@ -97,13 +95,25 @@ public class JetClassCompletionContributor extends CompletionContributor { new Consumer() { @Override public void consume(LookupElement lookupElement) { - // Redefine standard java insert handler which is going to insert fqn if (lookupElement instanceof JavaPsiClassReferenceElement) { JavaPsiClassReferenceElement javaPsiReferenceElement = (JavaPsiClassReferenceElement) lookupElement; - javaPsiReferenceElement.setInsertHandler(JetJavaClassInsertHandler.JAVA_CLASS_INSERT_HANDLER); - } - consumer.consume(lookupElement); + PsiClass object = javaPsiReferenceElement.getObject(); + if (object instanceof JetLightClass) { + ClassDescriptor descriptor = + bindingContext.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, ((JetLightClass)object).getFqName()); + + if (descriptor != null) { + LookupElement element = DescriptorLookupConverter.createLookupElement(bindingContext, descriptor); + consumer.consume(element); + return; + } + } + + // Redefine standard java insert handler which is going to insert fqn + javaPsiReferenceElement.setInsertHandler(JetJavaClassInsertHandler.JAVA_CLASS_INSERT_HANDLER); + consumer.consume(lookupElement); + } } }); } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java index 47237a0d491..12e9ce74872 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetCompletionContributor.java @@ -97,7 +97,7 @@ public class JetCompletionContributor extends CompletionContributor { if (shouldRunTypeCompletionOnly(position, jetReference)) { if (session.customInvocationCount > 0) { - addClasses(parameters, result); + addClasses(parameters, result, session); } else { for (Object variant : jetReference.getVariants()) { @@ -128,7 +128,7 @@ public class JetCompletionContributor extends CompletionContributor { } if (shouldRunTopLevelCompletion(parameters, session)) { - addClasses(parameters, result); + addClasses(parameters, result, session); addJetTopLevelFunctions(jetReference.getExpression(), result, position, session); } @@ -200,7 +200,7 @@ public class JetCompletionContributor extends CompletionContributor { GlobalSearchScope scope = GlobalSearchScope.allScope(project); Collection functionNames = namesCache.getAllTopLevelFunctionNames(); - BindingContext resolutionContext = namesCache.getResolutionContext(scope); + BindingContext resolutionContext = WholeProjectAnalyzerFacade.analyzeProjectWithCacheOnAFile((JetFile)position.getContainingFile()).getBindingContext(); for (String name : functionNames) { if (name.contains(actualPrefix)) { @@ -216,12 +216,13 @@ public class JetCompletionContributor extends CompletionContributor { */ private static void addClasses( @NotNull CompletionParameters parameters, - @NotNull final CompletionResultSet result + @NotNull final CompletionResultSet result, + @NotNull final CompletionSession session ) { JetClassCompletionContributor.addClasses(parameters, result, new Consumer() { @Override public void consume(@NotNull LookupElement element) { - result.addElement(element); + addCompletionToResult(result, element, session); } }); } @@ -295,21 +296,6 @@ public class JetCompletionContributor extends CompletionContributor { } } - //private static LookupPositionObject getLookupPosition(LookupElement element) { - // Object lookupObject = element.getObject(); - // if (lookupObject instanceof PsiElement) { - // return new LookupPositionObject((PsiElement) lookupObject); - // } - // else if (lookupObject instanceof JetLookupObject) { - // PsiElement psiElement = ((JetLookupObject) lookupObject).getPsiElement(); - // if (psiElement != null) { - // return new LookupPositionObject(psiElement); - // } - // } - // - // return null; - //} - @Override public void beforeCompletion(@NotNull CompletionInitializationContext context) { super.beforeCompletion(context); //To change body of overridden methods use File | Settings | File Templates. diff --git a/idea/src/org/jetbrains/jet/plugin/completion/JetLookupObject.java b/idea/src/org/jetbrains/jet/plugin/completion/JetLookupObject.java index 748e43a047f..0628f4c25d6 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/JetLookupObject.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/JetLookupObject.java @@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.resolve.BindingContext; /** * Stores information about resolved descriptor and position of that descriptor. @@ -27,19 +28,23 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; * * @author Nikolay Krasko */ -public class JetLookupObject { - @NotNull +public final class JetLookupObject { + @Nullable private final DeclarationDescriptor descriptor; + @Nullable + private BindingContext context; + @Nullable private final PsiElement psiElement; - public JetLookupObject(@NotNull DeclarationDescriptor descriptor, @Nullable PsiElement psiElement) { + public JetLookupObject(@Nullable DeclarationDescriptor descriptor, @NotNull BindingContext context, @Nullable PsiElement psiElement) { this.descriptor = descriptor; + this.context = context; this.psiElement = psiElement; } - @NotNull + @Nullable public DeclarationDescriptor getDescriptor() { return descriptor; } @@ -48,4 +53,43 @@ public class JetLookupObject { public PsiElement getPsiElement() { return psiElement; } + + @Override + public String toString() { + return super.toString() + " " + + descriptor + " " + + psiElement; + } + + @Override + public int hashCode() { + // Always check with equals + return 0; + } + + @Override + public boolean equals(Object obj) { + if (obj == null || obj.getClass() != getClass()) { + return false; + } + + JetLookupObject other = (JetLookupObject)obj; + + // Same descriptor - same lookup element + if (descriptor != null && other.descriptor != null) { + assert context == other.context : "Can't compare descriptors from different binding context"; + + if (descriptor.equals(other.descriptor)) { + return true; + } + } + + if (psiElement != null && psiElement.equals(other.psiElement)) { + // Warning here - why descriptors are not same??? + return true; + } + + return (descriptor == null && other.descriptor == null && + psiElement == null && other.psiElement == null); + } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/LookupPositionObject.java b/idea/src/org/jetbrains/jet/plugin/completion/LookupPositionObject.java deleted file mode 100644 index e23d7a0d17c..00000000000 --- a/idea/src/org/jetbrains/jet/plugin/completion/LookupPositionObject.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 2010-2012 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.jet.plugin.completion; - -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.Pair; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; -import org.jetbrains.annotations.NotNull; - -/** - * A hack decision to avoid double completion from different sources. - * - * @author Nikolay Krasko - */ -public class LookupPositionObject { - private final Pair position; - - public LookupPositionObject(@NotNull PsiElement psiElement) { - - PsiFile file = psiElement.getContainingFile(); - String fileName = file != null ? file.getName() : null; - - position = new Pair(fileName, psiElement.getTextOffset()); - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (obj == this) { - return true; - } - if (obj.getClass() != getClass()) { - return false; - } - - return Comparing.equal(position, ((LookupPositionObject) obj).position); - } - - public int hashCode() { - return position.hashCode(); - } -} diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java new file mode 100644 index 00000000000..c158c11553f --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetClassInsertHandler.java @@ -0,0 +1,67 @@ +/* + * Copyright 2010-2012 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.completion.handlers; + +import com.intellij.codeInsight.completion.InsertHandler; +import com.intellij.codeInsight.completion.InsertionContext; +import com.intellij.codeInsight.lookup.LookupElement; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.psi.PsiElement; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.psi.JetFile; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.FqName; +import org.jetbrains.jet.plugin.completion.JetLookupObject; +import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; + +/** + * @author Nikolay Krasko + */ +public class JetClassInsertHandler implements InsertHandler { + + public static final InsertHandler INSTANCE = new JetClassInsertHandler(); + + @Override + public void handleInsert(final InsertionContext context, final LookupElement item) { + if (context.getFile() instanceof JetFile) { + final JetFile jetFile = (JetFile) context.getFile(); + ApplicationManager.getApplication().runReadAction(new Runnable() { + @Override + public void run() { + int startOffset = context.getStartOffset(); + PsiElement element = context.getFile().findElementAt(startOffset); + if (element == null) { + return; + } + + if (context.getFile() instanceof JetFile && item.getObject() instanceof JetLookupObject) { + final DeclarationDescriptor descriptor = ((JetLookupObject) item.getObject()).getDescriptor(); + if (descriptor != null) { + ApplicationManager.getApplication().runWriteAction(new Runnable() { + @Override + public void run() { + final FqName fqn = DescriptorUtils.getFQName(descriptor).toSafe(); + ImportInsertHelper.addImportDirective(fqn, jetFile); + } + }); + } + } + } + }); + } + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetJavaClassInsertHandler.java b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetJavaClassInsertHandler.java index cbbe27a7d26..c4737481e07 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetJavaClassInsertHandler.java +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/JetJavaClassInsertHandler.java @@ -32,6 +32,7 @@ import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper; public class JetJavaClassInsertHandler implements InsertHandler { public static final InsertHandler JAVA_CLASS_INSERT_HANDLER = new JetJavaClassInsertHandler(); + @Override public void handleInsert(final InsertionContext context, final JavaPsiClassReferenceElement item) { if (context.getFile() instanceof JetFile) { final JetFile jetFile = (JetFile) context.getFile(); diff --git a/idea/testData/completion/basic/ExtensionFromStandardLibrary.kt b/idea/testData/completion/basic/ExtensionFromStandardLibrary.kt index 25fae99b78e..04ed314f532 100644 --- a/idea/testData/completion/basic/ExtensionFromStandardLibrary.kt +++ b/idea/testData/completion/basic/ExtensionFromStandardLibrary.kt @@ -9,5 +9,6 @@ fun firstFun() { // RUNTIME: 1 // TIME: 1 -// EXIST: toLinkedList -// NUMBER: 3 \ No newline at end of file +// EXIST: toLinkedList~() defined in kotlin +// EXIST: toLinkedList~() defined in kotlin.nullable +// NUMBER: 2 \ No newline at end of file diff --git a/idea/testData/completion/basic/NoClassNameDuplication.kt b/idea/testData/completion/basic/NoClassNameDuplication.kt new file mode 100644 index 00000000000..09d74a6533a --- /dev/null +++ b/idea/testData/completion/basic/NoClassNameDuplication.kt @@ -0,0 +1,12 @@ +package testing + +class Testing { +} + +fun firstFun() { + Testin +} + +// TIME: 1 +// EXIST: Testing +// NUMBER: 1 \ No newline at end of file diff --git a/idea/testData/completion/handlers/multifile/JetClassCompletionImport-1.kt b/idea/testData/completion/handlers/multifile/JetClassCompletionImport-1.kt new file mode 100644 index 00000000000..91b78bb9e45 --- /dev/null +++ b/idea/testData/completion/handlers/multifile/JetClassCompletionImport-1.kt @@ -0,0 +1,5 @@ +package classimporttest + +fun test() { + TTTes +} \ No newline at end of file diff --git a/idea/testData/completion/handlers/multifile/JetClassCompletionImport-2.kt b/idea/testData/completion/handlers/multifile/JetClassCompletionImport-2.kt new file mode 100644 index 00000000000..b16f099b25c --- /dev/null +++ b/idea/testData/completion/handlers/multifile/JetClassCompletionImport-2.kt @@ -0,0 +1,3 @@ +package forimport + +class TTTest {} \ No newline at end of file diff --git a/idea/testData/completion/handlers/multifile/JetClassCompletionImport.kt.after b/idea/testData/completion/handlers/multifile/JetClassCompletionImport.kt.after new file mode 100644 index 00000000000..f7e2b77de94 --- /dev/null +++ b/idea/testData/completion/handlers/multifile/JetClassCompletionImport.kt.after @@ -0,0 +1,7 @@ +package classimporttest + +import forimport.TTTest + +fun test() { + TTTest +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java b/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java index 5bcb019d722..fd826cbc4b4 100644 --- a/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java +++ b/idea/tests/org/jetbrains/jet/completion/JetBasicCompletionTest.java @@ -101,6 +101,10 @@ public class JetBasicCompletionTest extends JetCompletionTestBase { doTest(); } + public void testNoCLassNameDuplication() { + doTest(); + } + public void testNoEmptyNamespace() { doTest(); } diff --git a/idea/tests/org/jetbrains/jet/completion/handlers/CompletionMultifileHandlerTest.java b/idea/tests/org/jetbrains/jet/completion/handlers/CompletionMultifileHandlerTest.java index e6311d8e58a..6d2da612606 100644 --- a/idea/tests/org/jetbrains/jet/completion/handlers/CompletionMultifileHandlerTest.java +++ b/idea/tests/org/jetbrains/jet/completion/handlers/CompletionMultifileHandlerTest.java @@ -30,6 +30,10 @@ public class CompletionMultifileHandlerTest extends CompletionTestCase { doTest(); } + public void testJetClassCompletionImport() throws Exception { + doTest(); + } + public void testTopLevelFunctionImport() throws Exception { doTest(); }