Don't load Java's "FooPackage" class as a Kotlin package
Before creating a Kotlin package scope for a classfile, first check if it contains KotlinInfo annotation
This commit is contained in:
+9
-10
@@ -18,10 +18,7 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
|
|||||||
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.PsiMember;
|
|
||||||
import com.intellij.psi.PsiModifier;
|
|
||||||
import com.intellij.psi.PsiPackage;
|
|
||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@@ -163,12 +160,9 @@ public final class JavaNamespaceResolver {
|
|||||||
if (psiPackage != null) {
|
if (psiPackage != null) {
|
||||||
PsiClass psiClass = getPsiClassForJavaPackageScope(fqName);
|
PsiClass psiClass = getPsiClassForJavaPackageScope(fqName);
|
||||||
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.PROPER);
|
trace.record(JavaBindingContext.JAVA_NAMESPACE_KIND, namespaceDescriptor, JavaNamespaceKind.PROPER);
|
||||||
if (psiClass == null) {
|
if (psiClass == null || !isCompiledKotlinClass(psiClass)) {
|
||||||
return new JavaPackageScopeWithoutMembers(
|
return new JavaPackageScopeWithoutMembers(namespaceDescriptor, javaSemanticServices.getPsiDeclarationProviderFactory()
|
||||||
namespaceDescriptor,
|
.createDeclarationProviderForNamespaceWithoutMembers(psiPackage), fqName, javaSemanticServices);
|
||||||
javaSemanticServices.getPsiDeclarationProviderFactory()
|
|
||||||
.createDeclarationProviderForNamespaceWithoutMembers(psiPackage),
|
|
||||||
fqName, javaSemanticServices);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return createScopeForKotlinPackageClass(fqName, namespaceDescriptor, psiClass);
|
return createScopeForKotlinPackageClass(fqName, namespaceDescriptor, psiClass);
|
||||||
@@ -191,6 +185,11 @@ public final class JavaNamespaceResolver {
|
|||||||
fqName, javaSemanticServices);
|
fqName, javaSemanticServices);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean isCompiledKotlinClass(@NotNull PsiClass psiClass) {
|
||||||
|
PsiModifierList list = psiClass.getModifierList();
|
||||||
|
return list != null && list.findAnnotation(JvmStdlibNames.KOTLIN_INFO_CLASS.getFqName().asString()) != null;
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private JetScope createScopeForKotlinPackageClass(
|
private JetScope createScopeForKotlinPackageClass(
|
||||||
@NotNull FqName fqName,
|
@NotNull FqName fqName,
|
||||||
|
|||||||
Reference in New Issue
Block a user