[Analysis API] Support script declarations (KTIJ-21108)
This commit is contained in:
+12
@@ -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,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+22
@@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
@@ -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 {
|
||||
|
||||
+23
@@ -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>
|
||||
}
|
||||
+2
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user