From 5abdf93d3b5ceb295110d83c3a6301a04827f8a9 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Fri, 14 Jan 2022 15:59:55 +0100 Subject: [PATCH] IC: Add IC test with fix on rename file with only class inside "fails" on JS and JPS tests - the IC logic there is less precise. --- .../incremental/testingUtils/BuildLogFinder.kt | 5 ++++- .../incremental/incrementalFirCacheUtils.kt | 6 +++--- ...ICLightTreeJvmCompilerRunnerTestGenerated.java | 5 +++++ ...rementalFirJvmCompilerRunnerTestGenerated.java | 5 +++++ ...irLightTreeJvmCompilerRunnerTestGenerated.java | 5 +++++ .../IncrementalJsCompilerRunnerTestGenerated.java | 5 +++++ ...mpilerRunnerWithMetadataOnlyTestGenerated.java | 5 +++++ ...rementalJsKlibCompilerRunnerTestGenerated.java | 5 +++++ ...ilerWithScopeExpansionRunnerTestGenerated.java | 5 +++++ ...IncrementalJvmCompilerRunnerTestGenerated.java | 5 +++++ ...lJvmOldBackendCompilerRunnerTestGenerated.java | 5 +++++ .../jps/build/AbstractIncrementalJpsTest.kt | 2 +- .../jps/build/IncrementalJvmJpsTestGenerated.java | 5 +++++ .../renameFileWithClassesOnly/build.log | 11 +++++++++++ .../pureKotlin/renameFileWithClassesOnly/foo0.kt | 3 +++ .../renameFileWithClassesOnly/foo0.kt.delete | 3 +++ .../renameFileWithClassesOnly/foo1.kt.new | 3 +++ .../renameFileWithClassesOnly/jps-build.log | 15 +++++++++++++++ .../renameFileWithClassesOnly/js-build.log | 15 +++++++++++++++ .../pureKotlin/renameFileWithClassesOnly/useA.kt | 7 +++++++ 20 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/build.log create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt.delete create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo1.kt.new create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/jps-build.log create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/js-build.log create mode 100644 jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/useA.kt diff --git a/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/BuildLogFinder.kt b/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/BuildLogFinder.kt index 7afda67267a..d1ad0a5f2eb 100644 --- a/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/BuildLogFinder.kt +++ b/build-common/test/org/jetbrains/kotlin/incremental/testingUtils/BuildLogFinder.kt @@ -24,7 +24,8 @@ data class BuildLogFinder( private val isJsEnabled: Boolean = false, private val isScopeExpansionEnabled: Boolean = false, private val isKlibEnabled: Boolean = false, - private val isFirEnabled: Boolean = false + private val isFirEnabled: Boolean = false, + private val isJpsBuild: Boolean = false, ) { companion object { private const val JS_LOG = "js-build.log" @@ -35,6 +36,7 @@ data class BuildLogFinder( const val JS_JPS_LOG = "js-jps-build.log" private const val FIR_LOG = "fir-build.log" private const val GRADLE_FIR_LOG = "gradle-fir-build.log" + const val JPS_LOG = "jps-build.log" private const val SIMPLE_LOG = "build.log" fun isJpsLogFile(file: File): Boolean = @@ -45,6 +47,7 @@ data class BuildLogFinder( val names = dir.list() ?: arrayOf() val files = names.filter { File(dir, it).isFile }.toSet() val matchedName = when { + isJpsBuild && JPS_LOG in files -> JPS_LOG isScopeExpansionEnabled && SCOPE_EXPANDING_LOG in files -> SCOPE_EXPANDING_LOG isKlibEnabled && KLIB_LOG in files -> KLIB_LOG isJsEnabled && JS_LOG in files -> JS_LOG diff --git a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt index 2aca6329be3..be8629d2dbe 100644 --- a/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt +++ b/compiler/incremental-compilation-impl/src/org/jetbrains/kotlin/incremental/incrementalFirCacheUtils.kt @@ -22,7 +22,6 @@ import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.modules.TargetId import org.jetbrains.kotlin.name.SpecialNames -import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.org.objectweb.asm.commons.Method import java.io.File @@ -113,10 +112,11 @@ internal fun collectNewDirtySources( withMetadataSerializer(metadata, data) { serializer -> klass.acceptChildren(this, data) serializer.serialize(metadata)?.let { (classProto, nameTable) -> - caches.platformCache.collectClassChangesByFeMetadata( - JvmClassName.byClassId(klass.classId), + caches.platformCache.saveFrontendClassToCache( + klass.classId, classProto as ProtoBuf.Class, nameTable, + null, // TODO: !! changesCollector ) } diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java index 34d16154617..9a9e6dbed96 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated.java @@ -577,6 +577,11 @@ public class IncrementalFirICLightTreeJvmCompilerRunnerTestGenerated extends Abs runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java index 7a878406418..c7a2c9d243d 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirJvmCompilerRunnerTestGenerated.java @@ -577,6 +577,11 @@ public class IncrementalFirJvmCompilerRunnerTestGenerated extends AbstractIncrem runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java index 9ac11b50cee..341b290dbbb 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalFirLightTreeJvmCompilerRunnerTestGenerated.java @@ -577,6 +577,11 @@ public class IncrementalFirLightTreeJvmCompilerRunnerTestGenerated extends Abstr runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java index cd30456936f..5ac4f0b5a27 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerTestGenerated.java @@ -576,6 +576,11 @@ public class IncrementalJsCompilerRunnerTestGenerated extends AbstractIncrementa runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java index 07352ddfed8..b465d1c40ce 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated.java @@ -576,6 +576,11 @@ public class IncrementalJsCompilerRunnerWithMetadataOnlyTestGenerated extends Ab runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerRunnerTestGenerated.java index 72cc440195f..58691640479 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerRunnerTestGenerated.java @@ -576,6 +576,11 @@ public class IncrementalJsKlibCompilerRunnerTestGenerated extends AbstractIncrem runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerWithScopeExpansionRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerWithScopeExpansionRunnerTestGenerated.java index e4b55fef0ce..82a6f42779f 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerWithScopeExpansionRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJsKlibCompilerWithScopeExpansionRunnerTestGenerated.java @@ -576,6 +576,11 @@ public class IncrementalJsKlibCompilerWithScopeExpansionRunnerTestGenerated exte runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java index 8f4403df493..894f43d9ba3 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmCompilerRunnerTestGenerated.java @@ -577,6 +577,11 @@ public class IncrementalJvmCompilerRunnerTestGenerated extends AbstractIncrement runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java index 18abc9f05bb..d0234adf4c8 100644 --- a/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java +++ b/compiler/incremental-compilation-impl/test/org/jetbrains/kotlin/incremental/IncrementalJvmOldBackendCompilerRunnerTestGenerated.java @@ -577,6 +577,11 @@ public class IncrementalJvmOldBackendCompilerRunnerTestGenerated extends Abstrac runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt index 3574f8e9df4..71f0fce7c2f 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractIncrementalJpsTest.kt @@ -113,7 +113,7 @@ abstract class AbstractIncrementalJpsTest( lateinit var kotlinCompileContext: KotlinCompileContext protected open val buildLogFinder: BuildLogFinder - get() = BuildLogFinder() + get() = BuildLogFinder(isJpsBuild = true) private fun enableDebugLogging() { com.intellij.openapi.diagnostic.Logger.setFactory(TestLoggerFactory::class.java) diff --git a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java index f37e445e92c..82564279cdb 100644 --- a/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java +++ b/jps/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/IncrementalJvmJpsTestGenerated.java @@ -1246,6 +1246,11 @@ public class IncrementalJvmJpsTestGenerated extends AbstractIncrementalJvmJpsTes runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameClass/"); } + @TestMetadata("renameFileWithClassesOnly") + public void testRenameFileWithClassesOnly() throws Exception { + runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/"); + } + @TestMetadata("renameFileWithFunctionOverload") public void testRenameFileWithFunctionOverload() throws Exception { runTest("jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithFunctionOverload/"); diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/build.log b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/build.log new file mode 100644 index 00000000000..d90ef41411b --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/build.log @@ -0,0 +1,11 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/foo/Foo0Kt.class +End of files +Compiling files: + src/foo1.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt new file mode 100644 index 00000000000..cba9e0c6246 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt @@ -0,0 +1,3 @@ +package foo + +class A(val x: Int) {} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt.delete b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt.delete new file mode 100644 index 00000000000..cba9e0c6246 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo0.kt.delete @@ -0,0 +1,3 @@ +package foo + +class A(val x: Int) {} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo1.kt.new b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo1.kt.new new file mode 100644 index 00000000000..cba9e0c6246 --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/foo1.kt.new @@ -0,0 +1,3 @@ +package foo + +class A(val x: Int) {} diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/jps-build.log b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/jps-build.log new file mode 100644 index 00000000000..086f98aac9b --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/jps-build.log @@ -0,0 +1,15 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/foo/A.class +End of files +Cleaning output files: + out/production/module/use/UseAKt.class +End of files +Compiling files: + src/foo1.kt + src/useA.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/js-build.log b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/js-build.log new file mode 100644 index 00000000000..086f98aac9b --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/js-build.log @@ -0,0 +1,15 @@ +================ Step #1 ================= + +Cleaning output files: + out/production/module/META-INF/module.kotlin_module + out/production/module/foo/A.class +End of files +Cleaning output files: + out/production/module/use/UseAKt.class +End of files +Compiling files: + src/foo1.kt + src/useA.kt +End of files +Exit code: OK +------------------------------------------ diff --git a/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/useA.kt b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/useA.kt new file mode 100644 index 00000000000..1b82ff8e89d --- /dev/null +++ b/jps/jps-plugin/testData/incremental/pureKotlin/renameFileWithClassesOnly/useA.kt @@ -0,0 +1,7 @@ +package use + +import foo.* + +fun useA() { + A(1) +}