KT-1931 Duplicate class from Kotlin runtime in completion

#KT-1931 Fixed
This commit is contained in:
Nikolay Krasko
2012-11-08 16:32:32 +04:00
parent 8bb6b651b0
commit 91f7a094fe
10 changed files with 46 additions and 8 deletions
@@ -129,7 +129,7 @@ public final class DescriptorLookupConverter {
if (declaration instanceof PsiClass) {
PsiClass psiClass = (PsiClass) declaration;
if (!DecompiledDataFactory.isCompiledFromKotlin(psiClass)) {
return new JavaPsiClassReferenceElement(psiClass).setInsertHandler(JetJavaClassInsertHandler.JAVA_CLASS_INSERT_HANDLER);
return new JavaPsiClassReferenceElement(psiClass).setInsertHandler(JetJavaClassInsertHandler.INSTANCE);
}
}
@@ -24,10 +24,13 @@ import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.asJava.JetLightClass;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils;
import org.jetbrains.jet.lang.resolve.name.FqName;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
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.libraries.DecompiledDataFactory;
import org.jetbrains.jet.plugin.project.JsModuleDetector;
public class JetTypesCompletionHelper {
@@ -69,25 +72,36 @@ public class JetTypesCompletionHelper {
JavaPsiClassReferenceElement javaPsiReferenceElement = (JavaPsiClassReferenceElement) lookupElement;
PsiClass psiClass = javaPsiReferenceElement.getObject();
if (addJavaClassAsJetLookupElement(psiClass)) {
if (addJavaClassAsJetLookupElement(psiClass, jetCompletionResult)) {
return;
}
// Redefine standard java insert handler which is going to insert fqn
javaPsiReferenceElement.setInsertHandler(JetJavaClassInsertHandler.JAVA_CLASS_INSERT_HANDLER);
jetCompletionResult.addElement(javaPsiReferenceElement);
jetCompletionResult.addElement(javaPsiReferenceElement.setInsertHandler(JetJavaClassInsertHandler.INSTANCE));
}
}
});
}
private static boolean addJavaClassAsJetLookupElement(PsiClass aClass) {
private static boolean addJavaClassAsJetLookupElement(PsiClass aClass, JetCompletionResultSet jetCompletionResult) {
if (aClass instanceof JetLightClass) {
// Do nothing. Kotlin not-compiled class should have already been added as kotlin element before.
return true;
}
if (DecompiledDataFactory.isCompiledFromKotlin(aClass)) {
// TODO: Filter classes for compiled kotlin objects
String qualifiedName = aClass.getQualifiedName();
if (qualifiedName != null) {
FqName fqName = new FqName(qualifiedName);
jetCompletionResult.addAllElements(
ResolveSessionUtils.getClassDescriptorsByFqName(jetCompletionResult.getResolveSession(), fqName));
}
return true;
}
return false;
}
}
@@ -31,7 +31,7 @@ import org.jetbrains.jet.plugin.quickfix.ImportInsertHelper;
* @author Nikolay Krasko
*/
public class JetJavaClassInsertHandler implements InsertHandler<JavaPsiClassReferenceElement> {
public static final InsertHandler<JavaPsiClassReferenceElement> JAVA_CLASS_INSERT_HANDLER = new JetJavaClassInsertHandler();
public static final InsertHandler<JavaPsiClassReferenceElement> INSTANCE = new JetJavaClassInsertHandler();
@Override
public void handleInsert(final InsertionContext context, final JavaPsiClassReferenceElement item) {