[FIR IDE] Initial FIR LightClass implementation
This commit is contained in:
committed by
Ilya Kirillov
parent
c881cf7af6
commit
b742a475ff
+7
-1
@@ -550,11 +550,17 @@ fun KtClassOrObject.defaultJavaAncestorQualifiedName(): String? {
|
||||
}
|
||||
|
||||
fun KtClassOrObject.shouldNotBeVisibleAsLightClass(): Boolean {
|
||||
|
||||
if (containingFile is KtCodeFragment) {
|
||||
// Avoid building light classes for code fragments
|
||||
return true
|
||||
}
|
||||
|
||||
if (parentsWithSelf.filterIsInstance<KtClassOrObject>().any { it.hasExpectModifier() }) {
|
||||
return true
|
||||
}
|
||||
|
||||
if (safeIsLocal()) {
|
||||
if (isLocal) {
|
||||
if (containingFile.virtualFile == null) return true
|
||||
if (hasParseErrorsAround(this) || PsiUtilCore.hasErrorElementChild(this)) return true
|
||||
}
|
||||
|
||||
@@ -50,9 +50,9 @@ fun PsiReferenceList.addSuperTypeEntry(
|
||||
}
|
||||
}
|
||||
|
||||
internal fun KtClassOrObject.getExternalDependencies(): List<ModificationTracker> {
|
||||
fun KtClassOrObject.getExternalDependencies(): List<ModificationTracker> {
|
||||
return with(KotlinModificationTrackerService.getInstance(project)) {
|
||||
if (!safeIsLocal()) return listOf(outOfBlockModificationTracker)
|
||||
if (!this@getExternalDependencies.isLocal) return listOf(outOfBlockModificationTracker)
|
||||
else when (val file = containingFile) {
|
||||
is KtFile -> listOf(outOfBlockModificationTracker, fileModificationTracker(file))
|
||||
else -> listOf(outOfBlockModificationTracker)
|
||||
|
||||
@@ -32,13 +32,13 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOriginKind
|
||||
import org.jetbrains.kotlin.types.RawType
|
||||
|
||||
internal const val METHOD_INDEX_FOR_GETTER = 1
|
||||
internal const val METHOD_INDEX_FOR_SETTER = 2
|
||||
internal const val METHOD_INDEX_FOR_DEFAULT_CTOR = 3
|
||||
internal const val METHOD_INDEX_FOR_NO_ARG_OVERLOAD_CTOR = 4
|
||||
internal const val METHOD_INDEX_FOR_NON_ORIGIN_METHOD = 5
|
||||
internal const val METHOD_INDEX_FOR_SCRIPT_MAIN = 6
|
||||
internal const val METHOD_INDEX_BASE = 7
|
||||
const val METHOD_INDEX_FOR_GETTER = 1
|
||||
const val METHOD_INDEX_FOR_SETTER = 2
|
||||
const val METHOD_INDEX_FOR_DEFAULT_CTOR = 3
|
||||
const val METHOD_INDEX_FOR_NO_ARG_OVERLOAD_CTOR = 4
|
||||
const val METHOD_INDEX_FOR_NON_ORIGIN_METHOD = 5
|
||||
const val METHOD_INDEX_FOR_SCRIPT_MAIN = 6
|
||||
const val METHOD_INDEX_BASE = 7
|
||||
|
||||
internal abstract class KtUltraLightMethod(
|
||||
internal val delegate: PsiMethod,
|
||||
|
||||
@@ -26,7 +26,6 @@ import com.intellij.psi.util.PsiUtilCore
|
||||
import com.intellij.util.SmartList
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.kotlin.asJava.KotlinAsJavaSupport
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.isValidJavaFqName
|
||||
@@ -73,7 +72,7 @@ class JavaElementFinder(
|
||||
|
||||
for (declaration in classOrObjectDeclarations) {
|
||||
if (declaration !is KtEnumEntry) {
|
||||
val lightClass = declaration.toLightClass()
|
||||
val lightClass = kotlinAsJavaSupport.getLightClass(declaration)
|
||||
if (lightClass != null) {
|
||||
answer.add(lightClass)
|
||||
}
|
||||
@@ -90,7 +89,7 @@ class JavaElementFinder(
|
||||
ProgressIndicatorAndCompilationCanceledStatus.checkCanceled()
|
||||
//NOTE: can't filter out more interfaces right away because decompiled declarations do not have member bodies
|
||||
if (classOrObject is KtClass && classOrObject.isInterface()) {
|
||||
val interfaceClass = classOrObject.toLightClass() ?: continue
|
||||
val interfaceClass = kotlinAsJavaSupport.getLightClass(classOrObject) ?: continue
|
||||
val implsClass = interfaceClass.findInnerClassByName(JvmAbi.DEFAULT_IMPLS_CLASS_NAME, false) ?: continue
|
||||
answer.add(implsClass)
|
||||
}
|
||||
@@ -141,7 +140,7 @@ class JavaElementFinder(
|
||||
|
||||
val declarations = kotlinAsJavaSupport.findClassOrObjectDeclarationsInPackage(packageFQN, scope)
|
||||
for (declaration in declarations) {
|
||||
val aClass = declaration.toLightClass() ?: continue
|
||||
val aClass = kotlinAsJavaSupport.getLightClass(declaration) ?: continue
|
||||
answer.add(aClass)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user