Kapt: Move line metadata to .kaptMetadata external files (KT-22386)

Placing location table inside .java file triggers annotation processor to run on each line table modification (even when the stub declarations themselves are the same). So we move it to the separate file.
This commit is contained in:
Yan Zhulanow
2018-01-15 15:31:17 +09:00
parent bf9eed931b
commit b0e97de8a8
64 changed files with 144 additions and 561 deletions
@@ -160,7 +160,9 @@ abstract class KaptIncrementalBaseIT(val shouldUseStubs: Boolean, val useKapt3:
assertFileExists("$kapt3IncDataPath/bar/B.class")
assertFileExists("$kapt3IncDataPath/bar/UseBKt.class")
assertFileExists("$kapt3StubsPath/bar/B.java")
assertFileExists("$kapt3StubsPath/bar/B.kapt_metadata")
assertFileExists("$kapt3StubsPath/bar/UseBKt.java")
assertFileExists("$kapt3StubsPath/bar/UseBKt.kapt_metadata")
}
}
@@ -176,7 +178,9 @@ abstract class KaptIncrementalBaseIT(val shouldUseStubs: Boolean, val useKapt3:
assertNoSuchFile("$kapt3IncDataPath/bar/B.class")
assertNoSuchFile("$kapt3IncDataPath/bar/UseBKt.class")
assertNoSuchFile("$kapt3StubsPath/bar/B.java")
assertNoSuchFile("$kapt3StubsPath/bar/B.kaptMetadata")
assertNoSuchFile("$kapt3StubsPath/bar/UseBKt.java")
assertNoSuchFile("$kapt3StubsPath/bar/UseBKt.kaptMetadata")
}
}
@@ -40,6 +40,8 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.kapt3.AptMode.*
import org.jetbrains.kotlin.kapt3.diagnostic.KaptError
import org.jetbrains.kotlin.kapt3.stubs.ClassFileToSourceStubConverter
import org.jetbrains.kotlin.kapt3.stubs.ClassFileToSourceStubConverter.KaptStub
import org.jetbrains.kotlin.kapt3.stubs.KaptLineMappingCollector.Companion.KAPT_METADATA_EXTENSION
import org.jetbrains.kotlin.kapt3.util.KaptLogger
import org.jetbrains.kotlin.kapt3.util.getPackageNameJava9Aware
import org.jetbrains.kotlin.modules.TargetId
@@ -263,14 +265,14 @@ abstract class AbstractKapt3Extension(
private fun generateKotlinSourceStubs(kaptContext: KaptContext<GenerationState>) {
val converter = ClassFileToSourceStubConverter(kaptContext, generateNonExistentClass = true, correctErrorTypes = correctErrorTypes)
val (stubGenerationTime, kotlinSourceStubs) = measureTimeMillis {
val (stubGenerationTime, kaptStubs) = measureTimeMillis {
converter.convert()
}
logger.info { "Java stub generation took $stubGenerationTime ms" }
logger.info { "Stubs for Kotlin classes: " + kotlinSourceStubs.joinToString { it.sourcefile.name } }
logger.info { "Stubs for Kotlin classes: " + kaptStubs.joinToString { it.file.sourcefile.name } }
saveStubs(kaptContext, kotlinSourceStubs)
saveStubs(kaptContext, kaptStubs)
saveIncrementalData(kaptContext, logger.messageCollector, converter)
}
@@ -283,14 +285,19 @@ abstract class AbstractKapt3Extension(
return javaFilesFromJavaSourceRoots
}
protected open fun saveStubs(kaptContext: KaptContext<*>, stubs: JavacList<JCTree.JCCompilationUnit>) {
for (stub in stubs) {
protected open fun saveStubs(kaptContext: KaptContext<*>, stubs: List<KaptStub>) {
for (kaptStub in stubs) {
val stub = kaptStub.file
val className = (stub.defs.first { it is JCTree.JCClassDecl } as JCTree.JCClassDecl).simpleName.toString()
val packageName = stub.getPackageNameJava9Aware()?.toString() ?: ""
val packageDir = if (packageName.isEmpty()) stubsOutputDir else File(stubsOutputDir, packageName.replace('.', '/'))
packageDir.mkdirs()
File(packageDir, className + ".java").writeText(stub.prettyPrint(kaptContext.context))
val sourceFile = File(packageDir, className + ".java")
sourceFile.writeText(stub.prettyPrint(kaptContext.context))
kaptStub.writeMetadataIfNeeded(forSource = sourceFile)
}
}
@@ -307,8 +314,12 @@ abstract class AbstractKapt3Extension(
val stubFileObject = converter.bindings[file.relativePath.substringBeforeLast(".class", missingDelimiterValue = "")]
if (stubFileObject != null) {
val stubFile = File(stubsOutputDir, stubFileObject.name)
if (stubFile.exists()) {
messageCollector.report(OUTPUT, OutputMessageUtil.formatOutputMessage(sources, stubFile))
val lineMappingsFile = File(stubFile.parentFile, stubFile.nameWithoutExtension + KAPT_METADATA_EXTENSION)
for (file in listOf(stubFile, lineMappingsFile)) {
if (file.exists()) {
messageCollector.report(OUTPUT, OutputMessageUtil.formatOutputMessage(sources, file))
}
}
}
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.kapt3.javac
import com.sun.tools.javac.tree.JCTree
import org.jetbrains.kotlin.kapt3.util.getPackageNameJava9Aware
import java.io.File
import java.net.URI
import java.net.URL
import javax.lang.model.element.Modifier
@@ -27,6 +28,7 @@ import javax.tools.JavaFileObject
class KaptJavaFileObject(
val compilationUnit: JCTree.JCCompilationUnit,
val clazz: JCTree.JCClassDecl,
val file: File? = null,
val timestamp: Long = System.currentTimeMillis()
) : JavaFileObject {
override fun toString() = "${javaClass.simpleName}[$name]"
@@ -60,7 +62,7 @@ class KaptJavaFileObject(
override fun getNestingKind() = NestingKind.TOP_LEVEL
override fun toUri(): URI? = URL(name).toURI()
override fun toUri(): URI? = file?.toURI()
override fun openReader(ignoreEncodingErrors: Boolean) = getCharContent(ignoreEncodingErrors).reader()
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.tree.*
import java.io.File
import javax.lang.model.element.ElementKind
import com.sun.tools.javac.util.List as JavacList
@@ -102,14 +103,14 @@ class ClassFileToSourceStubConverter(
private var done = false
fun convert(): JavacList<JCCompilationUnit> {
fun convert(): List<KaptStub> {
if (done) error(ClassFileToSourceStubConverter::class.java.simpleName + " can convert classes only once")
done = true
var stubs = mapJList(kaptContext.compiledClasses) { convertTopLevelClass(it) }
val stubs = kaptContext.compiledClasses.mapNotNullTo(mutableListOf()) { convertTopLevelClass(it) }
if (generateNonExistentClass) {
stubs = stubs.append(generateNonExistentClass())
stubs += KaptStub(generateNonExistentClass())
}
return stubs
@@ -132,7 +133,22 @@ class ClassFileToSourceStubConverter(
return topLevel
}
private fun convertTopLevelClass(clazz: ClassNode): JCCompilationUnit? {
class KaptStub(val file: JCCompilationUnit, val kaptMetadata: ByteArray? = null) {
fun writeMetadataIfNeeded(forSource: File) {
if (kaptMetadata == null) {
return
}
val metadataFile = File(
forSource.parentFile,
forSource.nameWithoutExtension + KaptLineMappingCollector.KAPT_METADATA_EXTENSION
)
metadataFile.writeBytes(kaptMetadata)
}
}
private fun convertTopLevelClass(clazz: ClassNode): KaptStub? {
val origin = kaptContext.origins[clazz] ?: return null
val ktFile = origin.element?.containingFile as? KtFile ?: return null
val descriptor = origin.descriptor ?: return null
@@ -166,9 +182,7 @@ class ClassFileToSourceStubConverter(
_bindings[clazz.name] = this
}
kdocCommentKeeper.saveComment(topLevel, lineMappings.getClassMetadataCommentText())
return topLevel
return KaptStub(topLevel, lineMappings.serialize())
}
private fun convertImports(file: KtFile, classDeclaration: JCClassDecl): JavacList<JCTree> {
@@ -18,11 +18,9 @@ package org.jetbrains.kotlin.kapt3.stubs
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile
import com.sun.tools.javac.parser.Tokens
import com.sun.tools.javac.tree.JCTree
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.kapt3.KaptContext
import org.jetbrains.kotlin.kapt3.util.isJava9OrLater
import org.jetbrains.org.objectweb.asm.tree.ClassNode
import org.jetbrains.org.objectweb.asm.tree.FieldNode
import org.jetbrains.org.objectweb.asm.tree.MethodNode
@@ -35,33 +33,34 @@ private typealias LineInfoMap = MutableMap<String, KotlinPosition>
class KaptLineMappingCollector(private val kaptContext: KaptContext<*>) {
companion object {
private val METADATA_COMMENT_PREFIX = "@KaptMetadata "
const val KAPT_METADATA_EXTENSION = ".kapt_metadata"
private const val METADATA_VERSION = 1
fun parseFileInfo(file: JCTree.JCCompilationUnit): FileInfo {
fun getCommentTree(): Tokens.Comment? {
if (isJava9OrLater) {
val packageElement = JCTree.JCCompilationUnit::class.java.getDeclaredMethod("getPackage").invoke(file) as JCTree?
if (packageElement != null) {
file.docComments.getComment(packageElement)?.let { return it }
}
}
val sourceUri = file.sourcefile
?.toUri()
?.takeIf { it.isAbsolute && !it.isOpaque && it.path != null && it.scheme?.toLowerCase() == "file" } ?: return FileInfo.EMPTY
return file.docComments.getComment(file)
val sourceFile = File(sourceUri).takeIf { it.exists() } ?: return FileInfo.EMPTY
val kaptMetadataFile = File(sourceFile.parentFile, sourceFile.nameWithoutExtension + KAPT_METADATA_EXTENSION)
if (!kaptMetadataFile.isFile) {
return FileInfo.EMPTY
}
val comment = getCommentTree()?.text?.trim()
?.takeIf { it.startsWith(METADATA_COMMENT_PREFIX) }
?.drop(METADATA_COMMENT_PREFIX.length)
?: return FileInfo.EMPTY
return FileInfo.parse(comment)
return deserialize(kaptMetadataFile.readBytes())
}
private fun deserializeMetadata(data: String): Pair<LineInfoMap, Map<String, String>> {
private fun deserialize(data: ByteArray): FileInfo {
val lineInfo: LineInfoMap = mutableMapOf()
val signatureInfo = mutableMapOf<String, String>()
val ois = ObjectInputStream(ByteArrayInputStream(Base64.getDecoder().decode(data)))
val ois = ObjectInputStream(ByteArrayInputStream(data))
val version = ois.readInt()
if (version != METADATA_VERSION) {
return FileInfo.EMPTY
}
val lineInfoCount = ois.readInt()
repeat(lineInfoCount) {
@@ -82,7 +81,7 @@ class KaptLineMappingCollector(private val kaptContext: KaptContext<*>) {
signatureInfo[javacSignature] = methodDesc
}
return Pair(lineInfo, signatureInfo)
return FileInfo(lineInfo, signatureInfo)
}
private fun getJavacSignature(decl: JCTree.JCMethodDecl): String {
@@ -146,10 +145,12 @@ class KaptLineMappingCollector(private val kaptContext: KaptContext<*>) {
}
}
fun getClassMetadataCommentText(): String {
fun serialize(): ByteArray {
val os = ByteArrayOutputStream()
val oos = ObjectOutputStream(os)
oos.writeInt(METADATA_VERSION)
oos.writeInt(lineInfo.size)
for ((fqName, kotlinPosition) in lineInfo) {
oos.writeUTF(fqName)
@@ -166,17 +167,12 @@ class KaptLineMappingCollector(private val kaptContext: KaptContext<*>) {
}
oos.flush()
return METADATA_COMMENT_PREFIX + Base64.getEncoder().encodeToString(os.toByteArray())
return os.toByteArray()
}
class FileInfo(private val lineInfo: LineInfoMap, private val signatureInfo: Map<String, String>) {
companion object {
val EMPTY = FileInfo(mutableMapOf(), emptyMap())
fun parse(comment: String): FileInfo {
val (lineInfo, signatureInfo) = deserializeMetadata(comment)
return FileInfo(lineInfo, signatureInfo)
}
}
fun getPositionFor(fqName: String) = lineInfo[fqName]
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.kapt3.prettyPrint
import org.jetbrains.kotlin.kapt3.KaptContext
import org.jetbrains.kotlin.kapt3.javac.KaptJavaFileObject
import org.jetbrains.kotlin.kapt3.stubs.ClassFileToSourceStubConverter
import org.jetbrains.kotlin.kapt3.stubs.ClassFileToSourceStubConverter.KaptStub
import org.jetbrains.kotlin.kapt3.util.KaptLogger
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisHandlerExtension
import org.jetbrains.kotlin.test.ConfigurationKind
@@ -171,13 +172,13 @@ abstract class AbstractKotlinKapt3IntegrationTest : CodegenTestCase() {
override fun loadProcessors() = processors
override fun saveStubs(kaptContext: KaptContext<*>, stubs: JavacList<JCTree.JCCompilationUnit>) {
override fun saveStubs(kaptContext: KaptContext<*>, stubs: List<KaptStub>) {
if (this.savedStubs != null) {
error("Stubs are already saved")
}
this.savedStubs = stubs
.map { it.prettyPrint(kaptContext.context) }
.map { it.file.prettyPrint(kaptContext.context) }
.sorted()
.joinToString(AbstractKotlinKapt3Test.FILE_SEPARATOR)
@@ -116,8 +116,12 @@ abstract class AbstractKotlinKapt3Test : CodegenTestCase() {
): JavacList<JCCompilationUnit> {
val converter = ClassFileToSourceStubConverter(kaptContext, generateNonExistentClass, correctErrorTypes)
val convertedTrees = converter.convert()
val convertedFiles = convertedTrees.map { tree -> createTempFile("stub", ".java", tree.prettyPrint(kaptContext.context)) }
val kaptStubs = converter.convert()
val convertedFiles = kaptStubs.map { stub ->
val sourceFile = createTempFile("stub", ".java", stub.file.prettyPrint(kaptContext.context))
stub.writeMetadataIfNeeded(forSource = sourceFile)
sourceFile
}
val allJavaFiles = javaFiles + convertedFiles
@@ -129,10 +133,12 @@ abstract class AbstractKotlinKapt3Test : CodegenTestCase() {
try {
val parsedJavaFiles = kaptContext.parseJavaFiles(allJavaFiles)
for (file in parsedJavaFiles) {
for (tree in parsedJavaFiles) {
val actualFile = File(tree.sourceFile.toUri())
// By default, JavaFileObject.getName() returns the absolute path to the file.
// In our test, such a path will be temporary, so the comparision against it will lead to flaky tests.
file.sourcefile = KaptJavaFileObject(file, file.defs.firstIsInstance())
tree.sourcefile = KaptJavaFileObject(tree, tree.defs.firstIsInstance(), actualFile)
}
return parsedJavaFiles
@@ -160,13 +166,11 @@ open class AbstractClassFileToSourceStubConverterTest : AbstractKotlinKapt3Test(
companion object {
private val KOTLIN_METADATA_GROUP = "[a-z0-9]+ = (\\{.+?\\}|[0-9]+)"
private val KOTLIN_METADATA_REGEX = "@kotlin\\.Metadata\\(($KOTLIN_METADATA_GROUP)(, $KOTLIN_METADATA_GROUP)*\\)".toRegex()
private val KAPT_METADATA_REGEX = "\\* @KaptMetadata .+".toRegex()
private val EXPECTED_ERROR = "EXPECTED_ERROR"
internal fun removeMetadataAnnotationContents(s: String): String {
return s.replace(KOTLIN_METADATA_REGEX, "@kotlin.Metadata()")
.replace(KAPT_METADATA_REGEX, "* @KaptMetadata")
}
@JvmStatic
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -37,9 +33,6 @@ public enum E {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -60,9 +53,6 @@ public enum E2 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -85,9 +75,6 @@ public enum E3 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -20,9 +16,6 @@ public abstract class Base {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeUnit.MICROSECONDS;
@@ -91,9 +87,6 @@ public final class Test {
////////////////////
/**
* @KaptMetadata
*/
import java.util.Date;
import java.util.concurrent.TimeUnit;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -11,9 +7,6 @@ public abstract @interface Anno1 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -42,9 +35,6 @@ public abstract @interface Anno2 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -57,9 +47,6 @@ public abstract @interface Anno3 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -74,9 +61,6 @@ public enum Colors {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -92,9 +76,6 @@ public enum Enum1 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -111,9 +92,6 @@ public final class TestAnno {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -15,9 +12,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -48,9 +42,6 @@ public final class AnnotationsTest {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -76,9 +67,6 @@ public enum Enum {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -13,9 +9,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -33,9 +26,6 @@ public final class Obj {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -112,9 +102,6 @@ public final class Test {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -141,9 +128,6 @@ public final class Test2 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -168,9 +152,6 @@ public final class Test3 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -40,9 +36,6 @@ public abstract interface Intf {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -65,9 +58,6 @@ public abstract interface IntfWithDefaultImpls {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -13,9 +9,6 @@ public abstract @interface Anno1 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -30,9 +23,6 @@ public enum Enum1 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,21 +1,21 @@
// CORRECT_ERROR_TYPES
// EXPECTED_ERROR(12;12) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (33, 5))
// EXPECTED_ERROR(12;19) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 50))
// EXPECTED_ERROR(14;12) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (34, 5))
// EXPECTED_ERROR(14;34) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 62))
// EXPECTED_ERROR(22;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 50))
// EXPECTED_ERROR(26;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (33, 5))
// EXPECTED_ERROR(27;33) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 62))
// EXPECTED_ERROR(31;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (33, 5))
// EXPECTED_ERROR(33;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 34))
// EXPECTED_ERROR(34;30) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 34))
// EXPECTED_ERROR(35;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (34, 5))
// EXPECTED_ERROR(40;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (34, 5))
// EXPECTED_ERROR(48;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (37, 5))
// EXPECTED_ERROR(53;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (39, 5))
// EXPECTED_ERROR(63;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (42, 5))
// EXPECTED_ERROR(8;11) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (23, 1))
// EXPECTED_ERROR(11;12) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (34, 5))
// EXPECTED_ERROR(11;34) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 62))
// EXPECTED_ERROR(19;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 50))
// EXPECTED_ERROR(23;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (33, 5))
// EXPECTED_ERROR(24;33) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 62))
// EXPECTED_ERROR(28;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (33, 5))
// EXPECTED_ERROR(30;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 34))
// EXPECTED_ERROR(31;30) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 34))
// EXPECTED_ERROR(32;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (34, 5))
// EXPECTED_ERROR(37;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (34, 5))
// EXPECTED_ERROR(45;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (37, 5))
// EXPECTED_ERROR(50;5) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (39, 5))
// EXPECTED_ERROR(5;11) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (23, 1))
// EXPECTED_ERROR(60;18) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (42, 5))
// EXPECTED_ERROR(9;12) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (33, 5))
// EXPECTED_ERROR(9;19) cannot find symbol (Kotlin location: /errorLocationMapping.kt: (26, 50))
@file:Suppress("UNRESOLVED_REFERENCE", "ANNOTATION_PARAMETER_MUST_BE_CONST", "NON_CONST_VAL_USED_IN_CONSTANT_EXPRESSION")
import kotlin.reflect.KClass
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@kotlin.Metadata()
@@ -13,9 +9,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@@ -30,9 +23,6 @@ public final class ErrorInAnnotation {
////////////////////
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@@ -70,9 +60,6 @@ public final class ErrorInConstructorParameter {
////////////////////
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@@ -143,9 +130,6 @@ public final class ErrorInDeclarations {
////////////////////
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@@ -159,9 +143,6 @@ public final class ErrorInSupertype {
////////////////////
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package a.b.c;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -19,9 +15,6 @@ public abstract interface ABC {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -35,9 +28,6 @@ public class BaseClass<B extends java.lang.Object> {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -47,9 +37,6 @@ public abstract interface Intf<I1 extends java.lang.Object, I2 extends java.io.S
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -59,9 +46,6 @@ public abstract interface Intf2<T extends java.util.List<? extends java.lang.Str
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -82,9 +66,6 @@ public final class MyClass<M1 extends java.lang.Object, M2 extends java.lang.Obj
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.util.concurrent.*;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@@ -1,5 +1,5 @@
// CORRECT_ERROR_TYPES
// EXPECTED_ERROR(23;24) cannot find symbol
// EXPECTED_ERROR(kotlin:17:5) cannot find symbol
// FILE: a.kt
package test
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -18,9 +14,6 @@ public abstract class BaseClass {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -30,9 +23,6 @@ public abstract interface Context {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -53,9 +43,6 @@ public final class Inheritor extends BaseClass {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -23,9 +19,6 @@ public final class Test {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -56,9 +49,6 @@ public final class Test2 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,5 +1,5 @@
// EXPECTED_ERROR(-1;-1) 'WHI-TE' is an invalid Java enum value name
// EXPECTED_ERROR(9;20) cannot find symbol (Kotlin location: /invalidFieldName.kt: (8, 1))
// EXPECTED_ERROR(6;20) cannot find symbol (Kotlin location: /invalidFieldName.kt: (8, 1))
enum class Color {
BLACK, `WHI-TE`
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -14,9 +10,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package a.b.c;
import java.lang.System;
@@ -15,9 +12,6 @@ public final class A {
////////////////////
/**
* @KaptMetadata
*/
package a.b.typealias.c;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -36,9 +32,6 @@ public final class State {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -15,9 +11,6 @@ public class CrashMe {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -14,9 +10,6 @@ public abstract class Foo {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package app;
import java.lang.System;
@@ -58,9 +55,6 @@ public class B {
////////////////////
/**
* @KaptMetadata
*/
package app;
import java.lang.System;
@@ -74,9 +68,6 @@ public abstract @interface Bind {
////////////////////
/**
* @KaptMetadata
*/
package app;
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -13,9 +10,6 @@ public abstract interface ListUpdateCallback {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -16,9 +13,6 @@ public final class Test<T extends java.lang.CharSequence, N extends java.lang.Nu
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,5 +1,5 @@
// CORRECT_ERROR_TYPES
// EXPECTED_ERROR(11;5) cannot find symbol (Kotlin location: /maxErrorCount.kt: (9, 5))
// EXPECTED_ERROR(8;5) cannot find symbol (Kotlin location: /maxErrorCount.kt: (9, 5))
// JAVAC_OPTION -Xmaxerrs=1
@file:Suppress("UNRESOLVED_REFERENCE")
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import kotlin.reflect.KClass;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -22,9 +18,6 @@ public abstract class Cls {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -15,9 +12,6 @@ public final class InternalClass {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -28,9 +22,6 @@ public abstract interface InternalInterface {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -83,9 +74,6 @@ public final class Modifiers {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -100,9 +88,6 @@ final class PrivateClass {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -113,9 +98,6 @@ abstract interface PrivateInterface {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -130,9 +112,6 @@ public final class PublicClass {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -147,9 +126,6 @@ public abstract class PublicClassPrivateConstructor {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -172,9 +148,6 @@ public class PublicClassProtectedConstructor {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -185,9 +158,6 @@ public abstract interface PublicInterface {
////////////////////
/**
* @KaptMetadata
*/
package modifiers;
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -21,9 +18,6 @@ public final class M1 {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -52,9 +48,6 @@ public final class A {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -108,9 +101,6 @@ public final class A2 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -124,9 +114,6 @@ public final class Foo {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -86,9 +82,6 @@ public final class A$B {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -123,9 +116,6 @@ public final class Experiment {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -156,9 +146,6 @@ public final class Foo {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -260,9 +247,6 @@ public class JavaClass {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -87,9 +84,6 @@ public final class A$B {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -125,9 +119,6 @@ public final class Experiment {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -159,9 +150,6 @@ public final class Foo {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -266,9 +254,6 @@ class JavaClass {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.util.Calendar;
import kotlin.reflect.KClass;
@@ -20,9 +16,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
import java.util.Calendar;
import kotlin.reflect.KClass;
@@ -37,9 +30,6 @@ public final class MyType<T extends java.lang.Object> {
////////////////////
/**
* @KaptMetadata
*/
import java.util.Calendar;
import kotlin.reflect.KClass;
@@ -51,9 +41,6 @@ public final class NonExistentClassTypesConversionKt {
////////////////////
/**
* @KaptMetadata
*/
import java.util.Calendar;
import kotlin.reflect.KClass;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Suppress(names = {"UNRESOLVED_REFERENCE"})
@@ -11,9 +7,6 @@ public final class NonExistentClassWIthoutCorrectionKt {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -11,9 +7,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -26,9 +19,6 @@ public abstract @interface Anno2 {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -18,9 +15,6 @@ public final class AKt {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -1,7 +1,3 @@
/**
* @KaptMetadata
*/
import java.lang.System;
@kotlin.Metadata()
@@ -15,9 +11,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -39,9 +32,6 @@ public enum StrangeEnum {
////////////////////
/**
* @KaptMetadata
*/
import java.lang.System;
@@ -1,6 +1,3 @@
/**
* @KaptMetadata
*/
package test.another;
import java.lang.System;
@@ -14,9 +11,6 @@ public abstract @interface Anno {
////////////////////
/**
* @KaptMetadata
*/
package test.another;
import java.lang.System;
@@ -1,6 +1,10 @@
/**
* @KaptMetadata
*/
package error;
public final class NonExistentClass {
}
////////////////////
package test;
import java.lang.System;
@@ -12,9 +16,6 @@ public abstract @interface MyAnnotation {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -63,10 +64,3 @@ public final class Simple {
}
}
}
////////////////////
package error;
public final class NonExistentClass {
}
@@ -1,6 +1,10 @@
/**
* @KaptMetadata
*/
package error;
public final class NonExistentClass {
}
////////////////////
package test;
import java.lang.System;
@@ -12,9 +16,6 @@ public abstract @interface MyAnnotation {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -49,10 +50,3 @@ public final class State {
super();
}
}
////////////////////
package error;
public final class NonExistentClass {
}
@@ -1,38 +1,10 @@
/**
* @KaptMetadata
*/
package test;
package error;
import java.lang.System;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface MyAnnotation {
public final class NonExistentClass {
}
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@kotlin.Metadata()
public enum EnumClass {
/*public static final*/ BLACK /* = new BLACK() */,
/*public static final*/ WHITE /* = new WHITE() */;
EnumClass() {
}
}
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@@ -59,9 +31,32 @@ public final class Simple {
////////////////////
/**
* @KaptMetadata
*/
package test;
import java.lang.System;
@kotlin.Metadata()
public enum EnumClass {
/*public static final*/ BLACK /* = new BLACK() */,
/*public static final*/ WHITE /* = new WHITE() */;
EnumClass() {
}
}
////////////////////
package test;
import java.lang.System;
@kotlin.Metadata()
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
public abstract @interface MyAnnotation {
}
////////////////////
package test;
import java.lang.System;
@@ -76,10 +71,3 @@ public enum EnumClass2 {
java.lang.String blah) {
}
}
////////////////////
package error;
public final class NonExistentClass {
}