diff --git a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt index b9f97d84ddc..6b64149885a 100644 --- a/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt +++ b/jps/jps-plugin/src/org/jetbrains/kotlin/jps/incremental/IncrementalCacheImpl.kt @@ -17,10 +17,7 @@ package org.jetbrains.kotlin.jps.incremental import com.intellij.openapi.util.io.FileUtil -import com.intellij.util.io.BooleanDataDescriptor -import com.intellij.util.io.DataExternalizer -import com.intellij.util.io.IOUtil -import com.intellij.util.io.KeyDescriptor +import com.intellij.util.io.* import gnu.trove.THashSet import org.jetbrains.annotations.TestOnly import org.jetbrains.jps.builders.BuildTarget @@ -35,12 +32,12 @@ import org.jetbrains.kotlin.jps.build.KotlinBuilder import org.jetbrains.kotlin.jps.incremental.storage.BasicMap import org.jetbrains.kotlin.jps.incremental.storage.BasicStringMap import org.jetbrains.kotlin.load.java.JvmAnnotationNames +import org.jetbrains.kotlin.load.kotlin.KotlinJvmBinaryClass import org.jetbrains.kotlin.load.kotlin.ModuleMapping import org.jetbrains.kotlin.load.kotlin.PackageClassUtils -import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind -import org.jetbrains.kotlin.load.kotlin.header.isCompatibleFileFacadeKind -import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind +import org.jetbrains.kotlin.load.kotlin.header.* import org.jetbrains.kotlin.load.kotlin.incremental.components.IncrementalCache +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.load.kotlin.incremental.components.JvmPackagePartProto import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.resolve.jvm.JvmClassName.byInternalName @@ -68,14 +65,17 @@ public class IncrementalCacheImpl( companion object { val CACHE_EXTENSION = "tab" - private val PROTO_MAP = "proto" - private val CONSTANTS_MAP = "constants" - private val INLINE_FUNCTIONS = "inline-functions" - private val PACKAGE_PARTS = "package-parts" - private val SOURCE_TO_CLASSES = "source-to-classes" - private val DIRTY_OUTPUT_CLASSES = "dirty-output-classes" - private val DIRTY_INLINE_FUNCTIONS = "dirty-inline-functions" - private val INLINED_TO = "inlined-to" + val PROTO_MAP = "proto" + val CONSTANTS_MAP = "constants" + val INLINE_FUNCTIONS = "inline-functions" + val PACKAGE_PARTS = "package-parts" + val MULTIFILE_CLASS_FACADES = "multifile-class-facades" + val MULTIFILE_CLASS_PARTS = "multifile-class-parts" + val SOURCE_TO_CLASSES = "source-to-classes" + val CLASS_TO_SOURCES = "class-to-sources" + val DIRTY_OUTPUT_CLASSES = "dirty-output-classes" + val DIRTY_INLINE_FUNCTIONS = "dirty-inline-functions" + val INLINED_TO = "inlined-to" private val MODULE_MAPPING_FILE_NAME = "." + ModuleMapping.MAPPING_FILE_EXT } @@ -95,6 +95,8 @@ public class IncrementalCacheImpl( private val constantsMap = registerMap(ConstantsMap(CONSTANTS_MAP.storageFile)) private val inlineFunctionsMap = registerMap(InlineFunctionsMap(INLINE_FUNCTIONS.storageFile)) private val packagePartMap = registerMap(PackagePartMap(PACKAGE_PARTS.storageFile)) + private val multifileClassFacadeMap = registerMap(MultifileClassFacadeMap(MULTIFILE_CLASS_FACADES.storageFile)) + private val multifileClassPartMap = registerMap(MultifileClassPartMap(MULTIFILE_CLASS_PARTS.storageFile)) private val sourceToClassesMap = registerMap(SourceToClassesMap(SOURCE_TO_CLASSES.storageFile)) private val dirtyOutputClassesMap = registerMap(DirtyOutputClassesMap(DIRTY_OUTPUT_CLASSES.storageFile)) // TODO: can be removed? @@ -196,6 +198,24 @@ public class IncrementalCacheImpl( constantsMap.process(kotlinClass) + inlineFunctionsMap.process(kotlinClass) } + header.isCompatibleMultifileClassKind() -> { + val partNames = getFullNamesOfMultifileClassParts(kotlinClass) + multifileClassFacadeMap.add(className, partNames) + + // TODO NO_CHANGES? (delegates only, see package facade) + constantsMap.process(kotlinClass) + + inlineFunctionsMap.process(kotlinClass) + } + header.isCompatibleMultifileClassPartKind() -> { + assert(sourceFiles.size() == 1) { "Multifile class part from several source files: $sourceFiles" } + packagePartMap.addPackagePart(className) + val facadeClassName = getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass, header.multifileClassName!!) + multifileClassPartMap.add(className.internalName, facadeClassName) + + protoMap.process(kotlinClass, isPackage = true) + + constantsMap.process(kotlinClass) + + inlineFunctionsMap.process(kotlinClass) + } header.isCompatibleClassKind() && JvmAnnotationNames.KotlinClass.Kind.CLASS == header.classKind -> protoMap.process(kotlinClass, isPackage = false) + constantsMap.process(kotlinClass) + @@ -236,6 +256,8 @@ public class IncrementalCacheImpl( dirtyClasses.forEach { protoMap.remove(it) packagePartMap.remove(it) + multifileClassFacadeMap.remove(it) + multifileClassPartMap.remove(it) constantsMap.remove(it) inlineFunctionsMap.remove(it) } @@ -256,6 +278,25 @@ public class IncrementalCacheImpl( } } + override fun getObsoleteMultifileClasses(): Collection { + val obsoleteMultifileClasses = linkedSetOf() + for (dirtyClass in dirtyOutputClassesMap.getDirtyOutputClasses()) { + val dirtyFacade = multifileClassPartMap.getFacadeName(dirtyClass) ?: continue + obsoleteMultifileClasses.add(dirtyFacade) + } + KotlinBuilder.LOG.debug("Obsolete multifile class facades: $obsoleteMultifileClasses") + return obsoleteMultifileClasses + } + + override fun getStableMultifileFacadeParts(facadeInternalName: String): Collection? { + val partNames = multifileClassFacadeMap.getMultifileClassParts(facadeInternalName) ?: return null + return partNames.filter { !dirtyOutputClassesMap.isDirty(it) } + } + + override fun getMultifileFacade(partInternalName: String): String? { + return multifileClassPartMap.getFacadeName(partInternalName) + } + override fun getModuleMappingData(): ByteArray? { return protoMap[JvmClassName.byInternalName(MODULE_MAPPING_FILE_NAME)]?.bytes } @@ -516,6 +557,36 @@ public class IncrementalCacheImpl( override fun dumpValue(value: Boolean) = "" } + private inner class MultifileClassFacadeMap(storageFile: File) : BasicStringMap>(storageFile, StringListExternalizer) { + public fun add(facadeName: JvmClassName, partNames: List) { + storage.put(facadeName.internalName, partNames) + } + + public fun getMultifileClassParts(facadeName: String): List? = storage[facadeName] + + public fun remove(className: JvmClassName) { + storage.remove(className.internalName) + } + + override fun dumpValue(value: List): String = value.toString() + } + + private inner class MultifileClassPartMap(storageFile: File) : BasicStringMap(storageFile, EnumeratorStringDescriptor.INSTANCE) { + public fun add(partName: String, facadeName: String) { + storage.put(partName, facadeName) + } + + public fun getFacadeName(partName: String): String? { + return storage.get(partName) + } + + public fun remove(className: JvmClassName) { + storage.remove(className.internalName) + } + + override fun dumpValue(value: String): String = value + } + private inner class SourceToClassesMap(storageFile: File) : BasicStringMap>(storageFile, PathStringDescriptor.INSTANCE, StringListExternalizer) { public fun clearOutputsForSource(sourceFile: File) { storage.remove(sourceFile.absolutePath) @@ -543,6 +614,8 @@ public class IncrementalCacheImpl( public fun getDirtyOutputClasses(): Collection = storage.keys + public fun isDirty(className: String): Boolean = storage.containsMapping(className) + override fun dumpValue(value: Boolean) = "" } @@ -631,6 +704,21 @@ private fun ByteArray.md5(): Long { ) } +private fun getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass: KotlinJvmBinaryClass, simpleName: String): String { + val classFqName = kotlinClass.classId.packageFqName.child(Name.identifier(simpleName)) + return JvmClassName.byFqNameWithoutInnerClasses(classFqName).internalName +} + +private fun getFullNamesOfMultifileClassParts(kotlinClass: LocalFileKotlinClass): List { + val classHeader = kotlinClass.classHeader + val partClassNames = classHeader.filePartClassNames ?: throw AssertionError("Multifile class has no parts: ${kotlinClass.className}") + val fullNames = arrayListOf() + for (shortName in partClassNames) { + fullNames.add(getInternalNameOfTopLevelClassInTheSamePackage(kotlinClass, shortName)) + } + return fullNames +} + private abstract class StringMapExternalizer : DataExternalizer> { override fun save(out: DataOutput, map: Map?) { out.writeInt(map!!.size()) @@ -698,6 +786,9 @@ private object PathCollectionExternalizer : DataExternalizer> } } +private val File.normalizedPath: String + get() = FileUtil.toSystemIndependentName(canonicalPath) + @TestOnly private fun , V> Map.dumpMap(dumpValue: (V)->String): String = StringBuilder { diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java index 512804ffb8b..d2f1a958083 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/IncrementalJpsTestGenerated.java @@ -347,6 +347,54 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest(fileName); } + @TestMetadata("multifileClassFileAdded") + public void testMultifileClassFileAdded() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/"); + doTest(fileName); + } + + @TestMetadata("multifileClassFileChanged") + public void testMultifileClassFileChanged() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/"); + doTest(fileName); + } + + @TestMetadata("multifileClassFileMovedToAnotherMultifileClass") + public void testMultifileClassFileMovedToAnotherMultifileClass() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/"); + doTest(fileName); + } + + @TestMetadata("multifileClassInlineFunction") + public void testMultifileClassInlineFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/"); + doTest(fileName); + } + + @TestMetadata("multifileClassInlineFunctionAccessingField") + public void testMultifileClassInlineFunctionAccessingField() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/"); + doTest(fileName); + } + + @TestMetadata("multifileClassRecreated") + public void testMultifileClassRecreated() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/"); + doTest(fileName); + } + + @TestMetadata("multifileClassRecreatedAfterRenaming") + public void testMultifileClassRecreatedAfterRenaming() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/"); + doTest(fileName); + } + + @TestMetadata("multifileClassRemoved") + public void testMultifileClassRemoved() throws Exception { + String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/"); + doTest(fileName); + } + @TestMetadata("multiplePackagesModified") public void testMultiplePackagesModified() throws Exception { String fileName = JetTestUtils.navigationMetadata("jps-plugin/testData/incremental/pureKotlin/multiplePackagesModified/"); diff --git a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt index 03aacad2200..f62eca04266 100644 --- a/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt +++ b/jps/jps-plugin/test/org/jetbrains/kotlin/jps/build/classFilesComparison/classFilesComparison.kt @@ -22,9 +22,7 @@ import com.google.common.io.Files import com.google.protobuf.ExtensionRegistry import com.intellij.openapi.util.io.FileUtil import org.jetbrains.kotlin.jps.incremental.LocalFileKotlinClass -import org.jetbrains.kotlin.load.kotlin.header.isCompatibleClassKind -import org.jetbrains.kotlin.load.kotlin.header.isCompatibleFileFacadeKind -import org.jetbrains.kotlin.load.kotlin.header.isCompatiblePackageFacadeKind +import org.jetbrains.kotlin.load.kotlin.header.* import org.jetbrains.kotlin.serialization.DebugProtoBuf import org.jetbrains.kotlin.serialization.jvm.BitEncoding import org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf @@ -148,6 +146,8 @@ fun classFileToString(classFile: File): String { out.write("\n------ file facade proto -----\n${DebugProtoBuf.Package.parseFrom(input, getExtensionRegistry())}") classHeader.isCompatibleClassKind() -> out.write("\n------ class proto -----\n${DebugProtoBuf.Class.parseFrom(input, getExtensionRegistry())}") + classHeader.isCompatibleMultifileClassPartKind() -> + out.write("\n------ multi-file part proto -----\n${DebugProtoBuf.Package.parseFrom(input, getExtensionRegistry())}") else -> throw IllegalStateException() } diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/a.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/a.kt new file mode 100644 index 00000000000..63a63e173a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/a.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/b.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/b.kt.new new file mode 100644 index 00000000000..cb1f3f58a0a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/b.kt.new @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/build.log new file mode 100644 index 00000000000..50ccb081084 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileAdded/build.log @@ -0,0 +1,23 @@ +Compiling files: +src/b.kt +End of files +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__AKt.class +out/production/module/test/Test__BKt.class +End of files +Compiling files: +src/a.kt +src/b.kt +End of files +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__AKt.class +End of files +Compiling files: +src/a.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/a.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/a.kt new file mode 100644 index 00000000000..63a63e173a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/a.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/b.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/b.kt new file mode 100644 index 00000000000..cb1f3f58a0a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/b.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/b.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/b.kt.new new file mode 100644 index 00000000000..6ce025497fc --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/b.kt.new @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "bcd" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/build.log new file mode 100644 index 00000000000..82b2f80c31e --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileChanged/build.log @@ -0,0 +1,9 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__BKt.class +End of files +Compiling files: +src/b.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/a.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/a.kt new file mode 100644 index 00000000000..63a63e173a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/a.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/b.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/b.kt new file mode 100644 index 00000000000..cb1f3f58a0a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/b.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/b.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/b.kt.new new file mode 100644 index 00000000000..5099c5bae8a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/b.kt.new @@ -0,0 +1,4 @@ +@file:[JvmName("Test1") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/build.log new file mode 100644 index 00000000000..8366c68cc13 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassFileMovedToAnotherMultifileClass/build.log @@ -0,0 +1,18 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__BKt.class +End of files +Compiling files: +src/b.kt +End of files +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__AKt.class +End of files +Compiling files: +src/a.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/build.log new file mode 100644 index 00000000000..64f2485efca --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/build.log @@ -0,0 +1,8 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/TestPackage.class +out/production/module/test/UsageKt.class +End of files +Compiling files: +src/usage.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/inline.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/inline.kt new file mode 100644 index 00000000000..f4fa4554f73 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/inline.kt @@ -0,0 +1,7 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +inline fun f(body: () -> Unit) { + println("i'm inline function") + body() +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/inlineOther.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/inlineOther.kt new file mode 100644 index 00000000000..38501b19b1f --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/inlineOther.kt @@ -0,0 +1,7 @@ +@file:[JvmName("Test") JvmMultifileClass] +package other + +inline fun f(body: () -> Unit) { + println("i'm other inline function") + body() +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/usage.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/usage.kt new file mode 100644 index 00000000000..e5bb1ff5213 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/usage.kt @@ -0,0 +1,6 @@ +package test + +fun main(args: Array) { + f { println("to be inlined") } + other.f { println("to be inlined") } +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/usage.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/usage.kt.new new file mode 100644 index 00000000000..e5bb1ff5213 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunction/usage.kt.new @@ -0,0 +1,6 @@ +package test + +fun main(args: Array) { + f { println("to be inlined") } + other.f { println("to be inlined") } +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/build.log new file mode 100644 index 00000000000..64f2485efca --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/build.log @@ -0,0 +1,8 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/TestPackage.class +out/production/module/test/UsageKt.class +End of files +Compiling files: +src/usage.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/inline.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/inline.kt new file mode 100644 index 00000000000..cd2c740e29d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/inline.kt @@ -0,0 +1,9 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +val property = ":)" + +inline fun f(body: () -> Unit) { + println("i'm inline function" + property) + body() +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/inlineOther.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/inlineOther.kt new file mode 100644 index 00000000000..693cebd353a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/inlineOther.kt @@ -0,0 +1,9 @@ +@file:[JvmName("Test") JvmMultifileClass] +package other + +val property = ":)" + +inline fun f(body: () -> Unit) { + println("i'm inline function" + property) + body() +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/usage.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/usage.kt new file mode 100644 index 00000000000..e5bb1ff5213 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/usage.kt @@ -0,0 +1,6 @@ +package test + +fun main(args: Array) { + f { println("to be inlined") } + other.f { println("to be inlined") } +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/usage.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/usage.kt.new new file mode 100644 index 00000000000..e5bb1ff5213 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassInlineFunctionAccessingField/usage.kt.new @@ -0,0 +1,6 @@ +package test + +fun main(args: Array) { + f { println("to be inlined") } + other.f { println("to be inlined") } +} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/a.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/a.kt new file mode 100644 index 00000000000..63a63e173a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/a.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/a.kt.delete.1 b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/a.kt.delete.1 new file mode 100644 index 00000000000..8b137891791 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/a.kt.delete.1 @@ -0,0 +1 @@ + diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/b.kt.new.2 b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/b.kt.new.2 new file mode 100644 index 00000000000..cb1f3f58a0a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/b.kt.new.2 @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/build.log new file mode 100644 index 00000000000..f920f7c94b5 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreated/build.log @@ -0,0 +1,13 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__AKt.class +End of files +Compiling files: +End of files + + +Compiling files: +src/b.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/a.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/a.kt new file mode 100644 index 00000000000..63a63e173a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/a.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/a.kt.new.1 b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/a.kt.new.1 new file mode 100644 index 00000000000..1d3ad0fe2c4 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/a.kt.new.1 @@ -0,0 +1,4 @@ +@file:[JvmName("Test2") JvmMultifileClass] +package test2 + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/b.kt.new.2 b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/b.kt.new.2 new file mode 100644 index 00000000000..cb1f3f58a0a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/b.kt.new.2 @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/build.log new file mode 100644 index 00000000000..9e245d73c4a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRecreatedAfterRenaming/build.log @@ -0,0 +1,23 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__AKt.class +End of files +Compiling files: +src/a.kt +End of files + + +Compiling files: +src/b.kt +End of files +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test2/Test2.class +out/production/module/test2/Test2Package.class +out/production/module/test2/Test2__AKt.class +End of files +Compiling files: +src/a.kt +End of files \ No newline at end of file diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/a.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/a.kt new file mode 100644 index 00000000000..63a63e173a0 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/a.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun a() = "a" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/a.kt.delete b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/a.kt.delete new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/b.kt b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/b.kt new file mode 100644 index 00000000000..cb1f3f58a0a --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/b.kt @@ -0,0 +1,4 @@ +@file:[JvmName("Test") JvmMultifileClass] +package test + +fun b() = "b" diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/b.kt.delete b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/b.kt.delete new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/build.log new file mode 100644 index 00000000000..663b207d00c --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/multifileClassRemoved/build.log @@ -0,0 +1,11 @@ +Cleaning output files: +out/production/module/META-INF/module.kotlin_module +out/production/module/test/Test.class +out/production/module/test/TestPackage.class +out/production/module/test/Test__AKt.class +End of files +Cleaning output files: +out/production/module/test/Test__BKt.class +End of files +Compiling files: +End of files \ No newline at end of file