Remove source annotations removing (not needed with KAPT3)
This commit is contained in:
-1
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.incremental
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.modules.TargetId
|
import org.jetbrains.kotlin.modules.TargetId
|
||||||
|
|||||||
-30
@@ -1,30 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2016 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.incremental
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
|
|
||||||
class SourceRetentionAnnotationHandlerImpl : SourceRetentionAnnotationHandler {
|
|
||||||
private val mutableSourceRetentionAnnotations = mutableSetOf<String>()
|
|
||||||
|
|
||||||
val sourceRetentionAnnotations: Set<String>
|
|
||||||
get() = mutableSourceRetentionAnnotations
|
|
||||||
|
|
||||||
override fun register(internalName: String) {
|
|
||||||
mutableSourceRetentionAnnotations += internalName
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -30,7 +30,6 @@ import org.jetbrains.kotlin.compilerRunner.OutputItemsCollectorImpl
|
|||||||
import org.jetbrains.kotlin.config.IncrementalCompilation
|
import org.jetbrains.kotlin.config.IncrementalCompilation
|
||||||
import org.jetbrains.kotlin.config.Services
|
import org.jetbrains.kotlin.config.Services
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents
|
||||||
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder
|
import org.jetbrains.kotlin.modules.KotlinModuleXmlBuilder
|
||||||
@@ -70,8 +69,7 @@ fun makeModuleFile(name: String, isTest: Boolean, outputDir: File, sourcesToComp
|
|||||||
fun makeCompileServices(
|
fun makeCompileServices(
|
||||||
incrementalCaches: Map<TargetId, IncrementalCache>,
|
incrementalCaches: Map<TargetId, IncrementalCache>,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
compilationCanceledStatus: CompilationCanceledStatus?,
|
compilationCanceledStatus: CompilationCanceledStatus?
|
||||||
sourceRetentionAnnotationHandler: SourceRetentionAnnotationHandler? = null
|
|
||||||
): Services =
|
): Services =
|
||||||
with(Services.Builder()) {
|
with(Services.Builder()) {
|
||||||
register(IncrementalCompilationComponents::class.java,
|
register(IncrementalCompilationComponents::class.java,
|
||||||
@@ -79,9 +77,6 @@ fun makeCompileServices(
|
|||||||
compilationCanceledStatus?.let {
|
compilationCanceledStatus?.let {
|
||||||
register(CompilationCanceledStatus::class.java, it)
|
register(CompilationCanceledStatus::class.java, it)
|
||||||
}
|
}
|
||||||
sourceRetentionAnnotationHandler?.let {
|
|
||||||
register(SourceRetentionAnnotationHandler::class.java, it)
|
|
||||||
}
|
|
||||||
build()
|
build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ public class ClassBuilderMode {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static ClassBuilderMode full(boolean generateSourceRetentionAnnotations) {
|
public static ClassBuilderMode full(boolean generateSourceRetentionAnnotations) {
|
||||||
return generateSourceRetentionAnnotations ? KAPT2 : FULL;
|
return generateSourceRetentionAnnotations ? KAPT : FULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,15 +47,6 @@ public class ClassBuilderMode {
|
|||||||
/* sourceRetention = */ false,
|
/* sourceRetention = */ false,
|
||||||
/* generateMultiFileFacadePartClasses = */ true);
|
/* generateMultiFileFacadePartClasses = */ true);
|
||||||
|
|
||||||
/**
|
|
||||||
* Full function bodies, write annotations with the "source" retention.
|
|
||||||
*/
|
|
||||||
private final static ClassBuilderMode KAPT2 = new ClassBuilderMode(
|
|
||||||
/* bodies = */ true,
|
|
||||||
/* metadata = */ true,
|
|
||||||
/* sourceRetention = */ true,
|
|
||||||
/* generateMultiFileFacadePartClasses = */ false);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generating light classes: Only function signatures
|
* Generating light classes: Only function signatures
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ import org.jetbrains.kotlin.compiler.plugin.CliOptionProcessingException
|
|||||||
import org.jetbrains.kotlin.compiler.plugin.PluginCliOptionProcessingException
|
import org.jetbrains.kotlin.compiler.plugin.PluginCliOptionProcessingException
|
||||||
import org.jetbrains.kotlin.compiler.plugin.cliPluginUsageString
|
import org.jetbrains.kotlin.compiler.plugin.cliPluginUsageString
|
||||||
import org.jetbrains.kotlin.config.*
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver
|
import org.jetbrains.kotlin.load.kotlin.DeserializedDescriptorResolver
|
||||||
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
|
import org.jetbrains.kotlin.load.kotlin.JvmMetadataVersion
|
||||||
@@ -267,10 +266,6 @@ class K2JVMCompiler : CLICompiler<K2JVMCompilerArguments>() {
|
|||||||
configuration.put(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS, components)
|
configuration.put(JVMConfigurationKeys.INCREMENTAL_COMPILATION_COMPONENTS, components)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
services.get(SourceRetentionAnnotationHandler::class.java)?.let { handler ->
|
|
||||||
configuration.put(JVMConfigurationKeys.SOURCE_RETENTION_ANNOTATION_HANDLER, handler)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
-1
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.modules.TargetId
|
|||||||
import org.jetbrains.kotlin.daemon.common.CompilerCallbackServicesFacade
|
import org.jetbrains.kotlin.daemon.common.CompilerCallbackServicesFacade
|
||||||
import org.jetbrains.kotlin.daemon.common.DummyProfiler
|
import org.jetbrains.kotlin.daemon.common.DummyProfiler
|
||||||
import org.jetbrains.kotlin.daemon.common.Profiler
|
import org.jetbrains.kotlin.daemon.common.Profiler
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
|
|
||||||
|
|
||||||
class RemoteIncrementalCompilationComponentsClient(val facade: CompilerCallbackServicesFacade, eventManger: EventManger, val profiler: Profiler = DummyProfiler()) : IncrementalCompilationComponents {
|
class RemoteIncrementalCompilationComponentsClient(val facade: CompilerCallbackServicesFacade, eventManger: EventManger, val profiler: Profiler = DummyProfiler()) : IncrementalCompilationComponents {
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.config;
|
package org.jetbrains.kotlin.config;
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
import org.jetbrains.kotlin.descriptors.impl.ModuleDescriptorImpl;
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler;
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCompilationComponents;
|
||||||
import org.jetbrains.kotlin.modules.Module;
|
import org.jetbrains.kotlin.modules.Module;
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
||||||
@@ -94,9 +93,6 @@ public class JVMConfigurationKeys {
|
|||||||
public static final CompilerConfigurationKey<File> MODULE_XML_FILE =
|
public static final CompilerConfigurationKey<File> MODULE_XML_FILE =
|
||||||
CompilerConfigurationKey.create("path to module.xml");
|
CompilerConfigurationKey.create("path to module.xml");
|
||||||
|
|
||||||
public static final CompilerConfigurationKey<SourceRetentionAnnotationHandler> SOURCE_RETENTION_ANNOTATION_HANDLER =
|
|
||||||
CompilerConfigurationKey.create("source retention annotation handler");
|
|
||||||
|
|
||||||
public static final CompilerConfigurationKey<String> DECLARATIONS_JSON_PATH =
|
public static final CompilerConfigurationKey<String> DECLARATIONS_JSON_PATH =
|
||||||
CompilerConfigurationKey.create("path to declarations output");
|
CompilerConfigurationKey.create("path to declarations output");
|
||||||
|
|
||||||
|
|||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2016 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.incremental.components
|
|
||||||
|
|
||||||
interface SourceRetentionAnnotationHandler {
|
|
||||||
fun register(internalName: String)
|
|
||||||
}
|
|
||||||
@@ -55,7 +55,6 @@ import org.jetbrains.kotlin.config.Services
|
|||||||
import org.jetbrains.kotlin.daemon.common.isDaemonEnabled
|
import org.jetbrains.kotlin.daemon.common.isDaemonEnabled
|
||||||
import org.jetbrains.kotlin.incremental.*
|
import org.jetbrains.kotlin.incremental.*
|
||||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
||||||
import org.jetbrains.kotlin.jps.incremental.*
|
import org.jetbrains.kotlin.jps.incremental.*
|
||||||
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache
|
||||||
@@ -206,8 +205,7 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
val project = projectDescriptor.project
|
val project = projectDescriptor.project
|
||||||
val lookupTracker = getLookupTracker(project)
|
val lookupTracker = getLookupTracker(project)
|
||||||
val incrementalCaches = getIncrementalCaches(chunk, context)
|
val incrementalCaches = getIncrementalCaches(chunk, context)
|
||||||
val sourceRetentionAnnotationHandler = SourceRetentionAnnotationHandlerImpl()
|
val environment = createCompileEnvironment(incrementalCaches, lookupTracker, context)
|
||||||
val environment = createCompileEnvironment(incrementalCaches, lookupTracker, sourceRetentionAnnotationHandler, context)
|
|
||||||
if (!environment.success()) {
|
if (!environment.success()) {
|
||||||
environment.reportErrorsTo(messageCollector)
|
environment.reportErrorsTo(messageCollector)
|
||||||
return ABORT
|
return ABORT
|
||||||
@@ -410,7 +408,6 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
private fun createCompileEnvironment(
|
private fun createCompileEnvironment(
|
||||||
incrementalCaches: Map<ModuleBuildTarget, IncrementalCache>,
|
incrementalCaches: Map<ModuleBuildTarget, IncrementalCache>,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
sourceRetentionAnnotationHandler: SourceRetentionAnnotationHandler?,
|
|
||||||
context: CompileContext
|
context: CompileContext
|
||||||
): JpsCompilerEnvironment {
|
): JpsCompilerEnvironment {
|
||||||
val compilerServices = with(Services.Builder()) {
|
val compilerServices = with(Services.Builder()) {
|
||||||
@@ -422,9 +419,6 @@ class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) {
|
|||||||
if (context.cancelStatus.isCanceled) throw CompilationCanceledException()
|
if (context.cancelStatus.isCanceled) throw CompilationCanceledException()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
sourceRetentionAnnotationHandler?.let {
|
|
||||||
register(SourceRetentionAnnotationHandler::class.java, it)
|
|
||||||
}
|
|
||||||
build()
|
build()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
-68
@@ -1,68 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2016 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.annotation
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import java.io.*
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
internal class SourceAnnotationsRegistry(private val file: File) : SourceRetentionAnnotationHandler {
|
|
||||||
private val mutableAnnotations: MutableSet<String> by lazy { readAnnotations() }
|
|
||||||
val annotations: Set<String>
|
|
||||||
get() = mutableAnnotations
|
|
||||||
|
|
||||||
override fun register(internalName: String) {
|
|
||||||
mutableAnnotations.add(internalName)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun clear() {
|
|
||||||
mutableAnnotations.clear()
|
|
||||||
file.delete()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun flush() {
|
|
||||||
if (mutableAnnotations.isEmpty()) {
|
|
||||||
file.delete()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!file.exists()) {
|
|
||||||
file.parentFile.mkdirs()
|
|
||||||
file.createNewFile()
|
|
||||||
}
|
|
||||||
|
|
||||||
ObjectOutputStream(BufferedOutputStream(file.outputStream())).use { out ->
|
|
||||||
out.writeInt(mutableAnnotations.size)
|
|
||||||
mutableAnnotations.forEach { out.writeUTF(it) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun readAnnotations(): MutableSet<String> {
|
|
||||||
val result = HashSet<String>()
|
|
||||||
|
|
||||||
if (!file.exists()) return result
|
|
||||||
|
|
||||||
ObjectInputStream(BufferedInputStream(file.inputStream())).use { input ->
|
|
||||||
val size = input.readInt()
|
|
||||||
repeat(size) {
|
|
||||||
result.add(input.readUTF())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-78
@@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2016 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.bytecode
|
|
||||||
|
|
||||||
import org.jetbrains.org.objectweb.asm.*
|
|
||||||
import java.io.File
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
internal class AnnotationsRemover(annotations: Iterable<String>) {
|
|
||||||
private val annotations = annotations.mapTo(HashSet()) { "L$it;" }
|
|
||||||
|
|
||||||
fun transformClassFile(inputFile: File, outputFile: File) {
|
|
||||||
assert(inputFile.extension.toLowerCase() == "class") { "Expected class file: $inputFile" }
|
|
||||||
val bytes = inputFile.readBytes()
|
|
||||||
val reader = ClassReader(bytes)
|
|
||||||
val classWriter = ClassWriter(0)
|
|
||||||
val visitor = ClassAnnotationRemover(classWriter)
|
|
||||||
reader.accept(visitor, 0)
|
|
||||||
outputFile.writeBytes(classWriter.toByteArray())
|
|
||||||
}
|
|
||||||
|
|
||||||
inner class ClassAnnotationRemover(classVisitor: ClassVisitor) : ClassVisitor(Opcodes.ASM5, classVisitor) {
|
|
||||||
override fun visitAnnotation(desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitAnnotation(desc, visible) }
|
|
||||||
|
|
||||||
override fun visitTypeAnnotation(typeRef: Int, typePath: TypePath?, desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitTypeAnnotation(typeRef, typePath, desc, visible) }
|
|
||||||
|
|
||||||
override fun visitMethod(access: Int, name: String?, desc: String?, signature: String?, exceptions: Array<out String>?): MethodVisitor {
|
|
||||||
val methodVisitor = super.visitMethod(access, name, desc, signature, exceptions)
|
|
||||||
return MethodAnnotationRemover(methodVisitor)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitField(access: Int, name: String?, desc: String?, signature: String?, value: Any?): FieldVisitor {
|
|
||||||
val fieldVisitor = super.visitField(access, name, desc, signature, value)
|
|
||||||
return FieldAnnotationRemover(fieldVisitor)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inner class MethodAnnotationRemover(methodVisitor: MethodVisitor) : MethodVisitor(Opcodes.ASM5, methodVisitor) {
|
|
||||||
override fun visitAnnotation(desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitAnnotation(desc, visible) }
|
|
||||||
|
|
||||||
override fun visitTypeAnnotation(typeRef: Int, typePath: TypePath?, desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitTypeAnnotation(typeRef, typePath, desc, visible) }
|
|
||||||
|
|
||||||
override fun visitParameterAnnotation(parameter: Int, desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitParameterAnnotation(parameter, desc, visible) }
|
|
||||||
}
|
|
||||||
|
|
||||||
inner class FieldAnnotationRemover(fieldVisitor: FieldVisitor) : FieldVisitor(Opcodes.ASM5, fieldVisitor) {
|
|
||||||
override fun visitAnnotation(desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitAnnotation(desc, visible) }
|
|
||||||
|
|
||||||
override fun visitTypeAnnotation(typeRef: Int, typePath: TypePath?, desc: String?, visible: Boolean): AnnotationVisitor? =
|
|
||||||
checkAnnotation(desc) { super.visitTypeAnnotation(typeRef, typePath, desc, visible) }
|
|
||||||
}
|
|
||||||
|
|
||||||
private inline fun checkAnnotation(desc: String?, default: () -> AnnotationVisitor?): AnnotationVisitor? {
|
|
||||||
if (desc in annotations) return null
|
|
||||||
|
|
||||||
return default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-1
@@ -62,7 +62,7 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val kotlinToKaptTasksMap = mutableMapOf<KotlinCompile, KaptTask>()
|
private val kotlinToKaptTasksMap = mutableMapOf<KotlinCompile, KaptTask>()
|
||||||
|
|
||||||
override fun isApplicable(project: Project, task: KotlinCompile) = Kapt3GradleSubplugin.isEnabled(project)
|
override fun isApplicable(project: Project, task: KotlinCompile) = Kapt3GradleSubplugin.isEnabled(project)
|
||||||
|
|
||||||
fun getKaptGeneratedDir(project: Project, sourceSetName: String): File {
|
fun getKaptGeneratedDir(project: Project, sourceSetName: String): File {
|
||||||
|
|||||||
+1
-14
@@ -23,7 +23,6 @@ import org.gradle.api.tasks.OutputFiles
|
|||||||
import org.gradle.api.tasks.TaskAction
|
import org.gradle.api.tasks.TaskAction
|
||||||
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
|
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
|
||||||
import org.gradle.api.tasks.incremental.InputFileDetails
|
import org.gradle.api.tasks.incremental.InputFileDetails
|
||||||
import org.jetbrains.kotlin.bytecode.AnnotationsRemover
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
import org.jetbrains.kotlin.gradle.plugin.kotlinDebug
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.ObjectInputStream
|
import java.io.ObjectInputStream
|
||||||
@@ -58,12 +57,6 @@ internal open class SyncOutputTask : DefaultTask() {
|
|||||||
var kotlinOutputDir: File by Delegates.notNull()
|
var kotlinOutputDir: File by Delegates.notNull()
|
||||||
var javaOutputDir: File by Delegates.notNull()
|
var javaOutputDir: File by Delegates.notNull()
|
||||||
var kotlinTask: KotlinCompile by Delegates.notNull()
|
var kotlinTask: KotlinCompile by Delegates.notNull()
|
||||||
private val sourceAnnotations: Set<String> by lazy {
|
|
||||||
kotlinTask.sourceAnnotationsRegistry?.annotations ?: emptySet()
|
|
||||||
}
|
|
||||||
private val annotationsRemover by lazy {
|
|
||||||
AnnotationsRemover(sourceAnnotations)
|
|
||||||
}
|
|
||||||
|
|
||||||
// OutputDirectory needed for task to be incremental
|
// OutputDirectory needed for task to be incremental
|
||||||
@get:OutputDirectory
|
@get:OutputDirectory
|
||||||
@@ -144,13 +137,7 @@ internal open class SyncOutputTask : DefaultTask() {
|
|||||||
if (!fileInKotlinDir.isFile) return
|
if (!fileInKotlinDir.isFile) return
|
||||||
|
|
||||||
fileInJavaDir.parentFile.mkdirs()
|
fileInJavaDir.parentFile.mkdirs()
|
||||||
if (sourceAnnotations.isNotEmpty() && fileInKotlinDir.extension.toLowerCase() == "class") {
|
fileInKotlinDir.copyTo(fileInJavaDir, overwrite = true)
|
||||||
logger.kotlinDebug { "Removing source annotations from class: $fileInKotlinDir" }
|
|
||||||
annotationsRemover.transformClassFile(fileInKotlinDir, fileInJavaDir)
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
fileInKotlinDir.copyTo(fileInJavaDir, overwrite = true)
|
|
||||||
}
|
|
||||||
|
|
||||||
timestamps[fileInJavaDir] = fileInJavaDir.lastModified()
|
timestamps[fileInJavaDir] = fileInJavaDir.lastModified()
|
||||||
|
|
||||||
|
|||||||
-4
@@ -27,7 +27,6 @@ import org.gradle.api.tasks.TaskAction
|
|||||||
import org.gradle.api.tasks.compile.AbstractCompile
|
import org.gradle.api.tasks.compile.AbstractCompile
|
||||||
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
|
import org.gradle.api.tasks.incremental.IncrementalTaskInputs
|
||||||
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
||||||
import org.jetbrains.kotlin.annotation.SourceAnnotationsRegistry
|
|
||||||
import org.jetbrains.kotlin.cli.common.CLICompiler
|
import org.jetbrains.kotlin.cli.common.CLICompiler
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
||||||
@@ -165,8 +164,6 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
|||||||
internal val pluginOptions = CompilerPluginOptions()
|
internal val pluginOptions = CompilerPluginOptions()
|
||||||
internal var artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null
|
internal var artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null
|
||||||
internal var artifactFile: File? = null
|
internal var artifactFile: File? = null
|
||||||
// created only if kapt2 is active
|
|
||||||
internal var sourceAnnotationsRegistry: SourceAnnotationsRegistry? = null
|
|
||||||
|
|
||||||
override fun findKotlinCompilerJar(project: Project): File? =
|
override fun findKotlinCompilerJar(project: Project): File? =
|
||||||
findKotlinJvmCompilerJar(project)
|
findKotlinJvmCompilerJar(project)
|
||||||
@@ -227,7 +224,6 @@ open class KotlinCompile : AbstractKotlinCompile<K2JVMCompilerArguments>(), Kotl
|
|||||||
cacheVersions,
|
cacheVersions,
|
||||||
reporter,
|
reporter,
|
||||||
kaptAnnotationsFileUpdater,
|
kaptAnnotationsFileUpdater,
|
||||||
sourceAnnotationsRegistry,
|
|
||||||
artifactDifferenceRegistryProvider,
|
artifactDifferenceRegistryProvider,
|
||||||
artifactFile
|
artifactFile
|
||||||
)
|
)
|
||||||
|
|||||||
+1
-5
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.incremental
|
package org.jetbrains.kotlin.incremental
|
||||||
|
|
||||||
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
import org.jetbrains.kotlin.annotation.AnnotationFileUpdater
|
||||||
import org.jetbrains.kotlin.annotation.SourceAnnotationsRegistry
|
|
||||||
import org.jetbrains.kotlin.build.GeneratedFile
|
import org.jetbrains.kotlin.build.GeneratedFile
|
||||||
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
import org.jetbrains.kotlin.build.GeneratedJvmClass
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
import org.jetbrains.kotlin.cli.common.ExitCode
|
||||||
@@ -97,7 +96,6 @@ internal class IncrementalJvmCompilerRunner(
|
|||||||
private val cacheVersions: List<CacheVersion>,
|
private val cacheVersions: List<CacheVersion>,
|
||||||
private val reporter: IncReporter,
|
private val reporter: IncReporter,
|
||||||
private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null,
|
private var kaptAnnotationsFileUpdater: AnnotationFileUpdater? = null,
|
||||||
private val sourceAnnotationsRegistry: SourceAnnotationsRegistry? = null,
|
|
||||||
private val artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null,
|
private val artifactDifferenceRegistryProvider: ArtifactDifferenceRegistryProvider? = null,
|
||||||
private val artifactFile: File? = null
|
private val artifactFile: File? = null
|
||||||
) {
|
) {
|
||||||
@@ -394,7 +392,6 @@ internal class IncrementalJvmCompilerRunner(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (exitCode == ExitCode.OK) {
|
if (exitCode == ExitCode.OK) {
|
||||||
sourceAnnotationsRegistry?.flush()
|
|
||||||
cacheVersions.forEach { it.saveIfNeeded() }
|
cacheVersions.forEach { it.saveIfNeeded() }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,7 +459,6 @@ internal class IncrementalJvmCompilerRunner(
|
|||||||
val outputItemCollector = OutputItemsCollectorImpl()
|
val outputItemCollector = OutputItemsCollectorImpl()
|
||||||
@Suppress("NAME_SHADOWING")
|
@Suppress("NAME_SHADOWING")
|
||||||
val messageCollector = MessageCollectorWrapper(messageCollector, outputItemCollector)
|
val messageCollector = MessageCollectorWrapper(messageCollector, outputItemCollector)
|
||||||
sourceAnnotationsRegistry?.clear()
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val incrementalCaches = makeIncrementalCachesMap(targets, { listOf<TargetId>() }, getIncrementalCache, { this })
|
val incrementalCaches = makeIncrementalCachesMap(targets, { listOf<TargetId>() }, getIncrementalCache, { this })
|
||||||
@@ -473,7 +469,7 @@ internal class IncrementalJvmCompilerRunner(
|
|||||||
|
|
||||||
reporter.report { "compiling with args: ${ArgumentUtils.convertArgumentsToStringList(args)}" }
|
reporter.report { "compiling with args: ${ArgumentUtils.convertArgumentsToStringList(args)}" }
|
||||||
reporter.report { "compiling with classpath: ${classpath.toList().sorted().joinToString()}" }
|
reporter.report { "compiling with classpath: ${classpath.toList().sorted().joinToString()}" }
|
||||||
val compileServices = makeCompileServices(incrementalCaches, lookupTracker, compilationCanceledStatus, sourceAnnotationsRegistry)
|
val compileServices = makeCompileServices(incrementalCaches, lookupTracker, compilationCanceledStatus)
|
||||||
val exitCode = compiler.exec(messageCollector, compileServices, args)
|
val exitCode = compiler.exec(messageCollector, compileServices, args)
|
||||||
val generatedFiles = outputItemCollector.generatedFiles(targets, targets.first(), {sourcesToCompile}, {outputDir})
|
val generatedFiles = outputItemCollector.generatedFiles(targets, targets.first(), {sourcesToCompile}, {outputDir})
|
||||||
reporter.reportCompileIteration(sourcesToCompile, exitCode)
|
reporter.reportCompileIteration(sourcesToCompile, exitCode)
|
||||||
|
|||||||
-108
@@ -1,108 +0,0 @@
|
|||||||
package org.jetbrains.kotlin.bytecode
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.cli.common.ExitCode
|
|
||||||
import org.jetbrains.kotlin.cli.jvm.K2JVMCompiler
|
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.util.io.FileUtil.createTempDirectory
|
|
||||||
import org.jetbrains.kotlin.gradle.util.checkBytecodeContains
|
|
||||||
import org.jetbrains.kotlin.gradle.util.checkBytecodeNotContains
|
|
||||||
import org.junit.After
|
|
||||||
import org.junit.Test
|
|
||||||
|
|
||||||
import org.junit.Assert.*
|
|
||||||
import org.junit.Before
|
|
||||||
import java.io.*
|
|
||||||
import kotlin.properties.Delegates
|
|
||||||
|
|
||||||
class AnnotationsRemoverTest {
|
|
||||||
private var workingDir: File by Delegates.notNull()
|
|
||||||
|
|
||||||
@Before
|
|
||||||
fun setUp() {
|
|
||||||
workingDir = createTempDirectory(AnnotationsRemoverTest::class.java.simpleName, null)
|
|
||||||
}
|
|
||||||
|
|
||||||
@After
|
|
||||||
fun tearDown() {
|
|
||||||
workingDir.deleteRecursively()
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun testRemoveAnnotations() {
|
|
||||||
// initial build
|
|
||||||
val sourceDir = File(workingDir, "src").apply { mkdirs() }
|
|
||||||
val annotationsKt = File(sourceDir, "annotations.kt").apply {
|
|
||||||
writeText("""
|
|
||||||
package foo
|
|
||||||
|
|
||||||
annotation class Ann1
|
|
||||||
annotation class Ann2
|
|
||||||
annotation class Ann3
|
|
||||||
annotation class Ann4
|
|
||||||
annotation class Ann5
|
|
||||||
annotation class NotRemovableAnn1
|
|
||||||
annotation class NotRemovableAnn2
|
|
||||||
annotation class NotRemovableAnn3
|
|
||||||
annotation class NotRemovableAnn4
|
|
||||||
annotation class NotRemovableAnn5
|
|
||||||
""".trimIndent())
|
|
||||||
}
|
|
||||||
File(sourceDir, "A.kt").apply {
|
|
||||||
writeText("""
|
|
||||||
import foo.*
|
|
||||||
|
|
||||||
@Ann1
|
|
||||||
@NotRemovableAnn1
|
|
||||||
class A {
|
|
||||||
@get:Ann2
|
|
||||||
@field:Ann3
|
|
||||||
@get:NotRemovableAnn2
|
|
||||||
@field:NotRemovableAnn3
|
|
||||||
val i = 10
|
|
||||||
|
|
||||||
@Ann4
|
|
||||||
@NotRemovableAnn4
|
|
||||||
fun m(@Ann5 @NotRemovableAnn5 x: Int) {}
|
|
||||||
}
|
|
||||||
""".trimIndent())
|
|
||||||
}
|
|
||||||
val annClassRegex = "annotation class (Ann\\d)".toRegex()
|
|
||||||
val annotationsToRemove = annClassRegex.findAll(annotationsKt.readText()).toList().map { "foo/${it.groupValues[1]}" }
|
|
||||||
assertEquals(5, annotationsToRemove.size)
|
|
||||||
|
|
||||||
val notRemovableAnnClassRegex = "annotation class (NotRemovableAnn\\d)".toRegex()
|
|
||||||
val notRemovableAnns = notRemovableAnnClassRegex.findAll(annotationsKt.readText()).toList().map { "foo/${it.groupValues[1]}" }
|
|
||||||
assertEquals(5, notRemovableAnns.size)
|
|
||||||
|
|
||||||
val outDir = File(workingDir, "out").apply { mkdirs() }
|
|
||||||
compileAll(sourceDir, outDir)
|
|
||||||
val aClass = File(outDir, "A.class")
|
|
||||||
assert(aClass.exists()) { "$aClass does not exist" }
|
|
||||||
checkBytecodeContains(aClass, annotationsToRemove)
|
|
||||||
|
|
||||||
// remove annotations
|
|
||||||
val transformedOut = File(workingDir, "transformed").apply { mkdirs() }
|
|
||||||
val aTransformedClass = File(transformedOut, "A.class")
|
|
||||||
val remover = AnnotationsRemover(annotationsToRemove)
|
|
||||||
remover.transformClassFile(aClass, aTransformedClass)
|
|
||||||
checkBytecodeNotContains(aTransformedClass, annotationsToRemove)
|
|
||||||
checkBytecodeContains(aTransformedClass, notRemovableAnns)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun compileAll(inputDir: File, outputDir: File) {
|
|
||||||
val ktFiles = inputDir.walk()
|
|
||||||
.filter { it.isFile && it.extension.toLowerCase() == "kt" }
|
|
||||||
.map { it.absolutePath }
|
|
||||||
.toList().toTypedArray()
|
|
||||||
|
|
||||||
val byteOut = ByteArrayOutputStream()
|
|
||||||
val exitCode = PrintStream(byteOut).use { err ->
|
|
||||||
K2JVMCompiler().exec(err, *ktFiles, "-d", outputDir.absolutePath, "-Xadd-compiler-builtins")
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exitCode != ExitCode.OK) {
|
|
||||||
System.err.print(byteOut.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
assertEquals(ExitCode.OK, exitCode)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+4
-8
@@ -34,7 +34,6 @@ import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
|||||||
import org.jetbrains.kotlin.config.APPEND_JAVA_SOURCE_ROOTS_HANDLER_KEY
|
import org.jetbrains.kotlin.config.APPEND_JAVA_SOURCE_ROOTS_HANDLER_KEY
|
||||||
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
import org.jetbrains.kotlin.descriptors.ModuleDescriptor
|
||||||
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
import org.jetbrains.kotlin.fileClasses.NoResolveFileClassesProvider
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
||||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
@@ -56,11 +55,10 @@ class ClasspathBasedAnnotationProcessingExtension(
|
|||||||
classesOutputDir: File,
|
classesOutputDir: File,
|
||||||
javaSourceRoots: List<File>,
|
javaSourceRoots: List<File>,
|
||||||
verboseOutput: Boolean,
|
verboseOutput: Boolean,
|
||||||
incrementalDataFile: File?,
|
incrementalDataFile: File?
|
||||||
sourceRetentionAnnotationHandler: SourceRetentionAnnotationHandler?
|
) : AbstractAnnotationProcessingExtension(generatedSourcesOutputDir,
|
||||||
) : AbstractAnnotationProcessingExtension(generatedSourcesOutputDir,
|
|
||||||
classesOutputDir, javaSourceRoots, verboseOutput,
|
classesOutputDir, javaSourceRoots, verboseOutput,
|
||||||
incrementalDataFile, sourceRetentionAnnotationHandler) {
|
incrementalDataFile) {
|
||||||
override fun loadAnnotationProcessors(): List<Processor> {
|
override fun loadAnnotationProcessors(): List<Processor> {
|
||||||
val classLoader = URLClassLoader(annotationProcessingClasspath.map { it.toURI().toURL() }.toTypedArray())
|
val classLoader = URLClassLoader(annotationProcessingClasspath.map { it.toURI().toURL() }.toTypedArray())
|
||||||
return ServiceLoader.load(Processor::class.java, classLoader).toList()
|
return ServiceLoader.load(Processor::class.java, classLoader).toList()
|
||||||
@@ -72,8 +70,7 @@ abstract class AbstractAnnotationProcessingExtension(
|
|||||||
val classesOutputDir: File,
|
val classesOutputDir: File,
|
||||||
val javaSourceRoots: List<File>,
|
val javaSourceRoots: List<File>,
|
||||||
val verboseOutput: Boolean,
|
val verboseOutput: Boolean,
|
||||||
val incrementalDataFile: File? = null,
|
val incrementalDataFile: File? = null
|
||||||
val sourceRetentionAnnotationHandler: SourceRetentionAnnotationHandler? = null
|
|
||||||
) : AnalysisHandlerExtension {
|
) : AnalysisHandlerExtension {
|
||||||
private companion object {
|
private companion object {
|
||||||
val LINE_SEPARATOR = System.getProperty("line.separator") ?: "\n"
|
val LINE_SEPARATOR = System.getProperty("line.separator") ?: "\n"
|
||||||
@@ -201,7 +198,6 @@ abstract class AbstractAnnotationProcessingExtension(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val firstRoundAnnotations = RoundAnnotations(
|
val firstRoundAnnotations = RoundAnnotations(
|
||||||
sourceRetentionAnnotationHandler,
|
|
||||||
bindingContext(),
|
bindingContext(),
|
||||||
createTypeMapper())
|
createTypeMapper())
|
||||||
|
|
||||||
|
|||||||
+2
-4
@@ -141,12 +141,10 @@ class AnnotationProcessingComponentRegistrar : ComponentRegistrar {
|
|||||||
|
|
||||||
// Annotations with the "SOURCE" retention will be written to class files
|
// Annotations with the "SOURCE" retention will be written to class files
|
||||||
project.putUserData(IS_KAPT2_ENABLED_KEY, true)
|
project.putUserData(IS_KAPT2_ENABLED_KEY, true)
|
||||||
|
|
||||||
val sourceRetentionAnnotationHandler = configuration[JVMConfigurationKeys.SOURCE_RETENTION_ANNOTATION_HANDLER]
|
|
||||||
|
|
||||||
val annotationProcessingExtension = ClasspathBasedAnnotationProcessingExtension(
|
val annotationProcessingExtension = ClasspathBasedAnnotationProcessingExtension(
|
||||||
classpath, apOptions, generatedOutputDirFile, classesOutputDir, javaRoots, verboseOutput,
|
classpath, apOptions, generatedOutputDirFile, classesOutputDir, javaRoots, verboseOutput,
|
||||||
incrementalDataFile, sourceRetentionAnnotationHandler)
|
incrementalDataFile)
|
||||||
|
|
||||||
project.registerService(JeElementRegistry::class.java, JeElementRegistry())
|
project.registerService(JeElementRegistry::class.java, JeElementRegistry())
|
||||||
|
|
||||||
|
|||||||
+1
-12
@@ -22,14 +22,12 @@ import org.jetbrains.kotlin.asJava.elements.KtLightAnnotation
|
|||||||
import org.jetbrains.kotlin.asJava.findFacadeClass
|
import org.jetbrains.kotlin.asJava.findFacadeClass
|
||||||
import org.jetbrains.kotlin.asJava.toLightClass
|
import org.jetbrains.kotlin.asJava.toLightClass
|
||||||
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
|
||||||
import org.jetbrains.kotlin.incremental.components.SourceRetentionAnnotationHandler
|
|
||||||
import org.jetbrains.kotlin.java.model.internal.getAnnotationsWithInherited
|
import org.jetbrains.kotlin.java.model.internal.getAnnotationsWithInherited
|
||||||
import org.jetbrains.kotlin.psi.KtClassOrObject
|
import org.jetbrains.kotlin.psi.KtClassOrObject
|
||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
|
|
||||||
internal class RoundAnnotations(
|
internal class RoundAnnotations(
|
||||||
val sourceRetentionAnnotationHandler: SourceRetentionAnnotationHandler?,
|
|
||||||
val bindingContext: BindingContext,
|
val bindingContext: BindingContext,
|
||||||
val typeMapper: KotlinTypeMapper
|
val typeMapper: KotlinTypeMapper
|
||||||
) {
|
) {
|
||||||
@@ -51,7 +49,7 @@ internal class RoundAnnotations(
|
|||||||
val analyzedClasses: Set<String>
|
val analyzedClasses: Set<String>
|
||||||
get() = mutableAnalyzedClasses
|
get() = mutableAnalyzedClasses
|
||||||
|
|
||||||
fun copy() = RoundAnnotations(sourceRetentionAnnotationHandler, bindingContext, typeMapper)
|
fun copy() = RoundAnnotations(bindingContext, typeMapper)
|
||||||
|
|
||||||
fun analyzeFiles(files: Collection<KtFile>) = files.forEach { analyzeFile(it) }
|
fun analyzeFiles(files: Collection<KtFile>) = files.forEach { analyzeFile(it) }
|
||||||
|
|
||||||
@@ -102,15 +100,6 @@ internal class RoundAnnotations(
|
|||||||
for (annotation in declaration.getAnnotationsWithInherited()) {
|
for (annotation in declaration.getAnnotationsWithInherited()) {
|
||||||
val fqName = annotation.qualifiedName ?: continue
|
val fqName = annotation.qualifiedName ?: continue
|
||||||
|
|
||||||
val ktLightAnnotation = annotation as? KtLightAnnotation
|
|
||||||
if (ktLightAnnotation != null && sourceRetentionAnnotationHandler != null && ktLightAnnotation.hasSourceRetention) {
|
|
||||||
val type = bindingContext[BindingContext.ANNOTATION, ktLightAnnotation.kotlinOrigin]?.type
|
|
||||||
if (type != null) {
|
|
||||||
val internalName = typeMapper.mapType(type).internalName
|
|
||||||
sourceRetentionAnnotationHandler.register(internalName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BLACKLISTED_ANNOTATATIONS.any { fqName.startsWith(it) }) continue
|
if (BLACKLISTED_ANNOTATATIONS.any { fqName.startsWith(it) }) continue
|
||||||
mutableAnnotationsMap.getOrPut(fqName, { mutableListOf() }).add(declaration)
|
mutableAnnotationsMap.getOrPut(fqName, { mutableListOf() }).add(declaration)
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -25,7 +25,6 @@ import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
|||||||
import org.jetbrains.kotlin.codegen.AbstractBytecodeTextTest
|
import org.jetbrains.kotlin.codegen.AbstractBytecodeTextTest
|
||||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
||||||
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
import org.jetbrains.kotlin.diagnostics.rendering.DefaultErrorMessages
|
||||||
import org.jetbrains.kotlin.incremental.SourceRetentionAnnotationHandlerImpl
|
|
||||||
import org.jetbrains.kotlin.java.model.elements.JeAnnotationMirror
|
import org.jetbrains.kotlin.java.model.elements.JeAnnotationMirror
|
||||||
import org.jetbrains.kotlin.java.model.elements.JeMethodExecutableElement
|
import org.jetbrains.kotlin.java.model.elements.JeMethodExecutableElement
|
||||||
import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
import org.jetbrains.kotlin.java.model.elements.JeTypeElement
|
||||||
@@ -47,7 +46,7 @@ import javax.lang.model.element.*
|
|||||||
class AnnotationProcessingExtensionForTests(
|
class AnnotationProcessingExtensionForTests(
|
||||||
val processors: List<Processor>
|
val processors: List<Processor>
|
||||||
) : AbstractAnnotationProcessingExtension(createTempDir(), createTempDir(), listOf(), true,
|
) : AbstractAnnotationProcessingExtension(createTempDir(), createTempDir(), listOf(), true,
|
||||||
createIncrementalDataFile(), SourceRetentionAnnotationHandlerImpl()) {
|
createIncrementalDataFile()) {
|
||||||
override fun loadAnnotationProcessors() = processors
|
override fun loadAnnotationProcessors() = processors
|
||||||
|
|
||||||
override val options: Map<String, String>
|
override val options: Map<String, String>
|
||||||
|
|||||||
-9
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.annotation.processing.test.processor
|
|||||||
import org.intellij.lang.annotations.Language
|
import org.intellij.lang.annotations.Language
|
||||||
import org.jetbrains.kotlin.annotation.processing.impl.DisposableRef
|
import org.jetbrains.kotlin.annotation.processing.impl.DisposableRef
|
||||||
import org.jetbrains.kotlin.annotation.processing.impl.KotlinProcessingEnvironment
|
import org.jetbrains.kotlin.annotation.processing.impl.KotlinProcessingEnvironment
|
||||||
import org.jetbrains.kotlin.incremental.SourceRetentionAnnotationHandlerImpl
|
|
||||||
import org.jetbrains.kotlin.java.model.elements.*
|
import org.jetbrains.kotlin.java.model.elements.*
|
||||||
import org.jetbrains.kotlin.java.model.types.JeDeclaredType
|
import org.jetbrains.kotlin.java.model.types.JeDeclaredType
|
||||||
import org.jetbrains.kotlin.java.model.types.JeMethodExecutableTypeMirror
|
import org.jetbrains.kotlin.java.model.types.JeMethodExecutableTypeMirror
|
||||||
@@ -255,14 +254,6 @@ class ProcessorTests : AbstractProcessorTest() {
|
|||||||
assertEquals(expectedText, text)
|
assertEquals(expectedText, text)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testSourceRetention() {
|
|
||||||
test("SourceRetention", "*") { set, roundEnv, env -> }
|
|
||||||
val ext = getKapt2Extension()
|
|
||||||
val annotationHandler = ext.sourceRetentionAnnotationHandler as SourceRetentionAnnotationHandlerImpl
|
|
||||||
val annotations = annotationHandler.sourceRetentionAnnotations.sorted()
|
|
||||||
assertEquals("Source1, Source2, Source3, Source4, Test5\$Source5", annotations.joinToString())
|
|
||||||
}
|
|
||||||
|
|
||||||
fun testKotlinAnnotationDefaultValueFromBinary() = test("DefaultValueFromBinary", "*") { set, roundEnv, env ->
|
fun testKotlinAnnotationDefaultValueFromBinary() = test("DefaultValueFromBinary", "*") { set, roundEnv, env ->
|
||||||
fun check(expectedValue: Boolean, className: String) {
|
fun check(expectedValue: Boolean, className: String) {
|
||||||
val clazz = env.findClass(className)
|
val clazz = env.findClass(className)
|
||||||
|
|||||||
Reference in New Issue
Block a user