KtLightClassForDecompiledDeclaration is now marked by KtLightClassMarker
Rename: KtJavaMirrorMarker -> KtLightClassMarker Introduce code to be able to tell light classes from source and binaries apart in 'frontend.java'
This commit is contained in:
+5
-2
@@ -14,7 +14,10 @@
|
|||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.asJava;
|
package org.jetbrains.kotlin.asJava
|
||||||
|
|
||||||
public interface KtJavaMirrorMarker {
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
|
|
||||||
|
interface KtLightClassMarker {
|
||||||
|
val originKind: LightClassOriginKind
|
||||||
}
|
}
|
||||||
@@ -24,7 +24,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope;
|
|||||||
import com.intellij.psi.search.GlobalSearchScope;
|
import com.intellij.psi.search.GlobalSearchScope;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.asJava.KtJavaMirrorMarker;
|
import org.jetbrains.kotlin.asJava.KtLightClassMarker;
|
||||||
import org.jetbrains.kotlin.idea.KotlinFileType;
|
import org.jetbrains.kotlin.idea.KotlinFileType;
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass;
|
import org.jetbrains.kotlin.load.java.structure.JavaClass;
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaPackage;
|
import org.jetbrains.kotlin.load.java.structure.JavaPackage;
|
||||||
@@ -107,7 +107,7 @@ public class JavaClassFinderImpl implements JavaClassFinder {
|
|||||||
throw new IllegalStateException("Requested " + fqName + ", got " + javaClass.getFqName());
|
throw new IllegalStateException("Requested " + fqName + ", got " + javaClass.getFqName());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psiClass instanceof KtJavaMirrorMarker) {
|
if (psiClass instanceof KtLightClassMarker) {
|
||||||
throw new IllegalStateException("Kotlin light classes should not be found by JavaPsiFacade, resolving: " + fqName);
|
throw new IllegalStateException("Kotlin light classes should not be found by JavaPsiFacade, resolving: " + fqName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-3
@@ -22,7 +22,7 @@ import kotlin.collections.CollectionsKt;
|
|||||||
import kotlin.jvm.functions.Function1;
|
import kotlin.jvm.functions.Function1;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.asJava.KtJavaMirrorMarker;
|
import org.jetbrains.kotlin.asJava.KtLightClassMarker;
|
||||||
import org.jetbrains.kotlin.descriptors.Visibility;
|
import org.jetbrains.kotlin.descriptors.Visibility;
|
||||||
import org.jetbrains.kotlin.load.java.structure.*;
|
import org.jetbrains.kotlin.load.java.structure.*;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
@@ -154,9 +154,14 @@ public class JavaClassImpl extends JavaClassifierImpl<PsiClass> implements JavaC
|
|||||||
return JavaElementUtil.getVisibility(this);
|
return JavaElementUtil.getVisibility(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public boolean isKotlinLightClass() {
|
public LightClassOriginKind getLightClassOriginKind() {
|
||||||
return getPsi() instanceof KtJavaMirrorMarker;
|
PsiClass psiClass = getPsi();
|
||||||
|
if (psiClass instanceof KtLightClassMarker) {
|
||||||
|
return ((KtLightClassMarker) psiClass).getOriginKind();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
+8
-2
@@ -23,9 +23,9 @@ import com.intellij.psi.PsiFile;
|
|||||||
import com.intellij.psi.impl.light.AbstractLightClass;
|
import com.intellij.psi.impl.light.AbstractLightClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.asJava.KtJavaMirrorMarker;
|
|
||||||
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder;
|
import org.jetbrains.kotlin.asJava.finder.JavaElementFinder;
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
import org.jetbrains.kotlin.idea.KotlinLanguage;
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind;
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
import org.jetbrains.kotlin.psi.KtClassOrObject;
|
||||||
import org.jetbrains.kotlin.psi.KtFile;
|
import org.jetbrains.kotlin.psi.KtFile;
|
||||||
|
|
||||||
@@ -37,7 +37,7 @@ import org.jetbrains.kotlin.psi.KtFile;
|
|||||||
* <p/>
|
* <p/>
|
||||||
* See {@link LineBreakpoint#findClassCandidatesInSourceContent} for the primary usage this was introduced
|
* See {@link LineBreakpoint#findClassCandidatesInSourceContent} for the primary usage this was introduced
|
||||||
*/
|
*/
|
||||||
public class FakeLightClassForFileOfPackage extends AbstractLightClass implements KtLightClass, KtJavaMirrorMarker {
|
public class FakeLightClassForFileOfPackage extends AbstractLightClass implements KtLightClass {
|
||||||
private final KtLightClassForFacade delegate;
|
private final KtLightClassForFacade delegate;
|
||||||
private final KtFile file;
|
private final KtFile file;
|
||||||
|
|
||||||
@@ -105,4 +105,10 @@ public class FakeLightClassForFileOfPackage extends AbstractLightClass implement
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return file.hashCode() * 31 + delegate.hashCode();
|
return file.hashCode() * 31 + delegate.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
@Override
|
||||||
|
public LightClassOriginKind getOriginKind() {
|
||||||
|
return LightClassOriginKind.SOURCE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
package org.jetbrains.kotlin.asJava.classes
|
package org.jetbrains.kotlin.asJava.classes
|
||||||
|
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
|
import org.jetbrains.kotlin.asJava.KtLightClassMarker
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
|
import org.jetbrains.kotlin.asJava.elements.KtLightDeclaration
|
||||||
import org.jetbrains.kotlin.name.FqName
|
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
|
||||||
interface KtLightClass : PsiClass, KtLightDeclaration<KtClassOrObject, PsiClass>
|
interface KtLightClass : PsiClass, KtLightDeclaration<KtClassOrObject, PsiClass>, KtLightClassMarker
|
||||||
|
|||||||
+5
-3
@@ -29,7 +29,6 @@ import com.intellij.psi.util.CachedValuesManager
|
|||||||
import com.intellij.psi.util.PsiModificationTracker
|
import com.intellij.psi.util.PsiModificationTracker
|
||||||
import com.intellij.util.containers.SLRUCache
|
import com.intellij.util.containers.SLRUCache
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
import org.jetbrains.kotlin.asJava.KtJavaMirrorMarker
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.asJava.builder.KotlinFacadeLightClassData
|
import org.jetbrains.kotlin.asJava.builder.KotlinFacadeLightClassData
|
||||||
import org.jetbrains.kotlin.asJava.builder.LightClassDataProviderForFileFacade
|
import org.jetbrains.kotlin.asJava.builder.LightClassDataProviderForFileFacade
|
||||||
@@ -37,6 +36,7 @@ import org.jetbrains.kotlin.asJava.elements.FakeFileForLightClass
|
|||||||
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil
|
||||||
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName
|
||||||
import org.jetbrains.kotlin.idea.KotlinLanguage
|
import org.jetbrains.kotlin.idea.KotlinLanguage
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils.fileHasTopLevelCallables
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils.fileHasTopLevelCallables
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
@@ -52,8 +52,7 @@ class KtLightClassForFacade private constructor(
|
|||||||
private val facadeClassFqName: FqName,
|
private val facadeClassFqName: FqName,
|
||||||
private val lightClassDataCache: CachedValue<KotlinFacadeLightClassData>,
|
private val lightClassDataCache: CachedValue<KotlinFacadeLightClassData>,
|
||||||
files: Collection<KtFile>
|
files: Collection<KtFile>
|
||||||
) : KtLightClassBase(manager), KtJavaMirrorMarker {
|
) : KtLightClassBase(manager) {
|
||||||
|
|
||||||
private data class StubCacheKey(val fqName: FqName, val searchScope: GlobalSearchScope)
|
private data class StubCacheKey(val fqName: FqName, val searchScope: GlobalSearchScope)
|
||||||
|
|
||||||
class FacadeStubCache(private val project: Project) {
|
class FacadeStubCache(private val project: Project) {
|
||||||
@@ -264,4 +263,7 @@ class KtLightClassForFacade private constructor(
|
|||||||
return KtLightClassForFacade(manager, facadeClassFqName, cachedValue, listOf(file))
|
return KtLightClassForFacade(manager, facadeClassFqName, cachedValue, listOf(file))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val originKind: LightClassOriginKind
|
||||||
|
get() = LightClassOriginKind.SOURCE
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -32,7 +32,6 @@ import com.intellij.psi.util.CachedValuesManager
|
|||||||
import com.intellij.util.IncorrectOperationException
|
import com.intellij.util.IncorrectOperationException
|
||||||
import com.intellij.util.containers.ContainerUtil
|
import com.intellij.util.containers.ContainerUtil
|
||||||
import org.jetbrains.annotations.NonNls
|
import org.jetbrains.annotations.NonNls
|
||||||
import org.jetbrains.kotlin.asJava.KtJavaMirrorMarker
|
|
||||||
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
import org.jetbrains.kotlin.asJava.LightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||||
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory.getOriginalElement
|
import org.jetbrains.kotlin.asJava.builder.ClsWrapperStubPsiFactory.getOriginalElement
|
||||||
@@ -48,6 +47,7 @@ import org.jetbrains.kotlin.asJava.hasInterfaceDefaultImpls
|
|||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.FqNameUnsafe
|
import org.jetbrains.kotlin.name.FqNameUnsafe
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||||
@@ -61,7 +61,7 @@ import java.util.*
|
|||||||
import javax.swing.Icon
|
import javax.swing.Icon
|
||||||
|
|
||||||
abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtClassOrObject)
|
abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtClassOrObject)
|
||||||
: KtLightClassBase(classOrObject.manager), KtJavaMirrorMarker, StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
: KtLightClassBase(classOrObject.manager), StubBasedPsiElement<KotlinClassOrObjectStub<out KtClassOrObject>> {
|
||||||
private val lightIdentifier = KtLightIdentifier(this, classOrObject)
|
private val lightIdentifier = KtLightIdentifier(this, classOrObject)
|
||||||
|
|
||||||
private val _extendsList by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
private val _extendsList by lazy(LazyThreadSafetyMode.PUBLICATION) {
|
||||||
@@ -433,4 +433,7 @@ abstract class KtLightClassForSourceDeclaration(protected val classOrObject: KtC
|
|||||||
|
|
||||||
private val LOG = Logger.getInstance(KtLightClassForSourceDeclaration::class.java)
|
private val LOG = Logger.getInstance(KtLightClassForSourceDeclaration::class.java)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override val originKind: LightClassOriginKind
|
||||||
|
get() = LightClassOriginKind.SOURCE
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.load.java.descriptors.SamConstructorDescriptorKindEx
|
|||||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
|
import org.jetbrains.kotlin.load.java.lazy.LazyJavaResolverContext
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
import org.jetbrains.kotlin.load.java.structure.JavaPackage
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
|
import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -130,7 +131,7 @@ class LazyJavaPackageScope(
|
|||||||
if (!kindFilter.acceptsKinds(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK)) return listOf()
|
if (!kindFilter.acceptsKinds(DescriptorKindFilter.NON_SINGLETON_CLASSIFIERS_MASK)) return listOf()
|
||||||
|
|
||||||
return jPackage.getClasses(nameFilter).mapNotNull { klass ->
|
return jPackage.getClasses(nameFilter).mapNotNull { klass ->
|
||||||
if (klass.isKotlinLightClass) null else klass.name
|
if (klass.lightClassOriginKind == LightClassOriginKind.SOURCE) null else klass.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -71,13 +71,17 @@ interface JavaClass : JavaClassifier, JavaTypeParameterListOwner, JavaModifierLi
|
|||||||
val isInterface: Boolean
|
val isInterface: Boolean
|
||||||
val isAnnotationType: Boolean
|
val isAnnotationType: Boolean
|
||||||
val isEnum: Boolean
|
val isEnum: Boolean
|
||||||
val isKotlinLightClass: Boolean
|
val lightClassOriginKind: LightClassOriginKind?
|
||||||
|
|
||||||
val methods: Collection<JavaMethod>
|
val methods: Collection<JavaMethod>
|
||||||
val fields: Collection<JavaField>
|
val fields: Collection<JavaField>
|
||||||
val constructors: Collection<JavaConstructor>
|
val constructors: Collection<JavaConstructor>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum class LightClassOriginKind {
|
||||||
|
SOURCE, BINARY
|
||||||
|
}
|
||||||
|
|
||||||
interface JavaMember : JavaModifierListOwner, JavaAnnotationOwner, JavaNamedElement {
|
interface JavaMember : JavaModifierListOwner, JavaAnnotationOwner, JavaNamedElement {
|
||||||
val containingClass: JavaClass
|
val containingClass: JavaClass
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
|||||||
import org.jetbrains.kotlin.load.java.components.JavaResolverCache
|
import org.jetbrains.kotlin.load.java.components.JavaResolverCache
|
||||||
import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider
|
import org.jetbrains.kotlin.load.java.lazy.LazyJavaPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
|
|
||||||
class JavaDescriptorResolver(
|
class JavaDescriptorResolver(
|
||||||
val packageFragmentProvider: LazyJavaPackageFragmentProvider,
|
val packageFragmentProvider: LazyJavaPackageFragmentProvider,
|
||||||
@@ -28,7 +29,7 @@ class JavaDescriptorResolver(
|
|||||||
) {
|
) {
|
||||||
fun resolveClass(javaClass: JavaClass): ClassDescriptor? {
|
fun resolveClass(javaClass: JavaClass): ClassDescriptor? {
|
||||||
val fqName = javaClass.fqName
|
val fqName = javaClass.fqName
|
||||||
if (fqName != null && javaClass.isKotlinLightClass) {
|
if (fqName != null && javaClass.lightClassOriginKind == LightClassOriginKind.SOURCE) {
|
||||||
return javaResolverCache.getClassResolvedFromSource(fqName)
|
return javaResolverCache.getClassResolvedFromSource(fqName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.load.java.structure.reflect
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
import org.jetbrains.kotlin.load.java.structure.JavaClass
|
||||||
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
|
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import java.lang.reflect.Method
|
import java.lang.reflect.Method
|
||||||
@@ -89,8 +90,8 @@ class ReflectJavaClass(
|
|||||||
.map(::ReflectJavaConstructor)
|
.map(::ReflectJavaConstructor)
|
||||||
.toList()
|
.toList()
|
||||||
|
|
||||||
override val isKotlinLightClass: Boolean
|
override val lightClassOriginKind: LightClassOriginKind?
|
||||||
get() = false
|
get() = null
|
||||||
|
|
||||||
override val name: Name
|
override val name: Name
|
||||||
get() = Name.identifier(klass.simpleName)
|
get() = Name.identifier(klass.simpleName)
|
||||||
|
|||||||
+4
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.asJava.classes.KtLightClassBase
|
|||||||
import org.jetbrains.kotlin.asJava.elements.KtLightFieldImpl
|
import org.jetbrains.kotlin.asJava.elements.KtLightFieldImpl
|
||||||
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl
|
import org.jetbrains.kotlin.asJava.elements.KtLightMethodImpl
|
||||||
import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile
|
import org.jetbrains.kotlin.idea.decompiler.classFile.KtClsFile
|
||||||
|
import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
|
|
||||||
@@ -62,5 +63,8 @@ class KtLightClassForDecompiledDeclaration(
|
|||||||
|
|
||||||
override fun hashCode(): Int =
|
override fun hashCode(): Int =
|
||||||
fqName.hashCode()
|
fqName.hashCode()
|
||||||
|
|
||||||
|
override val originKind: LightClassOriginKind
|
||||||
|
get() = LightClassOriginKind.BINARY
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user