Introduce JavaClass.OriginKind
Answers to the question: where had this class originated from
This commit is contained in:
+2
-3
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.jet.lang.resolve.java;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.intellij.psi.impl.compiled.ClsClassImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
@@ -38,7 +37,7 @@ public final class DescriptorResolverUtils {
|
||||
}
|
||||
|
||||
public static boolean isCompiledKotlinPackageClass(@NotNull JavaClass javaClass) {
|
||||
if (javaClass.getPsi() instanceof ClsClassImpl) {
|
||||
if (javaClass.getOriginKind() == JavaClass.OriginKind.COMPILED) {
|
||||
FqName fqName = javaClass.getFqName();
|
||||
if (fqName != null && PackageClassUtils.isPackageClassFqName(fqName)) {
|
||||
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE.getFqName().asString()) != null;
|
||||
@@ -48,7 +47,7 @@ public final class DescriptorResolverUtils {
|
||||
}
|
||||
|
||||
public static boolean isCompiledKotlinClass(@NotNull JavaClass javaClass) {
|
||||
if (javaClass.getPsi() instanceof ClsClassImpl) {
|
||||
if (javaClass.getOriginKind() == JavaClass.OriginKind.COMPILED) {
|
||||
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_CLASS.getFqName().asString()) != null;
|
||||
}
|
||||
return false;
|
||||
|
||||
+2
-8
@@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
||||
@@ -265,8 +264,9 @@ public final class JavaClassResolver {
|
||||
.contains(qualifiedName)) : "We can resolve the class, so it can't be 'unresolved' during parent resolution";
|
||||
|
||||
checkFqNamesAreConsistent(javaClass, qualifiedName);
|
||||
checkPsiClassIsNotJet(javaClass);
|
||||
|
||||
assert javaClass.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS :
|
||||
"Trying to resolve a light class as a regular PsiClass: " + javaClass.getFqName();
|
||||
|
||||
return doCreateClassDescriptor(qualifiedName, javaClass, tasks, containingDeclaration);
|
||||
}
|
||||
@@ -404,12 +404,6 @@ public final class JavaClassResolver {
|
||||
}
|
||||
}
|
||||
|
||||
private static void checkPsiClassIsNotJet(@NotNull JavaClass javaClass) {
|
||||
if (javaClass.getPsi() instanceof JetJavaMirrorMarker) {
|
||||
throw new IllegalStateException("trying to resolve fake jet PsiClass as regular PsiClass: " + javaClass.getFqName());
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
|
||||
FqName parentFqName = childClassFQName.parent();
|
||||
|
||||
+1
-2
@@ -21,7 +21,6 @@ import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaMemberResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage;
|
||||
@@ -97,7 +96,7 @@ public final class JavaPackageScope extends JavaBaseScope {
|
||||
for (JavaClass javaClass : DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses())) {
|
||||
if (DescriptorResolverUtils.isCompiledKotlinPackageClass(javaClass)) continue;
|
||||
|
||||
if (javaClass.getPsi() instanceof JetJavaMirrorMarker) continue;
|
||||
if (javaClass.getOriginKind() == JavaClass.OriginKind.KOTLIN_LIGHT_CLASS) continue;
|
||||
|
||||
if (javaClass.getVisibility() != Visibilities.PUBLIC) continue;
|
||||
|
||||
|
||||
+1
-2
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.Visibilities;
|
||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker;
|
||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.structure.*;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
@@ -110,7 +109,7 @@ import java.util.Map;
|
||||
|
||||
private void process() {
|
||||
for (JavaClass javaClass : javaClasses) {
|
||||
if (!(javaClass.getPsi() instanceof JetJavaMirrorMarker)) { // to filter out JetLightClasses
|
||||
if (javaClass.getOriginKind() != JavaClass.OriginKind.KOTLIN_LIGHT_CLASS) {
|
||||
if (SingleAbstractMethodUtils.isSamInterface(javaClass)) {
|
||||
processSamInterface(javaClass);
|
||||
}
|
||||
|
||||
+21
@@ -23,6 +23,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
||||
import org.jetbrains.jet.lang.descriptors.Modality;
|
||||
import org.jetbrains.jet.lang.descriptors.Visibility;
|
||||
import org.jetbrains.jet.lang.resolve.java.jetAsJava.JetJavaMirrorMarker;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
|
||||
@@ -32,6 +33,12 @@ import static org.jetbrains.jet.lang.resolve.java.structure.JavaElementCollectio
|
||||
|
||||
public class JavaClass extends JavaClassifier
|
||||
implements JavaNamedElement, JavaTypeParameterListOwner, JavaModifierListOwner, JavaAnnotationOwner {
|
||||
public enum OriginKind {
|
||||
COMPILED,
|
||||
SOURCE,
|
||||
KOTLIN_LIGHT_CLASS
|
||||
}
|
||||
|
||||
public JavaClass(@NotNull PsiClass psiClass) {
|
||||
super(psiClass);
|
||||
assert !(psiClass instanceof PsiTypeParameter)
|
||||
@@ -175,4 +182,18 @@ public class JavaClass extends JavaClassifier
|
||||
public JavaClassifierType getDefaultType() {
|
||||
return new JavaClassifierType(JavaPsiFacade.getElementFactory(getPsi().getProject()).createType(getPsi()));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public OriginKind getOriginKind() {
|
||||
PsiClass psiClass = getPsi();
|
||||
if (psiClass instanceof JetJavaMirrorMarker) {
|
||||
return OriginKind.KOTLIN_LIGHT_CLASS;
|
||||
}
|
||||
else if (psiClass instanceof PsiCompiledElement) {
|
||||
return OriginKind.COMPILED;
|
||||
}
|
||||
else {
|
||||
return OriginKind.SOURCE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user