[AA] extend SymbolData API to support scripts
^KT-61431
This commit is contained in:
committed by
Space Team
parent
b6f34ad8c0
commit
adc853ebd0
+14
-6
@@ -8,11 +8,11 @@ package org.jetbrains.kotlin.analysis.api.impl.base.test
|
||||
import com.intellij.openapi.util.io.FileUtil
|
||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||
import org.jetbrains.kotlin.name.CallableId
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtNamedSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import java.io.File
|
||||
import java.nio.file.Path
|
||||
|
||||
@@ -41,24 +41,31 @@ object SymbolByFqName {
|
||||
}
|
||||
|
||||
sealed class SymbolData {
|
||||
abstract fun KtAnalysisSession.toSymbols(): List<KtSymbol>
|
||||
abstract fun KtAnalysisSession.toSymbols(ktFile: KtFile): List<KtSymbol>
|
||||
|
||||
data class ClassData(val classId: ClassId) : SymbolData() {
|
||||
override fun KtAnalysisSession.toSymbols(): List<KtSymbol> {
|
||||
override fun KtAnalysisSession.toSymbols(ktFile: KtFile): List<KtSymbol> {
|
||||
val symbol = getClassOrObjectSymbolByClassId(classId) ?: error("Class $classId is not found")
|
||||
return listOf(symbol)
|
||||
}
|
||||
}
|
||||
|
||||
object ScriptData : SymbolData() {
|
||||
override fun KtAnalysisSession.toSymbols(ktFile: KtFile): List<KtSymbol> {
|
||||
val script = ktFile.script ?: error("KtScript is not found")
|
||||
return listOf(script.getScriptSymbol())
|
||||
}
|
||||
}
|
||||
|
||||
data class TypeAliasData(val classId: ClassId) : SymbolData() {
|
||||
override fun KtAnalysisSession.toSymbols(): List<KtSymbol> {
|
||||
override fun KtAnalysisSession.toSymbols(ktFile: KtFile): List<KtSymbol> {
|
||||
val symbol = getTypeAliasByClassId(classId) ?: error("Type alias $classId is not found")
|
||||
return listOf(symbol)
|
||||
}
|
||||
}
|
||||
|
||||
data class CallableData(val callableId: CallableId) : SymbolData() {
|
||||
override fun KtAnalysisSession.toSymbols(): List<KtSymbol> {
|
||||
override fun KtAnalysisSession.toSymbols(ktFile: KtFile): List<KtSymbol> {
|
||||
val classId = callableId.classId
|
||||
val symbols = if (classId == null) {
|
||||
getTopLevelCallableSymbols(callableId.packageName, callableId.callableName).toList()
|
||||
@@ -77,9 +84,10 @@ sealed class SymbolData {
|
||||
}
|
||||
|
||||
companion object {
|
||||
val identifiers = arrayOf("callable:", "class:", "typealias:")
|
||||
val identifiers: List<String> = listOf("callable:", "class:", "typealias:", "script")
|
||||
|
||||
fun create(data: String): SymbolData = when {
|
||||
data == "script" -> ScriptData
|
||||
data.startsWith("class:") -> ClassData(ClassId.fromString(data.removePrefix("class:").trim()))
|
||||
data.startsWith("typealias:") -> TypeAliasData(ClassId.fromString(data.removePrefix("typealias:").trim()))
|
||||
data.startsWith("callable:") -> {
|
||||
|
||||
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.test.services.TestServices
|
||||
abstract class AbstractDeclaredMemberScopeTest : AbstractSymbolByFqNameTest() {
|
||||
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||
val symbols = with(symbolData) { toSymbols() }
|
||||
val symbols = with(symbolData) { toSymbols(ktFile) }
|
||||
val classSymbol = symbols.singleOrNull() as? KtSymbolWithMembers
|
||||
?: error("Should be a single class symbol, but $symbols found")
|
||||
return SymbolsData(classSymbol.getDeclaredMemberScope().getAllSymbols().toList())
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ abstract class AbstractDelegateMemberScopeTest : AbstractSymbolByFqNameTest() {
|
||||
|
||||
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||
val symbols = with(symbolData) { toSymbols() }
|
||||
val symbols = with(symbolData) { toSymbols(ktFile) }
|
||||
val classSymbol = symbols.singleOrNull() as? KtClassOrObjectSymbol
|
||||
?: error("Should be a single class symbol, but $symbols found")
|
||||
return SymbolsData(classSymbol.getDelegatedMemberScope().getCallableSymbols().toList())
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ abstract class AbstractMemberScopeByFqNameTest : AbstractSymbolByFqNameTest() {
|
||||
|
||||
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||
val symbols = with(symbolData) { toSymbols() }
|
||||
val symbols = with(symbolData) { toSymbols(ktFile) }
|
||||
val classSymbol = symbols.singleOrNull() as? KtSymbolWithMembers
|
||||
?: error("Should be a single class symbol, but $symbols found")
|
||||
return SymbolsData(classSymbol.getMemberScope().getAllSymbols().toList())
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@@ -15,7 +15,7 @@ import org.jetbrains.kotlin.test.services.TestServices
|
||||
abstract class AbstractSymbolByFqNameTest : AbstractSymbolTest() {
|
||||
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||
return SymbolsData(with(symbolData) { toSymbols() })
|
||||
return SymbolsData(with(symbolData) { toSymbols(ktFile) })
|
||||
}
|
||||
|
||||
override fun configureTest(builder: TestConfigurationBuilder) {
|
||||
|
||||
Reference in New Issue
Block a user