Kapt: Allow to strip @Metadata annotation from stubs (KT-36667)
This commit is contained in:
+1
@@ -389,6 +389,7 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To
|
||||
pluginOptions += SubpluginOption("dumpDefaultParameterValues", "${kaptExtension.dumpDefaultParameterValues}")
|
||||
pluginOptions += SubpluginOption("mapDiagnosticLocations", "${kaptExtension.mapDiagnosticLocations}")
|
||||
pluginOptions += SubpluginOption("strictMode", "${kaptExtension.strictMode}")
|
||||
pluginOptions += SubpluginOption("stripMetadata", "${kaptExtension.stripMetadata}")
|
||||
pluginOptions += SubpluginOption("showProcessorTimings", "${kaptExtension.showProcessorTimings}")
|
||||
pluginOptions += SubpluginOption("detectMemoryLeaks", kaptExtension.detectMemoryLeaks)
|
||||
pluginOptions += SubpluginOption("infoAsWarnings", "${project.isInfoAsWarnings()}")
|
||||
|
||||
+2
@@ -34,6 +34,8 @@ open class KaptExtension {
|
||||
open var mapDiagnosticLocations: Boolean = false
|
||||
|
||||
open var strictMode: Boolean = false
|
||||
|
||||
open var stripMetadata: Boolean = false
|
||||
|
||||
open var showProcessorTimings: Boolean = false
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ enum class KaptFlag(val description: String) {
|
||||
STRICT("Strict mode"),
|
||||
INCLUDE_COMPILE_CLASSPATH("Detect annotation processors in compile classpath"),
|
||||
INCREMENTAL_APT("Incremental annotation processing (apt mode)"),
|
||||
STRIP_METADATA("Strip @Metadata annotations from stubs")
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
@@ -188,6 +188,13 @@ enum class KaptCliOption(
|
||||
cliToolOption = CliToolOption("-Kapt-strict", FLAG)
|
||||
),
|
||||
|
||||
STRIP_METADATA_OPTION(
|
||||
"stripMetadata",
|
||||
"true | false",
|
||||
"Strip @Metadata annotations from stubs",
|
||||
cliToolOption = CliToolOption("-Kapt-strip-metadata", FLAG)
|
||||
),
|
||||
|
||||
DETECT_MEMORY_LEAKS_OPTION("detectMemoryLeaks", "true | false", "Detect memory leaks in annotation processors"),
|
||||
INCLUDE_COMPILE_CLASSPATH(
|
||||
"includeCompileClasspath",
|
||||
|
||||
@@ -116,6 +116,7 @@ class Kapt3CommandLineProcessor : CommandLineProcessor {
|
||||
MAP_DIAGNOSTIC_LOCATIONS_OPTION -> setFlag(KaptFlag.MAP_DIAGNOSTIC_LOCATIONS, value)
|
||||
INFO_AS_WARNINGS_OPTION -> setFlag(KaptFlag.INFO_AS_WARNINGS, value)
|
||||
STRICT_MODE_OPTION -> setFlag(KaptFlag.STRICT, value)
|
||||
STRIP_METADATA_OPTION -> setFlag(KaptFlag.STRIP_METADATA, value)
|
||||
SHOW_PROCESSOR_TIMINGS -> setFlag(KaptFlag.SHOW_PROCESSOR_TIMINGS, value)
|
||||
INCLUDE_COMPILE_CLASSPATH -> setFlag(KaptFlag.INCLUDE_COMPILE_CLASSPATH, value)
|
||||
|
||||
|
||||
+4
@@ -95,6 +95,8 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
|
||||
"kotlin.jvm." // Kotlin annotations from runtime
|
||||
)
|
||||
|
||||
private val KOTLIN_METADATA_ANNOTATION = Metadata::class.java.name
|
||||
|
||||
private val NON_EXISTENT_CLASS_NAME = FqName("error.NonExistentClass")
|
||||
|
||||
private val JAVA_KEYWORD_FILTER_REGEX = "[a-z]+".toRegex()
|
||||
@@ -107,6 +109,7 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
|
||||
|
||||
private val correctErrorTypes = kaptContext.options[KaptFlag.CORRECT_ERROR_TYPES]
|
||||
private val strictMode = kaptContext.options[KaptFlag.STRICT]
|
||||
private val stripMetadata = kaptContext.options[KaptFlag.STRIP_METADATA]
|
||||
|
||||
private val mutableBindings = mutableMapOf<String, KaptJavaFileObject>()
|
||||
|
||||
@@ -1063,6 +1066,7 @@ class ClassFileToSourceStubConverter(val kaptContext: KaptContextForStubGenerati
|
||||
|
||||
if (filtered) {
|
||||
if (BLACKLISTED_ANNOTATIONS.any { fqName.startsWith(it) }) return null
|
||||
if (stripMetadata && fqName == KOTLIN_METADATA_ANNOTATION) return null
|
||||
}
|
||||
|
||||
val ktAnnotation = (annotationDescriptor?.source as? PsiSourceElement)?.psi as? KtAnnotationEntry
|
||||
|
||||
+16
@@ -243,6 +243,22 @@ open class AbstractClassFileToSourceStubConverterTest : AbstractKotlinKapt3Test(
|
||||
fun testSuppressWarning() {}
|
||||
|
||||
override fun doTest(filePath: String) {
|
||||
val wholeFile = File(filePath)
|
||||
|
||||
kaptFlags.add(KaptFlag.MAP_DIAGNOSTIC_LOCATIONS)
|
||||
|
||||
if (wholeFile.isOptionSet("CORRECT_ERROR_TYPES")) {
|
||||
kaptFlags.add(KaptFlag.CORRECT_ERROR_TYPES)
|
||||
}
|
||||
|
||||
if (wholeFile.isOptionSet("STRICT_MODE")) {
|
||||
kaptFlags.add(KaptFlag.STRICT)
|
||||
}
|
||||
|
||||
if (wholeFile.isOptionSet("STRIP_METADATA")) {
|
||||
kaptFlags.add(KaptFlag.STRIP_METADATA)
|
||||
}
|
||||
|
||||
super.doTest(filePath)
|
||||
doTestWithJdk9(AbstractClassFileToSourceStubConverterTest::class.java, filePath)
|
||||
doTestWithJdk11(AbstractClassFileToSourceStubConverterTest::class.java, filePath)
|
||||
|
||||
+5
@@ -418,6 +418,11 @@ public class ClassFileToSourceStubConverterTestGenerated extends AbstractClassFi
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/strangeNames.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("stripMetadata.kt")
|
||||
public void testStripMetadata() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/stripMetadata.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("suspendErrorTypes.kt")
|
||||
public void testSuspendErrorTypes() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.kt");
|
||||
|
||||
+5
@@ -419,6 +419,11 @@ public class IrClassFileToSourceStubConverterTestGenerated extends AbstractIrCla
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/strangeNames.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("stripMetadata.kt")
|
||||
public void testStripMetadata() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/stripMetadata.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("suspendErrorTypes.kt")
|
||||
public void testSuspendErrorTypes() throws Exception {
|
||||
runTest("plugins/kapt3/kapt3-compiler/testData/converter/suspendErrorTypes.kt");
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// STRIP_METADATA
|
||||
|
||||
interface Context
|
||||
|
||||
enum class Result {
|
||||
SUCCESS, ERROR
|
||||
}
|
||||
|
||||
abstract class BaseClass(context: Context, num: Int, bool: Boolean) {
|
||||
abstract fun doJob(): Result
|
||||
}
|
||||
|
||||
class Inheritor(context: Context) : BaseClass(context, 5, true) {
|
||||
override fun doJob() = Result.SUCCESS
|
||||
}
|
||||
@@ -0,0 +1,52 @@
|
||||
import java.lang.System;
|
||||
|
||||
public abstract class BaseClass {
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public abstract Result doJob();
|
||||
|
||||
public BaseClass(@org.jetbrains.annotations.NotNull()
|
||||
Context context, int num, boolean bool) {
|
||||
super();
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
public abstract interface Context {
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
public final class Inheritor extends BaseClass {
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
@java.lang.Override()
|
||||
public Result doJob() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public Inheritor(@org.jetbrains.annotations.NotNull()
|
||||
Context context) {
|
||||
super(null, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////
|
||||
|
||||
|
||||
import java.lang.System;
|
||||
|
||||
public enum Result {
|
||||
/*public static final*/ SUCCESS /* = new Result() */,
|
||||
/*public static final*/ ERROR /* = new Result() */;
|
||||
|
||||
Result() {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user