[ULC] Add compiler flag -Xdisable-ultra-light-classes to fallback to light implementation in CLI
This commit is contained in:
+6
@@ -323,6 +323,12 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
|
||||
)
|
||||
var useFirExtendedCheckers: Boolean by FreezableVar(false)
|
||||
|
||||
@Argument(
|
||||
value = "-Xdisable-ultra-light-classes",
|
||||
description = "Do not use the ultra light classes implementation"
|
||||
)
|
||||
var disableUltraLightClasses: Boolean by FreezableVar(false)
|
||||
|
||||
@Argument(
|
||||
value = "-Xuse-mixed-named-arguments",
|
||||
description = "Enable Support named arguments in their own position even if the result appears as mixed"
|
||||
|
||||
+1
@@ -401,6 +401,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
|
||||
result[JvmAnalysisFlags.suppressMissingBuiltinsError] = suppressMissingBuiltinsError
|
||||
result[JvmAnalysisFlags.irCheckLocalNames] = irCheckLocalNames
|
||||
result[AnalysisFlags.reportErrorsOnIrDependencies] = !useIR && !useFir && !allowJvmIrDependencies
|
||||
result[JvmAnalysisFlags.disableUltraLightClasses] = disableUltraLightClasses
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -103,6 +103,9 @@ class CliLightClassGenerationSupport(
|
||||
return ultraLightSupport
|
||||
}
|
||||
|
||||
override val useUltraLightClasses: Boolean
|
||||
get() = !KtUltraLightSupport.forceUsingOldLightClasses && !traceHolder.languageVersionSettings.getFlag(JvmAnalysisFlags.disableUltraLightClasses)
|
||||
|
||||
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
|
||||
//force resolve companion for light class generation
|
||||
traceHolder.bindingContext.get(BindingContext.CLASS, classOrObject)?.companionObjectDescriptor
|
||||
|
||||
@@ -30,6 +30,9 @@ object JvmAnalysisFlags {
|
||||
@JvmStatic
|
||||
val irCheckLocalNames by AnalysisFlag.Delegates.Boolean
|
||||
|
||||
@JvmStatic
|
||||
val disableUltraLightClasses by AnalysisFlag.Delegates.Boolean
|
||||
|
||||
private object Delegates {
|
||||
object Jsr305StateWarnByDefault {
|
||||
operator fun provideDelegate(instance: Any?, property: KProperty<*>): AnalysisFlag.Delegate<Jsr305State> =
|
||||
|
||||
+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 {
|
||||
|
||||
+1
@@ -34,6 +34,7 @@ where advanced options include:
|
||||
-Xdisable-default-scripting-plugin
|
||||
Do not enable scripting plugin by default
|
||||
-Xdisable-phases Disable backend phases
|
||||
-Xdisable-ultra-light-classes Do not use the ultra light classes implementation
|
||||
-Xdump-directory Dump backend state into directory
|
||||
-Xdump-fqname FqName of declaration that should be dumped
|
||||
-Xdump-perf=<path> Dump detailed performance statistics to the specified file
|
||||
|
||||
+1
@@ -117,6 +117,7 @@ where advanced options include:
|
||||
-Xdisable-default-scripting-plugin
|
||||
Do not enable scripting plugin by default
|
||||
-Xdisable-phases Disable backend phases
|
||||
-Xdisable-ultra-light-classes Do not use the ultra light classes implementation
|
||||
-Xdump-directory Dump backend state into directory
|
||||
-Xdump-fqname FqName of declaration that should be dumped
|
||||
-Xdump-perf=<path> Dump detailed performance statistics to the specified file
|
||||
|
||||
+5
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.caches.resolve
|
||||
|
||||
import com.intellij.openapi.module.ModuleUtilCore
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.util.registry.Registry
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.util.CachedValueProvider
|
||||
import com.intellij.psi.util.CachedValuesManager
|
||||
@@ -89,6 +90,10 @@ class IDELightClassGenerationSupport(project: Project) : LightClassGenerationSup
|
||||
|
||||
override fun getUltraLightClassSupport(element: KtElement): KtUltraLightSupport = KtUltraLightSupportImpl(element)
|
||||
|
||||
override val useUltraLightClasses: Boolean
|
||||
get() =
|
||||
!KtUltraLightSupport.forceUsingOldLightClasses && Registry.`is`("kotlin.use.ultra.light.classes", true)
|
||||
|
||||
private val scopeFileComparator = JavaElementFinder.byClasspathComparator(GlobalSearchScope.allScope(project))
|
||||
|
||||
override fun createDataHolderForClass(classOrObject: KtClassOrObject, builder: LightClassBuilder): LightClassDataHolder.ForClass {
|
||||
|
||||
Reference in New Issue
Block a user