[ULC] Add compiler flag -Xdisable-ultra-light-classes to fallback to light implementation in CLI
This commit is contained in:
+8
-1
@@ -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
|
||||
|
||||
+4
-3
@@ -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(
|
||||
|
||||
+6
-3
@@ -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)
|
||||
|
||||
+7
-3
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user