Stub generation infrastructure (except for metadata generation) for KAPT+K2

This commit includes the basic Java stubs generation infrastructure and
the corresponding tests. The main entry point is called
Kapt4StubGenerator. Calls to it from production code will be added in a
separate commit.

 #KT-51982
This commit is contained in:
Pavel Mikhailovskii
2023-07-20 21:58:23 +02:00
committed by Space Team
parent ae4fab8483
commit 2002542ad2
113 changed files with 8249 additions and 34 deletions
@@ -9,13 +9,16 @@ import com.intellij.core.CoreApplicationEnvironment
import com.intellij.mock.MockProject
import com.intellij.openapi.application.Application
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.project.structure.KtModule
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreProjectEnvironment
import org.jetbrains.kotlin.load.kotlin.PackagePartProvider
public class StandaloneAnalysisAPISession internal constructor(
kotlinCoreProjectEnvironment: KotlinCoreProjectEnvironment,
public val createPackagePartProvider: (GlobalSearchScope) -> PackagePartProvider,
modulesWithFilesProvider: () -> Map<KtModule, List<PsiFile>>
) {
// TODO: better to limit exposure? Current usages are: addExtension, jarFileSystem
public val coreApplicationEnvironment: CoreApplicationEnvironment = kotlinCoreProjectEnvironment.environment
@@ -29,4 +32,6 @@ public class StandaloneAnalysisAPISession internal constructor(
ReplaceWith("project")
)
public val mockProject: MockProject = kotlinCoreProjectEnvironment.project
public val modulesWithFiles: Map<KtModule, List<PsiFile>> by lazy(modulesWithFilesProvider)
}
@@ -11,12 +11,14 @@ import com.intellij.openapi.application.Application
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem
import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope
import org.jetbrains.kotlin.analysis.api.KtAnalysisApiInternals
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.FirStandaloneServiceRegistrar
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.KtStaticProjectStructureProvider
import org.jetbrains.kotlin.analysis.api.standalone.base.project.structure.StandaloneProjectFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.services.FirSealedClassInheritorsProcessorFactory
import org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure.JvmFirDeserializedSymbolProviderFactory
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProvider
import org.jetbrains.kotlin.analysis.project.structure.KtModuleScopeProviderImpl
import org.jetbrains.kotlin.analysis.project.structure.builder.KtModuleProviderBuilder
@@ -150,6 +152,8 @@ public class StandaloneAnalysisAPISessionBuilder(
PackagePartProviderFactory::class.java,
KotlinStaticPackagePartProviderFactory(packagePartProvider)
)
registerService(JvmFirDeserializedSymbolProviderFactory::class.java, JvmFirDeserializedSymbolProviderFactory::class.java)
}
}
@@ -208,7 +212,12 @@ public class StandaloneAnalysisAPISessionBuilder(
return StandaloneAnalysisAPISession(
kotlinCoreProjectEnvironment,
createPackagePartProvider,
)
) {
projectStructureProvider.allSourceFiles
.asSequence()
.filterIsInstance<PsiFile>()
.groupBy { projectStructureProvider.getModule(it.originalElement, null) }
}
}
}