diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java index ae3b55329cc..723031da3b5 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/DescriptorResolverUtils.java @@ -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; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java index 95d294b4c1f..4aa62d37de8 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/JavaClassResolver.java @@ -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(); diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java index db1cee01bf5..ba8b9b8257d 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/JavaPackageScope.java @@ -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; diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java index c4937abb10a..87ebc254a5e 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java @@ -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); } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java index 825dbbc75a2..2159b3f953a 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/structure/JavaClass.java @@ -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; + } + } }