FIR UAST: convert (light) class for facade
This commit is contained in:
committed by
Ilya Kirillov
parent
9baa24e626
commit
939740d26e
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.asJava.LightClassUtil
|
||||
import org.jetbrains.kotlin.asJava.classes.KtLightClass
|
||||
import org.jetbrains.kotlin.asJava.elements.*
|
||||
import org.jetbrains.kotlin.asJava.findFacadeClass
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.asJava.toPsiParameters
|
||||
import org.jetbrains.kotlin.psi.*
|
||||
@@ -56,6 +57,9 @@ internal object FirKotlinConverter {
|
||||
is KtFile -> {
|
||||
convertKtFile(original, givenParent, requiredTypes).firstOrNull()
|
||||
}
|
||||
is FakeFileForLightClass -> {
|
||||
el<UFile> { FirKotlinUFile(original.navigationElement) }
|
||||
}
|
||||
|
||||
is KtLightClass -> {
|
||||
// TODO: differentiate enum entry
|
||||
@@ -109,8 +113,8 @@ internal object FirKotlinConverter {
|
||||
return requiredTypes.accommodate(
|
||||
// File
|
||||
alternative { FirKotlinUFile(element) },
|
||||
// TODO: Facade
|
||||
// alternative { element.findFacadeClass()?.let { AbstractFirKotlinUClass.create(it, givenParent) } }
|
||||
// Facade
|
||||
alternative { element.findFacadeClass()?.let { AbstractFirKotlinUClass.create(it, givenParent) } }
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
+8
-6
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.uast.kotlin
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.asJava.findFacadeClass
|
||||
import org.jetbrains.kotlin.asJava.toLightClass
|
||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.uast.*
|
||||
@@ -34,12 +36,12 @@ class FirKotlinUFile(
|
||||
sourcePsi.importDirectives.map { FirKotlinUImportStatement(it, this) }
|
||||
}
|
||||
|
||||
override val classes: List<UClass>
|
||||
get() {
|
||||
// TODO: Script
|
||||
// TODO: Facade: getOrCreateFirLightFacade()
|
||||
return sourcePsi.declarations.mapNotNull { (it as? KtClassOrObject)?.toUClass() }
|
||||
}
|
||||
override val classes: List<UClass> by lz {
|
||||
val facadeOrScriptClass = if (sourcePsi.isScript()) sourcePsi.script?.toLightClass() else sourcePsi.findFacadeClass()
|
||||
val facadeOrScriptUClass = facadeOrScriptClass?.toUClass()?.let { listOf(it) } ?: emptyList()
|
||||
val classes = sourcePsi.declarations.mapNotNull { (it as? KtClassOrObject)?.toUClass() }
|
||||
facadeOrScriptUClass + classes
|
||||
}
|
||||
|
||||
private fun PsiElement.toUClass() = languagePlugin.convertOpt<UClass>(this, this@FirKotlinUFile)
|
||||
}
|
||||
|
||||
@@ -1 +1,7 @@
|
||||
UFile (package = declaration)
|
||||
UClass (name = Utils)
|
||||
UMethod (name = foo)
|
||||
[!] FirUnknownKotlinExpression (INTEGER_CONSTANT)
|
||||
UMethod (name = buzz)
|
||||
UParameter (name = $this$buzz)
|
||||
[!] FirUnknownKotlinExpression (BLOCK)
|
||||
|
||||
@@ -1,2 +1,6 @@
|
||||
package declaration
|
||||
|
||||
public final class Utils {
|
||||
public static final fun foo() : int = [!] FirUnknownKotlinExpression (INTEGER_CONSTANT)
|
||||
public static final fun buzz($this$buzz: java.lang.String) : java.lang.String = [!] FirUnknownKotlinExpression (BLOCK)
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
UFile (package = )
|
||||
UImportStatement (isOnDemand = false)
|
||||
UImportStatement (isOnDemand = false)
|
||||
UClass (name = ObjectsKt)
|
||||
UField (name = topRunnable)
|
||||
[!] FirUnknownKotlinExpression (OBJECT_LITERAL)
|
||||
UMethod (name = getTopRunnable)
|
||||
UMethod (name = main)
|
||||
[!] FirUnknownKotlinExpression (BLOCK)
|
||||
UClass (name = RunnableManager)
|
||||
UField (name = INSTANCE)
|
||||
UField (name = tasks)
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
import java.lang.Runnable
|
||||
import java.lang.Thread
|
||||
|
||||
public final class ObjectsKt {
|
||||
private static final var topRunnable: java.lang.Runnable = [!] FirUnknownKotlinExpression (OBJECT_LITERAL)
|
||||
public static final fun getTopRunnable() : java.lang.Runnable = UastEmptyExpression
|
||||
public static final fun main() : void = [!] FirUnknownKotlinExpression (BLOCK)
|
||||
}
|
||||
|
||||
public final class RunnableManager {
|
||||
public static final var INSTANCE: RunnableManager
|
||||
private final var tasks: java.util.List<java.lang.Runnable> = [!] FirUnknownKotlinExpression (CALL_EXPRESSION)
|
||||
|
||||
Reference in New Issue
Block a user