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;
|
package org.jetbrains.jet.lang.resolve.java;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.intellij.psi.impl.compiled.ClsClassImpl;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
@@ -38,7 +37,7 @@ public final class DescriptorResolverUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCompiledKotlinPackageClass(@NotNull JavaClass javaClass) {
|
public static boolean isCompiledKotlinPackageClass(@NotNull JavaClass javaClass) {
|
||||||
if (javaClass.getPsi() instanceof ClsClassImpl) {
|
if (javaClass.getOriginKind() == JavaClass.OriginKind.COMPILED) {
|
||||||
FqName fqName = javaClass.getFqName();
|
FqName fqName = javaClass.getFqName();
|
||||||
if (fqName != null && PackageClassUtils.isPackageClassFqName(fqName)) {
|
if (fqName != null && PackageClassUtils.isPackageClassFqName(fqName)) {
|
||||||
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE.getFqName().asString()) != null;
|
return javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_PACKAGE.getFqName().asString()) != null;
|
||||||
@@ -48,7 +47,7 @@ public final class DescriptorResolverUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isCompiledKotlinClass(@NotNull JavaClass javaClass) {
|
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 javaClass.findAnnotation(JvmAnnotationNames.KOTLIN_CLASS.getFqName().asString()) != null;
|
||||||
}
|
}
|
||||||
return false;
|
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.JvmAbi;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
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.sam.SingleAbstractMethodUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
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";
|
.contains(qualifiedName)) : "We can resolve the class, so it can't be 'unresolved' during parent resolution";
|
||||||
|
|
||||||
checkFqNamesAreConsistent(javaClass, qualifiedName);
|
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);
|
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
|
@NotNull
|
||||||
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
|
private ClassOrNamespaceDescriptor resolveParentDescriptor(@NotNull FqName childClassFQName, boolean isInnerClass) {
|
||||||
FqName parentFqName = childClassFQName.parent();
|
FqName parentFqName = childClassFQName.parent();
|
||||||
|
|||||||
+1
-2
@@ -21,7 +21,6 @@ import com.intellij.openapi.progress.ProgressIndicatorProvider;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
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.resolver.JavaMemberResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
import org.jetbrains.jet.lang.resolve.java.structure.JavaClass;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.JavaPackage;
|
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())) {
|
for (JavaClass javaClass : DescriptorResolverUtils.filterDuplicateClasses(javaPackage.getClasses())) {
|
||||||
if (DescriptorResolverUtils.isCompiledKotlinPackageClass(javaClass)) continue;
|
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;
|
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.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.Visibilities;
|
import org.jetbrains.jet.lang.descriptors.Visibilities;
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
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.sam.SingleAbstractMethodUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.structure.*;
|
import org.jetbrains.jet.lang.resolve.java.structure.*;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
@@ -110,7 +109,7 @@ import java.util.Map;
|
|||||||
|
|
||||||
private void process() {
|
private void process() {
|
||||||
for (JavaClass javaClass : javaClasses) {
|
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)) {
|
if (SingleAbstractMethodUtils.isSamInterface(javaClass)) {
|
||||||
processSamInterface(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.ClassKind;
|
||||||
import org.jetbrains.jet.lang.descriptors.Modality;
|
import org.jetbrains.jet.lang.descriptors.Modality;
|
||||||
import org.jetbrains.jet.lang.descriptors.Visibility;
|
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.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
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
|
public class JavaClass extends JavaClassifier
|
||||||
implements JavaNamedElement, JavaTypeParameterListOwner, JavaModifierListOwner, JavaAnnotationOwner {
|
implements JavaNamedElement, JavaTypeParameterListOwner, JavaModifierListOwner, JavaAnnotationOwner {
|
||||||
|
public enum OriginKind {
|
||||||
|
COMPILED,
|
||||||
|
SOURCE,
|
||||||
|
KOTLIN_LIGHT_CLASS
|
||||||
|
}
|
||||||
|
|
||||||
public JavaClass(@NotNull PsiClass psiClass) {
|
public JavaClass(@NotNull PsiClass psiClass) {
|
||||||
super(psiClass);
|
super(psiClass);
|
||||||
assert !(psiClass instanceof PsiTypeParameter)
|
assert !(psiClass instanceof PsiTypeParameter)
|
||||||
@@ -175,4 +182,18 @@ public class JavaClass extends JavaClassifier
|
|||||||
public JavaClassifierType getDefaultType() {
|
public JavaClassifierType getDefaultType() {
|
||||||
return new JavaClassifierType(JavaPsiFacade.getElementFactory(getPsi().getProject()).createType(getPsi()));
|
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