[FIR] PsiRawFirBuilder: add missing script configurator
PsiRawFirBuilder#visitScript didn't work because it didn't have a configurator Now FirScriptConfiguratorExtension split into two parts: * File * Script ^KT-60728
This commit is contained in:
committed by
Space Team
parent
32e3b67416
commit
35b0cd65e9
+28
-23
@@ -49,14 +49,35 @@ class FirScriptConfiguratorExtensionImpl(
|
||||
) : FirScriptConfiguratorExtension(session) {
|
||||
|
||||
@OptIn(SymbolInternals::class)
|
||||
override fun FirScriptBuilder.configure(fileBuilder: FirFileBuilder) {
|
||||
override fun FirScriptBuilder.configureContainingFile(fileBuilder: FirFileBuilder) {
|
||||
val sourceFile = fileBuilder.sourceFile ?: return
|
||||
val configuration = getOrLoadConfiguration(sourceFile) ?: run {
|
||||
log.warn("Configuration for ${sourceFile.asString()} wasn't found. FirScriptBuilder wasn't configured.")
|
||||
return
|
||||
}
|
||||
|
||||
val configuration = getOrLoadConfiguration(sourceFile)
|
||||
?: run {
|
||||
log.warn("Configuration for ${sourceFile.asString()} wasn't found. FirScriptBuilder wasn't configured.")
|
||||
return
|
||||
configuration[ScriptCompilationConfiguration.defaultImports]?.forEach { defaultImport ->
|
||||
val trimmed = defaultImport.trim()
|
||||
val endsWithStar = trimmed.endsWith("*")
|
||||
val stripped = if (endsWithStar) trimmed.substring(0, trimmed.length - 2) else trimmed
|
||||
val fqName = FqName.fromSegments(stripped.split("."))
|
||||
fileBuilder.imports += buildImport {
|
||||
fileBuilder.sourceFile?.project()?.let {
|
||||
val dummyElement = KtPsiFactory(it, markGenerated = true).createColon()
|
||||
source = KtFakeSourceElement(dummyElement, KtFakeSourceElementKind.ImplicitImport)
|
||||
}
|
||||
importedFqName = fqName
|
||||
isAllUnder = endsWithStar
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(SymbolInternals::class)
|
||||
override fun FirScriptBuilder.configure(sourceFile: KtSourceFile) {
|
||||
val configuration = getOrLoadConfiguration(sourceFile) ?: run {
|
||||
log.warn("Configuration for ${sourceFile.asString()} wasn't found. FirScriptBuilder wasn't configured.")
|
||||
return
|
||||
}
|
||||
|
||||
// TODO: rewrite/extract decision logic for clarity
|
||||
configuration.getNoDefault(ScriptCompilationConfiguration.baseClass)?.let { baseClass ->
|
||||
@@ -85,9 +106,11 @@ class FirScriptConfiguratorExtensionImpl(
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
configuration[ScriptCompilationConfiguration.implicitReceivers]?.forEach { implicitReceiver ->
|
||||
contextReceivers.add(buildContextReceiverWithFqName(FqName.fromSegments(implicitReceiver.typeName.split("."))))
|
||||
}
|
||||
|
||||
configuration[ScriptCompilationConfiguration.providedProperties]?.forEach { (propertyName, propertyType) ->
|
||||
val typeRef = buildUserTypeRef {
|
||||
isMarkedNullable = propertyType.isNullable
|
||||
@@ -108,24 +131,6 @@ class FirScriptConfiguratorExtensionImpl(
|
||||
}
|
||||
)
|
||||
}
|
||||
configuration[ScriptCompilationConfiguration.annotationsForSamWithReceivers]?.forEach {
|
||||
_knownAnnotationsForSamWithReceiver.add(it.typeName)
|
||||
}
|
||||
|
||||
configuration[ScriptCompilationConfiguration.defaultImports]?.forEach { defaultImport ->
|
||||
val trimmed = defaultImport.trim()
|
||||
val endsWithStar = trimmed.endsWith("*")
|
||||
val stripped = if (endsWithStar) trimmed.substring(0, trimmed.length - 2) else trimmed
|
||||
val fqName = FqName.fromSegments(stripped.split("."))
|
||||
fileBuilder.imports += buildImport {
|
||||
fileBuilder.sourceFile?.project()?.let {
|
||||
val dummyElement = KtPsiFactory(it, markGenerated = true).createColon()
|
||||
source = KtFakeSourceElement(dummyElement, KtFakeSourceElementKind.ImplicitImport)
|
||||
}
|
||||
importedFqName = fqName
|
||||
isAllUnder = endsWithStar
|
||||
}
|
||||
}
|
||||
|
||||
configuration[ScriptCompilationConfiguration.annotationsForSamWithReceivers]?.forEach {
|
||||
_knownAnnotationsForSamWithReceiver.add(it.typeName)
|
||||
|
||||
Reference in New Issue
Block a user