Move UL compiler plugin support to separate extension point

This commit is contained in:
Igor Yakovlev
2019-10-09 19:53:19 +03:00
parent 6ce37fff95
commit 3f9bffcc5f
23 changed files with 304 additions and 400 deletions
@@ -9,9 +9,16 @@ import org.jetbrains.kotlin.asJava.classes.KtUltraLightClass
import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor
import org.jetbrains.kotlin.psi.KtDeclaration
interface UltraLightClassCodegenSupport {
interface UltraLightClassModifierExtension {
companion object : ProjectExtensionDescriptor<UltraLightClassModifierExtension>(
"org.jetbrains.kotlin.ultraLightClassModifierExtension",
UltraLightClassModifierExtension::class.java
)
fun interceptMethodsBuilding(
declaration: KtDeclaration,
descriptor: Lazy<DeclarationDescriptor?>,
@@ -23,6 +30,6 @@ interface UltraLightClassCodegenSupport {
declaration: KtDeclaration,
descriptor: Lazy<DeclarationDescriptor?>,
containingDeclaration: KtUltraLightClass,
methodsList: MutableList<KtLightField>
fieldsList: MutableList<KtLightField>
) = Unit
}
@@ -14,7 +14,7 @@ import com.intellij.psi.impl.light.LightMethodBuilder
import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import org.jetbrains.kotlin.asJava.UltraLightClassCodegenSupport
import org.jetbrains.kotlin.asJava.UltraLightClassModifierExtension
import org.jetbrains.kotlin.asJava.builder.LightClassData
import org.jetbrains.kotlin.asJava.elements.KtLightField
import org.jetbrains.kotlin.asJava.elements.KtLightMethod
@@ -340,10 +340,8 @@ open class KtUltraLightClass(classOrObject: KtClassOrObject, internal val suppor
return result
}
private inline fun applyCompilerPlugins(body: (UltraLightClassCodegenSupport) -> Unit) {
ExpressionCodegenExtension.getInstances(project)
.filterIsInstance<UltraLightClassCodegenSupport>()
.forEach { body(it) }
private inline fun applyCompilerPlugins(body: (UltraLightClassModifierExtension) -> Unit) {
UltraLightClassModifierExtension.getInstances(project).forEach { body(it) }
}
private val _ownMethods: CachedValue<List<KtLightMethod>> = CachedValuesManager.getManager(project).createCachedValue(