[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 com.intellij.openapi.util.io.FileUtil
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
import org.jetbrains.kotlin.name.CallableId
|
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.analysis.api.symbols.KtSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
|
||||||
@@ -41,24 +41,31 @@ object SymbolByFqName {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sealed class SymbolData {
|
sealed class SymbolData {
|
||||||
abstract fun KtAnalysisSession.toSymbols(): List<KtSymbol>
|
abstract fun KtAnalysisSession.toSymbols(ktFile: KtFile): List<KtSymbol>
|
||||||
|
|
||||||
data class ClassData(val classId: ClassId) : SymbolData() {
|
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")
|
val symbol = getClassOrObjectSymbolByClassId(classId) ?: error("Class $classId is not found")
|
||||||
return listOf(symbol)
|
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() {
|
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")
|
val symbol = getTypeAliasByClassId(classId) ?: error("Type alias $classId is not found")
|
||||||
return listOf(symbol)
|
return listOf(symbol)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
data class CallableData(val callableId: CallableId) : SymbolData() {
|
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 classId = callableId.classId
|
||||||
val symbols = if (classId == null) {
|
val symbols = if (classId == null) {
|
||||||
getTopLevelCallableSymbols(callableId.packageName, callableId.callableName).toList()
|
getTopLevelCallableSymbols(callableId.packageName, callableId.callableName).toList()
|
||||||
@@ -77,9 +84,10 @@ sealed class SymbolData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val identifiers = arrayOf("callable:", "class:", "typealias:")
|
val identifiers: List<String> = listOf("callable:", "class:", "typealias:", "script")
|
||||||
|
|
||||||
fun create(data: String): SymbolData = when {
|
fun create(data: String): SymbolData = when {
|
||||||
|
data == "script" -> ScriptData
|
||||||
data.startsWith("class:") -> ClassData(ClassId.fromString(data.removePrefix("class:").trim()))
|
data.startsWith("class:") -> ClassData(ClassId.fromString(data.removePrefix("class:").trim()))
|
||||||
data.startsWith("typealias:") -> TypeAliasData(ClassId.fromString(data.removePrefix("typealias:").trim()))
|
data.startsWith("typealias:") -> TypeAliasData(ClassId.fromString(data.removePrefix("typealias:").trim()))
|
||||||
data.startsWith("callable:") -> {
|
data.startsWith("callable:") -> {
|
||||||
|
|||||||
+1
-1
@@ -16,7 +16,7 @@ import org.jetbrains.kotlin.test.services.TestServices
|
|||||||
abstract class AbstractDeclaredMemberScopeTest : AbstractSymbolByFqNameTest() {
|
abstract class AbstractDeclaredMemberScopeTest : AbstractSymbolByFqNameTest() {
|
||||||
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||||
val symbols = with(symbolData) { toSymbols() }
|
val symbols = with(symbolData) { toSymbols(ktFile) }
|
||||||
val classSymbol = symbols.singleOrNull() as? KtSymbolWithMembers
|
val classSymbol = symbols.singleOrNull() as? KtSymbolWithMembers
|
||||||
?: error("Should be a single class symbol, but $symbols found")
|
?: error("Should be a single class symbol, but $symbols found")
|
||||||
return SymbolsData(classSymbol.getDeclaredMemberScope().getAllSymbols().toList())
|
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 {
|
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||||
val symbols = with(symbolData) { toSymbols() }
|
val symbols = with(symbolData) { toSymbols(ktFile) }
|
||||||
val classSymbol = symbols.singleOrNull() as? KtClassOrObjectSymbol
|
val classSymbol = symbols.singleOrNull() as? KtClassOrObjectSymbol
|
||||||
?: error("Should be a single class symbol, but $symbols found")
|
?: error("Should be a single class symbol, but $symbols found")
|
||||||
return SymbolsData(classSymbol.getDelegatedMemberScope().getCallableSymbols().toList())
|
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 {
|
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||||
val symbols = with(symbolData) { toSymbols() }
|
val symbols = with(symbolData) { toSymbols(ktFile) }
|
||||||
val classSymbol = symbols.singleOrNull() as? KtSymbolWithMembers
|
val classSymbol = symbols.singleOrNull() as? KtSymbolWithMembers
|
||||||
?: error("Should be a single class symbol, but $symbols found")
|
?: error("Should be a single class symbol, but $symbols found")
|
||||||
return SymbolsData(classSymbol.getMemberScope().getAllSymbols().toList())
|
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.
|
* 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() {
|
abstract class AbstractSymbolByFqNameTest : AbstractSymbolTest() {
|
||||||
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
override fun KtAnalysisSession.collectSymbols(ktFile: KtFile, testServices: TestServices): SymbolsData {
|
||||||
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
val symbolData = SymbolByFqName.getSymbolDataFromFile(testDataPath)
|
||||||
return SymbolsData(with(symbolData) { toSymbols() })
|
return SymbolsData(with(symbolData) { toSymbols(ktFile) })
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun configureTest(builder: TestConfigurationBuilder) {
|
override fun configureTest(builder: TestConfigurationBuilder) {
|
||||||
|
|||||||
Reference in New Issue
Block a user