[ULC] Add compiler flag -Xdisable-ultra-light-classes to fallback to light implementation in CLI

This commit is contained in:
Igor Yakovlev
2020-09-02 14:51:46 +03:00
parent e53db4c771
commit c70383cc70
11 changed files with 45 additions and 10 deletions
@@ -57,6 +57,8 @@ abstract class LightClassGenerationSupport {
ConstantExpressionEvaluator(moduleDescriptor, languageVersionSettings, expression.project)
}
abstract val useUltraLightClasses: Boolean
fun createUltraLightClassForFacade(
manager: PsiManager,
facadeClassFqName: FqName,
@@ -64,6 +66,8 @@ abstract class LightClassGenerationSupport {
files: Collection<KtFile>,
): KtUltraLightClassForFacade? {
if (!useUltraLightClasses) return null
if (files.any { it.isScript() }) return null
val filesToSupports: List<Pair<KtFile, KtUltraLightSupport>> = files.map {
@@ -80,6 +84,9 @@ abstract class LightClassGenerationSupport {
}
fun createUltraLightClass(element: KtClassOrObject): KtUltraLightClass? {
if (!useUltraLightClasses) return null
if (element.shouldNotBeVisibleAsLightClass()) {
return null
}
@@ -101,7 +108,7 @@ abstract class LightClassGenerationSupport {
}
fun createUltraLightClassForScript(script: KtScript): KtUltraLightClassForScript? =
KtUltraLightClassForScript(script, support = getUltraLightClassSupport(script))
if (useUltraLightClasses) KtUltraLightClassForScript(script, support = getUltraLightClassSupport(script)) else null
companion object {
@JvmStatic
@@ -269,10 +269,11 @@ open class KtLightClassForFacade constructor(
val manager = PsiManager.getInstance(project)
return if (!KtUltraLightSupport.forceUsingOldLightClasses && Registry.`is`("kotlin.use.ultra.light.classes", true))
LightClassGenerationSupport.getInstance(project).createUltraLightClassForFacade(manager, fqName, stubValue, sources)
return LightClassGenerationSupport.getInstance(project).run {
if (useUltraLightClasses) createUltraLightClassForFacade(manager, fqName, stubValue, sources)
?: error { "Unable to create UL class for facade" }
else KtLightClassForFacade(manager, fqName, stubValue, sources)
else KtLightClassForFacade(manager, fqName, stubValue, sources)
}
}
fun createForFacade(
@@ -208,9 +208,12 @@ open class KtLightClassForScript(val script: KtScript) : KtLazyLightClass(script
return null
}
if (!forceUsingOldLightClasses && Registry.`is`("kotlin.use.ultra.light.classes", true)) {
return LightClassGenerationSupport.getInstance(script.project).createUltraLightClassForScript(script)
?: error("UL class cannot be created for script")
if (!forceUsingOldLightClasses) {
LightClassGenerationSupport.getInstance(script.project).run {
if (useUltraLightClasses) {
return createUltraLightClassForScript(script) ?: error("UL class cannot be created for script")
}
}
}
return KtLightClassForScript(script)
@@ -356,9 +356,13 @@ abstract class KtLightClassForSourceDeclaration(
return null
}
if (!forceUsingOldLightClasses && Registry.`is`("kotlin.use.ultra.light.classes", true)) {
return LightClassGenerationSupport.getInstance(classOrObject.project).createUltraLightClass(classOrObject)
?: error { "Unable to create UL class for ${classOrObject::javaClass.name}" }
if (!forceUsingOldLightClasses) {
LightClassGenerationSupport.getInstance(classOrObject.project).run {
if (useUltraLightClasses) {
return createUltraLightClass(classOrObject)
?: error { "Unable to create UL class for ${classOrObject::javaClass.name}" }
}
}
}
return when {