[analysis api fe10] provide a dummy implementation for KtFe10SymbolContainingDeclarationProvider.getContainingModule
to satisfy some tests
This commit is contained in:
+51
@@ -5,10 +5,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.analysis.api.descriptors.components
|
||||
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import com.intellij.psi.search.ProjectScope
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtSymbolContainingDeclarationProvider
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.KtFe10AnalysisSession
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.components.base.Fe10KtAnalysisSessionComponent
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.KtFe10DescSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.getDescriptor
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.psiBased.base.KtFe10PsiSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.KtBackingFieldSymbol
|
||||
@@ -17,7 +21,20 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtSymbol
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithKind
|
||||
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibraryModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtLibrarySourceModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.getKtModule
|
||||
import org.jetbrains.kotlin.cfg.getElementParentDeclaration
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.load.kotlin.JvmPackagePartSource
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
import org.jetbrains.kotlin.resolve.PlatformDependentAnalyzerServices
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.platform
|
||||
import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatformAnalyzerServices
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
import java.nio.file.Path
|
||||
import java.nio.file.Paths
|
||||
|
||||
internal class KtFe10SymbolContainingDeclarationProvider(
|
||||
override val analysisSession: KtFe10AnalysisSession
|
||||
@@ -44,7 +61,41 @@ internal class KtFe10SymbolContainingDeclarationProvider(
|
||||
|
||||
return null
|
||||
}
|
||||
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
// TODO this is a dummy and incorrect implementation just to satisfy some tests
|
||||
override fun getContainingModule(symbol: KtSymbol): KtModule {
|
||||
return symbol.psi?.getKtModule(analysisSession.analysisContext.resolveSession.project)
|
||||
?: symbol.getDescriptor()?.getFakeContainingKtModule()
|
||||
?: TODO(symbol.toString())
|
||||
}
|
||||
|
||||
private fun DeclarationDescriptor.getFakeContainingKtModule(): KtModule {
|
||||
return when (this) {
|
||||
is DescriptorWithContainerSource -> {
|
||||
val libraryPath = Paths.get((containerSource as JvmPackagePartSource).knownJvmBinaryClass?.containingLibrary!!)
|
||||
object : KtLibraryModule {
|
||||
override val libraryName: String = libraryPath.fileName.toString().substringBeforeLast(".")
|
||||
override val librarySources: KtLibrarySourceModule? = null
|
||||
override fun getBinaryRoots(): Collection<Path> = listOf(libraryPath)
|
||||
override val directRegularDependencies: List<KtModule> = emptyList()
|
||||
override val directRefinementDependencies: List<KtModule> = emptyList()
|
||||
override val directFriendDependencies: List<KtModule> = emptyList()
|
||||
override val contentScope: GlobalSearchScope = ProjectScope.getLibrariesScope(project)
|
||||
override val platform: TargetPlatform
|
||||
get() = this@getFakeContainingKtModule.platform!!
|
||||
override val analyzerServices: PlatformDependentAnalyzerServices
|
||||
get() = JvmPlatformAnalyzerServices
|
||||
override val project: Project
|
||||
get() = analysisSession.analysisContext.resolveSession.project
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
else -> TODO(this.toString())
|
||||
}
|
||||
}
|
||||
}
|
||||
+11
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.ba
|
||||
import org.jetbrains.kotlin.analysis.api.*
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.*
|
||||
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
|
||||
import org.jetbrains.kotlin.analysis.api.calls.symbol
|
||||
import org.jetbrains.kotlin.analysis.api.components.KtDeclarationRendererOptions
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.*
|
||||
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolKind
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.unexpectedElementError
|
||||
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
|
||||
import org.jetbrains.kotlin.builtins.functions.FunctionClassDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
@@ -109,6 +111,15 @@ internal fun ClassDescriptor.toKtClassSymbol(analysisContext: Fe10AnalysisContex
|
||||
}
|
||||
}
|
||||
|
||||
internal fun KtSymbol.getDescriptor(): DeclarationDescriptor? {
|
||||
return when (this) {
|
||||
is KtFe10PsiSymbol<*, *> -> descriptor
|
||||
is KtFe10DescSymbol<*> -> descriptor
|
||||
else -> unexpectedElementError("KtSymbol", this)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
internal fun ConstructorDescriptor.toKtConstructorSymbol(analysisContext: Fe10AnalysisContext): KtConstructorSymbol {
|
||||
if (this is TypeAliasConstructorDescriptor) {
|
||||
return this.underlyingConstructorDescriptor.toKtConstructorSymbol(analysisContext)
|
||||
|
||||
+8
-1
@@ -10,6 +10,8 @@ import com.intellij.openapi.project.Project
|
||||
import com.intellij.psi.PsiFile
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.configurators.AnalysisApiBaseTestServiceRegistrar
|
||||
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtModuleProjectStructure
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.KtMainModuleFactoryForSourceModules
|
||||
import org.jetbrains.kotlin.analysis.test.framework.project.structure.TestModuleStructureFactory
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestConfigurator
|
||||
import org.jetbrains.kotlin.analysis.test.framework.test.configurators.AnalysisApiTestServiceRegistrar
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
@@ -42,7 +44,12 @@ object AnalysisApiFe10TestConfigurator : AnalysisApiTestConfigurator() {
|
||||
testServices: TestServices,
|
||||
project: Project,
|
||||
): KtModuleProjectStructure {
|
||||
return moduleStructure.toKtSourceModules(testServices, project)
|
||||
return TestModuleStructureFactory.createProjectStructureByTestStructure(
|
||||
moduleStructure,
|
||||
testServices,
|
||||
project,
|
||||
KtMainModuleFactoryForSourceModules,
|
||||
)
|
||||
}
|
||||
|
||||
override fun prepareFilesInModule(files: List<PsiFile>, module: TestModule, testServices: TestServices) {
|
||||
|
||||
Reference in New Issue
Block a user