Allow to avoid declaration body resolution for function and property initializers if the return type is explicitly specified. This significantly reduces the analysis time in kapt3.
This commit is contained in:
+2
-2
@@ -26,7 +26,7 @@ import org.jetbrains.kotlin.compiler.plugin.CommandLineProcessor
|
||||
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.CompilerConfigurationKey
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import java.io.File
|
||||
|
||||
object AnnotationCollectorConfigurationKeys {
|
||||
@@ -91,7 +91,7 @@ class AnnotationCollectorComponentRegistrar : ComponentRegistrar {
|
||||
val stubs = configuration.get(AnnotationCollectorConfigurationKeys.STUBS_PATH)
|
||||
val messageCollector = configuration.get(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY, MessageCollector.NONE)
|
||||
if (stubs != null) {
|
||||
AnalysisCompletedHandlerExtension.registerExtension(project, StubProducerExtension(File(stubs), messageCollector))
|
||||
AnalysisHandlerExtension.registerExtension(project, StubProducerExtension(File(stubs), messageCollector))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -28,11 +28,11 @@ import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.org.objectweb.asm.ClassWriter
|
||||
import java.io.File
|
||||
|
||||
class StubProducerExtension(val stubsOutputDir: File, val messageCollector: MessageCollector) : AnalysisCompletedHandlerExtension {
|
||||
class StubProducerExtension(val stubsOutputDir: File, val messageCollector: MessageCollector) : AnalysisHandlerExtension {
|
||||
override fun analysisCompleted(
|
||||
project: Project,
|
||||
module: ModuleDescriptor,
|
||||
|
||||
+2
-2
@@ -39,7 +39,7 @@ import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.io.PrintWriter
|
||||
@@ -74,7 +74,7 @@ abstract class AbstractAnnotationProcessingExtension(
|
||||
val verboseOutput: Boolean,
|
||||
val incrementalDataFile: File? = null,
|
||||
val sourceRetentionAnnotationHandler: SourceRetentionAnnotationHandler? = null
|
||||
) : AnalysisCompletedHandlerExtension {
|
||||
) : AnalysisHandlerExtension {
|
||||
private companion object {
|
||||
val LINE_SEPARATOR = System.getProperty("line.separator") ?: "\n"
|
||||
}
|
||||
|
||||
+2
-2
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.config.CompilerConfigurationKey
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||
import org.jetbrains.kotlin.java.model.internal.JeElementRegistry
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import java.io.File
|
||||
|
||||
import org.jetbrains.kotlin.annotation.processing.AnnotationProcessingConfigurationKeys.ANNOTATION_PROCESSOR_CLASSPATH
|
||||
@@ -150,6 +150,6 @@ class AnnotationProcessingComponentRegistrar : ComponentRegistrar {
|
||||
|
||||
project.registerService(JeElementRegistry::class.java, JeElementRegistry())
|
||||
|
||||
AnalysisCompletedHandlerExtension.registerExtension(project, annotationProcessingExtension)
|
||||
AnalysisHandlerExtension.registerExtension(project, annotationProcessingExtension)
|
||||
}
|
||||
}
|
||||
@@ -32,7 +32,8 @@ import org.jetbrains.kotlin.kapt3.util.KaptLogger
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.PartialAnalysisHandlerExtension
|
||||
import java.io.File
|
||||
import java.net.URLClassLoader
|
||||
import java.util.*
|
||||
@@ -49,7 +50,7 @@ class Kapt3Extension(
|
||||
val aptOnly: Boolean,
|
||||
val pluginInitializedTime: Long,
|
||||
val logger: KaptLogger
|
||||
) : AnalysisCompletedHandlerExtension {
|
||||
) : PartialAnalysisHandlerExtension() {
|
||||
private var annotationProcessingComplete = false
|
||||
|
||||
private fun setAnnotationProcessingComplete(): Boolean {
|
||||
|
||||
@@ -32,7 +32,7 @@ import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||
import org.jetbrains.kotlin.kapt3.diagnostic.DefaultErrorMessagesKapt3
|
||||
import org.jetbrains.kotlin.kapt3.util.KaptLogger
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import java.io.File
|
||||
|
||||
object Kapt3ConfigurationKeys {
|
||||
@@ -155,6 +155,6 @@ class Kapt3ComponentRegistrar : ComponentRegistrar {
|
||||
val kapt3AnalysisCompletedHandlerExtension = Kapt3Extension(
|
||||
classpath, javaSourceRoots, sourcesOutputDir, classFilesOutputDir, stubsOutputDir, apOptions,
|
||||
isAptOnly, System.currentTimeMillis(), logger)
|
||||
AnalysisCompletedHandlerExtension.registerExtension(project, kapt3AnalysisCompletedHandlerExtension)
|
||||
AnalysisHandlerExtension.registerExtension(project, kapt3AnalysisCompletedHandlerExtension)
|
||||
}
|
||||
}
|
||||
@@ -19,12 +19,15 @@ package org.jetbrains.kotlin.kapt3.test
|
||||
import com.intellij.openapi.util.text.StringUtil
|
||||
import com.sun.tools.javac.comp.CompileStates
|
||||
import com.sun.tools.javac.tree.JCTree.JCCompilationUnit
|
||||
import com.sun.tools.javac.util.Log
|
||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||
import org.jetbrains.kotlin.kapt3.*
|
||||
import org.jetbrains.kotlin.kapt3.stubs.ClassFileToSourceStubConverter
|
||||
import org.jetbrains.kotlin.kapt3.util.KaptLogger
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.PartialAnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.util.trimTrailingWhitespacesAndAddNewlineAtEOF
|
||||
@@ -41,6 +44,10 @@ abstract class AbstractKotlinKapt3Test : CodegenTestCase() {
|
||||
val javaSources = javaFilesDir?.let { arrayOf(it) } ?: emptyArray()
|
||||
|
||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL, *javaSources)
|
||||
|
||||
// Use light analysis mode in tests
|
||||
AnalysisHandlerExtension.registerExtension(myEnvironment.project, PartialAnalysisHandlerExtension())
|
||||
|
||||
loadMultiFiles(files)
|
||||
|
||||
val txtFile = File(wholeFile.parentFile, wholeFile.nameWithoutExtension + ".txt")
|
||||
@@ -77,6 +84,7 @@ abstract class AbstractClassFileToSourceStubConverterTest : AbstractKotlinKapt3T
|
||||
val actual = StringUtil.convertLineSeparators(actualRaw.trim({ it <= ' ' })).trimTrailingWhitespacesAndAddNewlineAtEOF()
|
||||
|
||||
if (kaptRunner.compiler.shouldStop(CompileStates.CompileState.ENTER)) {
|
||||
Log.instance(kaptRunner.context).flush()
|
||||
error("There were errors during analysis. See errors above. Stubs:\n\n$actual")
|
||||
}
|
||||
KotlinTestUtils.assertEqualsToFile(txtFile, actual)
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.codegen.CodegenTestFiles
|
||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.KotlinTestWithEnvironment
|
||||
@@ -63,7 +63,7 @@ abstract class AbstractAnnotationProcessorBoxTest : KotlinTestWithEnvironment()
|
||||
if (supportStubs) {
|
||||
val stubsDir = KotlinTestUtils.tmpDir("class-stubs")
|
||||
val stubProducerExtension = StubProducerExtension(stubsDir, MessageCollector.NONE)
|
||||
AnalysisCompletedHandlerExtension.registerExtension(project, stubProducerExtension)
|
||||
AnalysisHandlerExtension.registerExtension(project, stubProducerExtension)
|
||||
}
|
||||
|
||||
val testFiles = ktFiles.map { KotlinTestUtils.createFile(it.name, KotlinTestUtils.doLoadFile(it), environment.project) }
|
||||
|
||||
+2
-2
@@ -31,7 +31,7 @@ import org.jetbrains.kotlin.java.model.elements.JeMethodExecutableElement
|
||||
import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
||||
import org.jetbrains.kotlin.java.model.elements.JeVariableElement
|
||||
import org.jetbrains.kotlin.java.model.internal.JeElementRegistry
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
@@ -73,7 +73,7 @@ abstract class AbstractProcessorTest : AbstractBytecodeTextTest() {
|
||||
val project = environment.project
|
||||
|
||||
val apExtension = AnnotationProcessingExtensionForTests(processors)
|
||||
AnalysisCompletedHandlerExtension.registerExtension(project, apExtension)
|
||||
AnalysisHandlerExtension.registerExtension(project, apExtension)
|
||||
|
||||
project.registerServiceInstance(JeElementRegistry::class.java, JeElementRegistry())
|
||||
|
||||
|
||||
+2
-2
@@ -23,7 +23,7 @@ import org.jetbrains.kotlin.incremental.SourceRetentionAnnotationHandlerImpl
|
||||
import org.jetbrains.kotlin.java.model.elements.*
|
||||
import org.jetbrains.kotlin.java.model.types.JeDeclaredType
|
||||
import org.jetbrains.kotlin.java.model.types.JeMethodExecutableTypeMirror
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
|
||||
import javax.annotation.processing.ProcessingEnvironment
|
||||
import javax.lang.model.element.AnnotationMirror
|
||||
@@ -243,7 +243,7 @@ class ProcessorTests : AbstractProcessorTest() {
|
||||
"KotlinAnnotations",
|
||||
"i AnnoAnnotated")
|
||||
|
||||
private fun getKapt2Extension() = AnalysisCompletedHandlerExtension.getInstances(myEnvironment.project)
|
||||
private fun getKapt2Extension() = AnalysisHandlerExtension.getInstances(myEnvironment.project)
|
||||
.firstIsInstance<AnnotationProcessingExtensionForTests>()
|
||||
|
||||
private fun incrementalDataTest(fileName: String, @Language("TEXT") expectedText: String) {
|
||||
|
||||
+5
-5
@@ -12,13 +12,13 @@ import org.jetbrains.kotlin.psi.KtElement
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
|
||||
import org.jetbrains.uast.kotlin.KotlinUastBindingContextProviderService
|
||||
|
||||
class CliKotlinUastBindingContextProviderService : KotlinUastBindingContextProviderService {
|
||||
val Project.analysisCompletedHandler: UastAnalysisCompletedHandlerExtension?
|
||||
get() = getExtensions(AnalysisCompletedHandlerExtension.extensionPointName)
|
||||
.filterIsInstance<UastAnalysisCompletedHandlerExtension>()
|
||||
val Project.analysisCompletedHandler: UastAnalysisHandlerExtension?
|
||||
get() = getExtensions(AnalysisHandlerExtension.extensionPointName)
|
||||
.filterIsInstance<UastAnalysisHandlerExtension>()
|
||||
.firstOrNull()
|
||||
|
||||
override fun getBindingContext(element: KtElement): BindingContext {
|
||||
@@ -30,7 +30,7 @@ class CliKotlinUastBindingContextProviderService : KotlinUastBindingContextProvi
|
||||
}
|
||||
}
|
||||
|
||||
class UastAnalysisCompletedHandlerExtension : AnalysisCompletedHandlerExtension {
|
||||
class UastAnalysisHandlerExtension : AnalysisHandlerExtension {
|
||||
private var context: BindingContext? = null
|
||||
private var typeMapper: KotlinTypeMapper? = null
|
||||
|
||||
|
||||
Reference in New Issue
Block a user