[Analysis API] Support script declarations (KTIJ-21108)

This commit is contained in:
Yan Zhulanow
2023-02-27 19:55:36 +09:00
committed by Space Team
parent e5e0575ab0
commit 37760d1f2a
12 changed files with 196 additions and 3 deletions
@@ -81,6 +81,9 @@ public class KtDeclarationRenderer private constructor(
public val anonymousObjectRenderer: KtAnonymousObjectSymbolRenderer,
public val singleTypeParameterRenderer: KtSingleTypeParameterSymbolRenderer,
public val returnTypeFilter: KtCallableReturnTypeFilter,
public val scriptRenderer: KtScriptSymbolRenderer,
public val scriptInitializerRenderer: KtScriptInitializerRenderer
) {
context(KtAnalysisSession)
@@ -104,6 +107,7 @@ public class KtDeclarationRenderer private constructor(
is KtSyntheticJavaPropertySymbol -> syntheticJavaPropertyRenderer.renderSymbol(symbol, printer)
is KtTypeParameterSymbol -> singleTypeParameterRenderer.renderSymbol(symbol, printer)
is KtClassInitializerSymbol -> classInitializerRender.renderClassInitializer(symbol, printer)
is KtScriptSymbol -> scriptRenderer.renderSymbol(symbol, printer)
}
}
@@ -165,6 +169,9 @@ public class KtDeclarationRenderer private constructor(
this.singleTypeParameterRenderer = renderer.singleTypeParameterRenderer
this.returnTypeFilter = renderer.returnTypeFilter
this.scriptRenderer = renderer.scriptRenderer
this.scriptInitializerRenderer = renderer.scriptInitializerRenderer
action()
}
}
@@ -229,6 +236,8 @@ public class KtDeclarationRenderer private constructor(
public lateinit var anonymousObjectRenderer: KtAnonymousObjectSymbolRenderer
public lateinit var singleTypeParameterRenderer: KtSingleTypeParameterSymbolRenderer
public lateinit var scriptRenderer: KtScriptSymbolRenderer
public lateinit var scriptInitializerRenderer: KtScriptInitializerRenderer
public fun build(): KtDeclarationRenderer = KtDeclarationRenderer(
nameRenderer,
@@ -284,6 +293,9 @@ public class KtDeclarationRenderer private constructor(
anonymousObjectRenderer,
singleTypeParameterRenderer,
returnTypeFilter,
scriptRenderer,
scriptInitializerRenderer,
)
}
}
@@ -0,0 +1,22 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api.renderer.declarations.bodies
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.renderer.declarations.KtDeclarationRenderer
import org.jetbrains.kotlin.analysis.api.symbols.KtScriptSymbol
import org.jetbrains.kotlin.analysis.utils.printer.PrettyPrinter
public interface KtScriptInitializerRenderer {
context(KtAnalysisSession, KtDeclarationRenderer)
public fun renderInitializer(symbol: KtScriptSymbol, printer: PrettyPrinter)
public object NO_INITIALIZER : KtScriptInitializerRenderer {
context(KtAnalysisSession)
override fun renderInitializer(symbol: KtScriptSymbol, printer: PrettyPrinter) {
}
}
}
@@ -82,6 +82,9 @@ public object KtDeclarationRendererForSource {
annotationRenderer = KtAnnotationRendererForSource.WITH_QUALIFIED_NAMES
declarationTypeApproximator = KtRendererTypeApproximator.TO_DENOTABLE
returnTypeFilter = KtCallableReturnTypeFilter.NO_UNIT_FOR_FUNCTIONS
scriptRenderer = KtScriptSymbolRenderer.AS_SOURCE
scriptInitializerRenderer = KtScriptInitializerRenderer.NO_INITIALIZER
}
public val WITH_SHORT_NAMES: KtDeclarationRenderer = WITH_QUALIFIED_NAMES.with {
@@ -0,0 +1,23 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api.renderer.declarations.renderers.callables
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.renderer.declarations.KtDeclarationRenderer
import org.jetbrains.kotlin.analysis.api.symbols.KtScriptSymbol
import org.jetbrains.kotlin.analysis.utils.printer.PrettyPrinter
public interface KtScriptSymbolRenderer {
context(KtAnalysisSession, KtDeclarationRenderer)
public fun renderSymbol(symbol: KtScriptSymbol, printer: PrettyPrinter)
public object AS_SOURCE : KtScriptSymbolRenderer {
context(KtAnalysisSession, KtDeclarationRenderer)
override fun renderSymbol(symbol: KtScriptSymbol, printer: PrettyPrinter) {
scriptInitializerRenderer.renderInitializer(symbol, printer)
}
}
}
@@ -0,0 +1,16 @@
/*
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.analysis.api.symbols
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
public abstract class KtScriptSymbol : KtDeclarationSymbol, KtAnnotatedSymbol, KtNamedSymbol {
context(KtAnalysisSession)
abstract override fun createPointer(): KtSymbolPointer<KtScriptSymbol>
}
@@ -31,11 +31,13 @@ public abstract class KtSymbolProvider : KtAnalysisSessionComponent() {
is KtPropertyAccessor -> getPropertyAccessorSymbol(psi)
is KtClassInitializer -> getClassInitializerSymbol(psi)
is KtDestructuringDeclarationEntry -> getDestructuringDeclarationEntrySymbol(psi)
is KtScript -> getScriptSymbol(psi)
else -> error("Cannot build symbol for ${psi::class}")
}
public abstract fun getParameterSymbol(psi: KtParameter): KtVariableLikeSymbol
public abstract fun getFileSymbol(psi: KtFile): KtFileSymbol
public abstract fun getScriptSymbol(psi: KtScript): KtScriptSymbol
public abstract fun getFunctionLikeSymbol(psi: KtNamedFunction): KtFunctionLikeSymbol
public abstract fun getConstructorSymbol(psi: KtConstructor<*>): KtConstructorSymbol
public abstract fun getTypeParameterSymbol(psi: KtTypeParameter): KtTypeParameterSymbol