diff --git a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index cc7afcbd42e..45ba56ebeb6 100644 --- a/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/tests/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -1211,6 +1211,10 @@ fun main(args: Array) { testClass { model("incremental/lookupTracker/js", extension = null, recursive = false) } + testClass { + // todo: investigate why lookups are different from non-klib js + model("incremental/lookupTracker/jsKlib", extension = null, recursive = false) + } testClass { model("incremental/lazyKotlinCaches", extension = null, excludeParentDirs = true) diff --git a/jps-plugin/build.gradle.kts b/jps-plugin/build.gradle.kts index fa47a71a2f4..2bb19dede65 100644 --- a/jps-plugin/build.gradle.kts +++ b/jps-plugin/build.gradle.kts @@ -66,6 +66,7 @@ projectTest(parallel = true) { // do not replace with compile/runtime dependency, // because it forces Intellij reindexing after each compiler change dependsOn(":kotlin-compiler:dist") + dependsOn(":kotlin-stdlib-js-ir:packFullRuntimeKLib") workingDir = rootDir } diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt index 898faa75878..f93d80e40c8 100644 --- a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/AbstractLookupTrackerTest.kt @@ -43,6 +43,7 @@ import org.jetbrains.kotlin.jps.incremental.createTestingCompilerEnvironment import org.jetbrains.kotlin.jps.incremental.runJSCompiler import org.jetbrains.kotlin.test.KotlinTestUtils import org.jetbrains.kotlin.utils.JsMetadataVersion +import org.jetbrains.kotlin.utils.PathUtil import java.io.* import java.util.* @@ -109,21 +110,40 @@ abstract class AbstractJvmLookupTrackerTest : AbstractLookupTrackerTest() { } } +abstract class AbstractJsKlibLookupTrackerTest : AbstractJsLookupTrackerTest() { + override val jsStdlibFile: File + get() = File("build/js-ir-runtime/full-runtime.klib") + + override fun configureAdditionalArgs(args: K2JSCompilerArguments) { + args.irProduceKlibDir = true + args.irOnly = true + args.outputFile = outDir.resolve("out.klib").absolutePath + } +} + abstract class AbstractJsLookupTrackerTest : AbstractLookupTrackerTest() { private var header: ByteArray? = null private val packageParts: MutableMap = hashMapOf() + private val serializedIrFiles: MutableMap = hashMapOf() override fun setUp() { super.setUp() header = null packageParts.clear() + serializedIrFiles.clear() } override fun Services.Builder.registerAdditionalServices() { if (header != null) { register( IncrementalDataProvider::class.java, - IncrementalDataProviderImpl(header!!, packageParts, JsMetadataVersion.INSTANCE.toArray(), emptyMap(), emptyMap()) // TODO pass correct metadata + IncrementalDataProviderImpl( + headerMetadata = header!!, + compiledPackageParts = packageParts, + metadataVersion = JsMetadataVersion.INSTANCE.toArray(), + packageMetadata = emptyMap(), // TODO pass correct metadata + serializedIrFiles = serializedIrFiles + ) ) } @@ -131,21 +151,34 @@ abstract class AbstractJsLookupTrackerTest : AbstractLookupTrackerTest() { } override fun markDirty(removedAndModifiedSources: Iterable) { - removedAndModifiedSources.forEach { packageParts.remove(it) } + removedAndModifiedSources.forEach { + packageParts.remove(it) + serializedIrFiles.remove(it) + } } override fun processCompilationResults(outputItemsCollector: OutputItemsCollectorImpl, services: Services) { val incrementalResults = services.get(IncrementalResultsConsumer::class.java) as IncrementalResultsConsumerImpl header = incrementalResults.headerMetadata packageParts.putAll(incrementalResults.packageParts) + serializedIrFiles.putAll(incrementalResults.irFileData) + } + + protected open val jsStdlibFile: File + get() = PathUtil.kotlinPathsForDistDirectory.jsStdLibJarPath + + protected open fun configureAdditionalArgs(args: K2JSCompilerArguments) { + args.outputFile = File(outDir, "out.js").canonicalPath } override fun runCompiler(filesToCompile: Iterable, env: JpsCompilerEnvironment): Any? { val args = K2JSCompilerArguments().apply { - outputFile = File(outDir, "out.js").canonicalPath + val libPaths = arrayListOf(jsStdlibFile.absolutePath) + (libraries ?: "").split(File.pathSeparator) + libraries = libPaths.joinToString(File.pathSeparator) reportOutputFiles = true freeArgs = filesToCompile.map { it.canonicalPath } } + configureAdditionalArgs(args) return runJSCompiler(args, env) } } diff --git a/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JsKlibLookupTrackerTestGenerated.java b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JsKlibLookupTrackerTestGenerated.java new file mode 100644 index 00000000000..7ad7897706c --- /dev/null +++ b/jps-plugin/jps-tests/test/org/jetbrains/kotlin/jps/build/JsKlibLookupTrackerTestGenerated.java @@ -0,0 +1,60 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.jps.build; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("jps-plugin/testData/incremental/lookupTracker/jsKlib") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class JsKlibLookupTrackerTestGenerated extends AbstractJsKlibLookupTrackerTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + public void testAllFilesPresentInJsKlib() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("jps-plugin/testData/incremental/lookupTracker/jsKlib"), Pattern.compile("^([^\\.]+)$"), null, false); + } + + @TestMetadata("classifierMembers") + public void testClassifierMembers() throws Exception { + runTest("jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/"); + } + + @TestMetadata("conventions") + public void testConventions() throws Exception { + runTest("jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/"); + } + + @TestMetadata("expressionType") + public void testExpressionType() throws Exception { + runTest("jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/"); + } + + @TestMetadata("localDeclarations") + public void testLocalDeclarations() throws Exception { + runTest("jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/"); + } + + @TestMetadata("packageDeclarations") + public void testPackageDeclarations() throws Exception { + runTest("jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/"); + } + + @TestMetadata("simple") + public void testSimple() throws Exception { + runTest("jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/"); + } +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/bar.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/bar.kt new file mode 100644 index 00000000000..3798ab0118a --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/bar.kt @@ -0,0 +1,5 @@ +package bar + +// To force creating bar package + +/*p:bar(Dummy)*/private class Dummy diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/build.log b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/build.log new file mode 100644 index 00000000000..536cf259677 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/build.log @@ -0,0 +1,21 @@ +==== INITIAL BUILD ==== +Compiling files: + src/bar.kt + src/constraints.kt + src/foo.kt + src/usages.kt +Exit code: OK + +==== STEP 1 ==== +Compiling files: + src/usages.kt +Exit code: OK + +==== STEP 2 ==== +Compiling files: + src/usages.kt +Exit code: COMPILATION_ERROR + Unresolved reference: vala + Unresolved reference: vara + Unresolved reference: foo + Unresolved reference: bar \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/constraints.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/constraints.kt new file mode 100644 index 00000000000..c86fa5ded13 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/constraints.kt @@ -0,0 +1,7 @@ +package foo + +import bar.* + +/*p:foo*/fun , C, D> test() + where C : /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Number, C : /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Comparable, D : B +{} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/foo.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/foo.kt new file mode 100644 index 00000000000..c8a86b7ce73 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/foo.kt @@ -0,0 +1,71 @@ +package foo + +import bar.* + +/*p:foo*/class A { + val a = /*p:kotlin(Int)*/1 + var b = /*p:kotlin(String)*/"" + + val c: /*c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/String + get() = /*c:foo.A p:kotlin(String)*/b + + var d: /*c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/String = /*p:kotlin(String)*/"ddd" + get() = /*p:kotlin(String)*/field + set(v) { /*p:kotlin(String)*/field = /*p:kotlin(String)*/v } + + fun foo() { + /*c:foo.A p:kotlin(Int)*/a + /*c:foo.A*/foo() + /*p:foo(A) p:kotlin(Int)*/this./*c:foo.A*/a + /*p:foo(A)*/this./*c:foo.A*/foo() + /*c:foo.A c:foo.A.Companion p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:bar*/baz() + /*c:foo.A c:foo.A.Companion p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:bar p:kotlin(Int)*/Companion./*c:foo.A.Companion*/a + /*c:foo.A c:foo.A.Companion p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:bar p:kotlin(String)*/O./*c:foo.A.O*/v = /*p:kotlin(String)*/"OK" + } + + class B { + val a = /*p:kotlin(Int)*/1 + + companion object CO { + fun bar(a: /*c:foo.A.B.CO c:foo.A.B c:foo.A c:foo.A.Companion p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) {} + } + } + + inner class C + + companion object { + val a = /*p:kotlin(Int)*/1 + fun baz() {} + } + + object O { + var v = /*p:kotlin(String)*/"vvv" + } +} + +/*p:foo*/interface I { + var a: /*c:foo.I p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int + fun foo() + + class NI +} + +/*p:foo*/object Obj : /*p:foo*/I { + override var a = /*p:kotlin(Int)*/1 + override fun foo() {} + val b = /*p:kotlin(Int)*/1 + fun bar(): /*c:foo.Obj p:foo*/I = /*p:kotlin(Nothing) p:foo(I)*/null as /*c:foo.Obj p:foo*/I +} + +/*p:foo*/enum class E { + X, + Y; + + val a = /*p:kotlin(Int)*/1 + fun foo() { + /*c:foo.E p:kotlin(Int)*/a + /*c:foo.E c:kotlin.Enum p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js c:kotlin.Enum.Companion p:foo p:bar p:kotlin(Int)*/Y./*c:foo.E*/a + /*c:foo.E c:kotlin.Enum*/foo() + /*c:foo.E c:kotlin.Enum p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js c:kotlin.Enum.Companion p:foo p:bar*/X./*c:foo.E c:kotlin.Enum*/foo() + } +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt new file mode 100644 index 00000000000..eaf1734a271 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt @@ -0,0 +1,50 @@ +package foo + +import bar.* + +/*p:foo*/fun usages(i: /*p:foo*/I) /*p:foo(E)*/{ + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(Int)*/A()./*c:foo.A*/a + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(String)*/A()./*c:foo.A*/b + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(String)*/A()./*c:foo.A*/c + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(String)*/A()./*c:foo.A*/d = /*p:kotlin(String)*/"new value" + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke)*/A()./*c:foo.A*/foo() + /*p:foo p:kotlin(Int)*/A./*c:foo.A c:foo.A.Companion c:foo.A.B.CO(invoke)*/B()./*c:foo.A.B*/a + /*p:foo*/A./*c:foo.A*/B./*c:foo.A.B c:foo.A.B.CO*/bar(1) + /*p:foo*/A./*c:foo.A*/B./*c:foo.A.B*/CO./*c:foo.A.B.CO*/bar(1) + /*p:foo c:foo.A(Companion)*/A + /*p:foo p:kotlin(Int)*/A./*c:foo.A.Companion c:foo.A*/a + /*p:foo*/A./*c:foo.A c:foo.A.Companion*/baz() + /*p:foo c:foo.A(Companion)*/A./*c:foo.A.Companion c:foo.A*/Companion + /*p:foo*/A./*c:foo.A*/Companion./*c:foo.A.Companion*/baz() + /*p:foo c:foo.A(O)*/A./*c:foo.A.Companion c:foo.A*/O + /*p:foo p:kotlin(String)*/A./*c:foo.A*/O./*c:foo.A.O*/v = /*p:kotlin(String)*/"OK" + + /*p:foo(I) p:kotlin(Int)*/i./*c:foo.I*/a = /*p:kotlin(Int)*/2 + /*p:foo p:kotlin(Int)*/Obj./*c:foo.Obj*/a + /*p:foo*/Obj./*c:foo.Obj*/foo() + var ii: /*p:foo*/I = /*p:foo*/Obj + /*p:foo(I) p:kotlin(Int)*/ii./*c:foo.I*/a + /*p:foo(I)*/ii./*c:foo.I*/foo() + /*p:foo p:kotlin(Int)*/Obj./*c:foo.Obj*/b + val iii = /*p:foo p:foo(I)*/Obj./*c:foo.Obj*/bar() + /*p:foo(I)*/iii./*c:foo.I*/foo() + + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/X + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar p:kotlin(Int)*/E./*c:foo.E*/X./*c:foo.E*/a + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/Y./*c:foo.E c:kotlin.Enum*/foo() + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar p:kotlin(Array)*/E./*c:foo.E*/values() + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/valueOf(/*p:kotlin(String)*/"") +} + +/*p:foo*/fun classifiers( + a: /*p:foo*/A, + ab: /*p:foo*/A./*c:foo.A*/B, + ac: /*p:foo*/A./*c:foo.A*/C, + abCo: /*p:foo*/A./*c:foo.A*/B./*c:foo.A.B*/CO, + aCompanion: /*p:foo*/A./*c:foo.A*/Companion, + aO: /*p:foo*/A./*c:foo.A*/O, + i: /*p:foo*/I, + ni: /*p:foo*/I./*c:foo.I*/NI, + obj: /*p:foo*/Obj, + e: /*p:foo*/E +) {} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 new file mode 100644 index 00000000000..bb655f2171b --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.new.2 @@ -0,0 +1,54 @@ +package foo + +import bar.* + +/*p:foo*/fun usages(i: /*p:foo*/I) { + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(Int)*/A()./*c:foo.A*/a + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(String)*/A()./*c:foo.A*/b + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(String)*/A()./*c:foo.A*/c + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke) p:kotlin(String)*/A()./*c:foo.A*/d = /*p:kotlin(String)*/"new value" + /*p:foo c:foo.A.Companion(invoke) p:foo(invoke)*/A()./*c:foo.A*/foo() + /*p:foo p:kotlin(Int)*/A./*c:foo.A c:foo.A.Companion c:foo.A.B.CO(invoke)*/B()./*c:foo.A.B*/a + /*p:foo*/A./*c:foo.A*/B./*c:foo.A.B c:foo.A.B.CO*/bar(1) + /*p:foo*/A./*c:foo.A*/B./*c:foo.A.B*/CO./*c:foo.A.B.CO*/bar(1) + /*p:foo c:foo.A(Companion)*/A + /*p:foo p:kotlin(Int)*/A./*c:foo.A.Companion c:foo.A*/a + /*p:foo*/A./*c:foo.A c:foo.A.Companion*/baz() + /*p:foo c:foo.A(Companion)*/A./*c:foo.A.Companion c:foo.A*/Companion + /*p:foo*/A./*c:foo.A*/Companion./*c:foo.A.Companion*/baz() + /*p:foo c:foo.A(O)*/A./*c:foo.A.Companion c:foo.A*/O + /*p:foo p:kotlin(String)*/A./*c:foo.A*/O./*c:foo.A.O*/v = /*p:kotlin(String)*/"OK" + /*p:foo*/A./*c:foo.A.Companion c:foo.A p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:bar*/vala + /*p:foo*/A./*c:foo.A c:foo.A.Companion p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:bar*/vara() + + /*p:foo(I) p:kotlin(Int)*/i./*c:foo.I*/a = /*p:kotlin(Int)*/2 + /*p:foo p:kotlin(Int)*/Obj./*c:foo.Obj*/a + /*p:foo*/Obj./*c:foo.Obj*/foo() + var ii: /*p:foo*/I = /*p:foo*/Obj + /*p:foo(I) p:kotlin(Int)*/ii./*c:foo.I*/a + /*p:foo(I)*/ii./*c:foo.I*/foo() + /*p:foo p:kotlin(Int)*/Obj./*c:foo.Obj*/b + val iii = /*p:foo p:foo(I)*/Obj./*c:foo.Obj*/bar() + /*p:foo(I)*/iii./*c:foo.I*/foo() + + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/X + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar p:kotlin(Int)*/E./*c:foo.E*/X./*c:foo.E*/a + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/Y./*c:foo.E c:kotlin.Enum*/foo() + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar p:kotlin(Array)*/E./*c:foo.E*/values() + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/valueOf(/*p:kotlin(String)*/"") + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/foo + /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/E./*c:foo.E*/bar() +} + +/*p:foo*/fun classifiers( + a: /*p:foo*/A, + ab: /*p:foo*/A./*c:foo.A*/B, + ac: /*p:foo*/A./*c:foo.A*/C, + abCo: /*p:foo*/A./*c:foo.A*/B./*c:foo.A.B*/CO, + aCompanion: /*p:foo*/A./*c:foo.A*/Companion, + aO: /*p:foo*/A./*c:foo.A*/O, + i: /*p:foo*/I, + ni: /*p:foo*/I./*c:foo.I*/NI, + obj: /*p:foo*/Obj, + e: /*p:foo*/E +) {} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.touch.1 b/jps-plugin/testData/incremental/lookupTracker/jsKlib/classifierMembers/usages.kt.touch.1 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/build.log b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/build.log new file mode 100644 index 00000000000..a03aebe0d5f --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/build.log @@ -0,0 +1,16 @@ +==== INITIAL BUILD ==== +Compiling files: + src/comparison.kt + src/declarations.kt + src/delegateProperty.kt + src/mathematicalLike.kt + src/other.kt +Exit code: OK + +==== STEP 1 ==== +Compiling files: + src/comparison.kt + src/delegateProperty.kt + src/mathematicalLike.kt + src/other.kt +Exit code: OK \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/comparison.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/comparison.kt new file mode 100644 index 00000000000..291a49175d8 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/comparison.kt @@ -0,0 +1,18 @@ +package foo.bar + +/*p:foo.bar*/fun testComparisons(a: /*p:foo.bar*/A, b: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int, c: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any, na: /*p:foo.bar*/A?) /*p:kotlin(Boolean)*/{ + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(equals)*/== /*p:kotlin(Any)*/c + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(equals)*/!= /*p:kotlin(Any)*/c + /*p:foo.bar(A) p:kotlin(Boolean)*/na /*c:foo.bar.A(equals)*/== /*p:foo.bar(A)*/a + /*p:foo.bar(A) p:kotlin(Boolean)*/na /*c:foo.bar.A(equals)*/== /*p:kotlin(Nothing)*/null + + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo)*/> /*p:kotlin(Int)*/b + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo)*/< /*p:kotlin(Int)*/b + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo)*/>= /*p:kotlin(Int)*/b + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo)*/<= /*p:kotlin(Int)*/b + + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo) p:foo.bar(compareTo)*/> /*p:kotlin(Any)*/c + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo) p:foo.bar(compareTo)*/< /*p:kotlin(Any)*/c + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo) p:foo.bar(compareTo)*/>= /*p:kotlin(Any)*/c + /*p:foo.bar(A) p:kotlin(Boolean)*/a /*c:foo.bar.A(compareTo) p:foo.bar(compareTo)*/<= /*p:kotlin(Any)*/c +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/comparison.kt.touch b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/comparison.kt.touch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/declarations.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/declarations.kt new file mode 100644 index 00000000000..51618a870d2 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/declarations.kt @@ -0,0 +1,35 @@ +package foo.bar + +/*p:foo.bar*/class A { + operator fun plus(a: /*c:foo.bar.A p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) = /*p:foo.bar(A)*/this + operator fun timesAssign(a: /*c:foo.bar.A p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?) {} + operator fun inc(): /*c:foo.bar.A p:foo.bar*/A = /*p:foo.bar(A)*/this + + operator fun get(i: /*c:foo.bar.A p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) = /*p:kotlin(Int)*/1 + operator fun contains(a: /*c:foo.bar.A p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int): /*c:foo.bar.A p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Boolean = /*p:kotlin(Boolean)*/false + operator fun invoke() {} + + operator fun compareTo(a: /*c:foo.bar.A p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) = /*p:kotlin(Int)*/0 + + operator fun component1() = /*p:foo.bar(A)*/this + + operator fun iterator() = /*p:foo.bar(A)*/this + operator fun next() = /*p:foo.bar(A)*/this +} + +/*p:foo.bar*/operator fun /*p:foo.bar*/A.minus(a: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) = /*p:foo.bar(A)*/this +/*p:foo.bar*/operator fun /*p:foo.bar*/A.divAssign(a: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?) {} +/*p:foo.bar*/operator fun /*p:foo.bar*/A.dec(): /*p:foo.bar*/A = /*p:foo.bar(A)*/this + +/*p:foo.bar*/operator fun /*p:foo.bar*/A.not() {} + +/*p:foo.bar*/operator fun /*p:foo.bar*/A.set(i: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int, v: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) {} +/*p:foo.bar*/operator fun /*p:foo.bar*/A.contains(a: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any): /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Boolean = /*p:kotlin(Boolean)*/true +/*p:foo.bar*/operator fun /*p:foo.bar*/A.invoke(i: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) {} + +/*p:foo.bar*/operator fun /*p:foo.bar*/A.compareTo(a: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any) = /*p:kotlin(Int)*/0 + +/*p:foo.bar*/operator fun /*p:foo.bar*/A.component2() = /*p:foo.bar(A)*/this + +/*p:foo.bar*/operator fun /*p:foo.bar*/A?.iterator() = /*p:foo.bar(A)*/this!! +/*p:foo.bar*/operator fun /*p:foo.bar*/A.hasNext(): /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Boolean = /*p:kotlin(Boolean)*/false diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/delegateProperty.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/delegateProperty.kt new file mode 100644 index 00000000000..47c1a4a9f94 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/delegateProperty.kt @@ -0,0 +1,30 @@ +package foo.bar + +/*p:kotlin.reflect(KProperty)*/import kotlin.reflect.KProperty + +/*p:foo.bar*/class D1 { + operator fun getValue(t: /*c:foo.bar.D1 p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?, p: /*c:foo.bar.D1 p:kotlin.reflect*/KProperty<*>) = /*p:kotlin(Int)*/1 +} + +/*p:foo.bar*/operator fun /*p:foo.bar*/D1.setValue(t: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?, p: /*p:kotlin.reflect*/KProperty<*>, v: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) {} + +/*p:foo.bar(D2)*/open class D2 { + operator fun setValue(t: /*c:foo.bar.D2 p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?, p: /*c:foo.bar.D2 p:kotlin.reflect*/KProperty<*>, v: /*c:foo.bar.D2 p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) {} +} + +/*p:foo.bar*/operator fun /*p:foo.bar*/D2.getValue(t: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?, p: /*p:kotlin.reflect*/KProperty<*>) = /*p:kotlin(Int)*/1 +/*p:foo.bar*/operator fun /*p:foo.bar*/D2.provideDelegate(p: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?, k: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any) = /*p:foo.bar(D2)*/this + +/*p:foo.bar*/class D3 : /*p:foo.bar*/D2() { + operator fun provideDelegate(p: /*c:foo.bar.D3 c:foo.bar.D2 p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any?, k: /*c:foo.bar.D3 c:foo.bar.D2 p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any) = /*p:foo.bar(D3)*/this +} + + +/*p:foo.bar*/val x1 by /*p:foo.bar c:foo.bar.D1(provideDelegate) p:foo.bar(provideDelegate) p:kotlin(provideDelegate) p:kotlin.annotation(provideDelegate) p:kotlin.collections(provideDelegate) p:kotlin.ranges(provideDelegate) p:kotlin.sequences(provideDelegate) p:kotlin.text(provideDelegate) p:kotlin.io(provideDelegate) p:kotlin.comparisons(provideDelegate) p:kotlin.js(provideDelegate) c:foo.bar.D1(getValue)*/D1() +/*p:foo.bar*/var y1 by /*p:foo.bar c:foo.bar.D1(provideDelegate) p:foo.bar(provideDelegate) p:kotlin(provideDelegate) p:kotlin.annotation(provideDelegate) p:kotlin.collections(provideDelegate) p:kotlin.ranges(provideDelegate) p:kotlin.sequences(provideDelegate) p:kotlin.text(provideDelegate) p:kotlin.io(provideDelegate) p:kotlin.comparisons(provideDelegate) p:kotlin.js(provideDelegate) c:foo.bar.D1(getValue) c:foo.bar.D1(setValue) p:foo.bar(setValue)*/D1() + +/*p:foo.bar*/val x2 by /*p:foo.bar c:foo.bar.D2(provideDelegate) p:foo.bar(provideDelegate) c:foo.bar.D2(getValue) p:foo.bar(getValue)*/D2() +/*p:foo.bar*/var y2 by /*p:foo.bar c:foo.bar.D2(provideDelegate) p:foo.bar(provideDelegate) c:foo.bar.D2(getValue) p:foo.bar(getValue) c:foo.bar.D2(setValue)*/D2() + +/*p:foo.bar*/val x3 by /*p:foo.bar c:foo.bar.D3(provideDelegate) c:foo.bar.D2(provideDelegate) c:foo.bar.D3(getValue) c:foo.bar.D2(getValue) p:foo.bar(getValue)*/D3() +/*p:foo.bar*/var y3 by /*p:foo.bar c:foo.bar.D3(provideDelegate) c:foo.bar.D2(provideDelegate) c:foo.bar.D3(getValue) c:foo.bar.D2(getValue) p:foo.bar(getValue) c:foo.bar.D3(setValue) c:foo.bar.D2(setValue)*/D3() diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/delegateProperty.kt.touch b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/delegateProperty.kt.touch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt new file mode 100644 index 00000000000..ac8000e4b87 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt @@ -0,0 +1,24 @@ +package foo.bar + +/*p:foo.bar*/fun testOperators(a: /*p:foo.bar*/A, b: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int) { + var d = /*p:foo.bar(A)*/a + + /*p:foo.bar(A)*/d/*c:foo.bar.A(inc)*/++ + /*c:foo.bar.A(inc) p:foo.bar(A)*/++/*p:foo.bar(A)*/d + /*p:foo.bar(A)*/d/*c:foo.bar.A(dec) p:foo.bar(dec)*/-- + /*c:foo.bar.A(dec) p:foo.bar(dec) p:foo.bar(A)*/--/*p:foo.bar(A)*/d + + /*p:foo.bar(A)*/a /*c:foo.bar.A(plus)*/+ /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/a /*c:foo.bar.A(minus) p:foo.bar(minus)*/- /*p:kotlin(Int)*/b + /*c:foo.bar.A(not) p:foo.bar(not)*/!/*p:foo.bar(A)*/a + + // for val + /*p:foo.bar(A)*/a /*c:foo.bar.A(timesAssign)*/*= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/a /*c:foo.bar.A(divAssign) p:foo.bar(divAssign)*//= /*p:kotlin(Int)*/b + + // for var + /*p:foo.bar(A)*/d /*c:foo.bar.A(plusAssign) p:foo.bar(plusAssign) p:kotlin(plusAssign) p:kotlin.annotation(plusAssign) p:kotlin.collections(plusAssign) p:kotlin.ranges(plusAssign) p:kotlin.sequences(plusAssign) p:kotlin.text(plusAssign) p:kotlin.io(plusAssign) p:kotlin.comparisons(plusAssign) p:kotlin.js(plusAssign) c:foo.bar.A(plus)*/+= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(minusAssign) p:foo.bar(minusAssign) p:kotlin(minusAssign) p:kotlin.annotation(minusAssign) p:kotlin.collections(minusAssign) p:kotlin.ranges(minusAssign) p:kotlin.sequences(minusAssign) p:kotlin.text(minusAssign) p:kotlin.io(minusAssign) p:kotlin.comparisons(minusAssign) p:kotlin.js(minusAssign) c:foo.bar.A(minus) p:foo.bar(minus)*/-= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(timesAssign) c:foo.bar.A(times) p:foo.bar(times) p:kotlin(times) p:kotlin.annotation(times) p:kotlin.collections(times) p:kotlin.ranges(times) p:kotlin.sequences(times) p:kotlin.text(times) p:kotlin.io(times) p:kotlin.comparisons(times) p:kotlin.js(times)*/*= /*p:kotlin(Int)*/b + /*p:foo.bar(A)*/d /*c:foo.bar.A(divAssign) p:foo.bar(divAssign) c:foo.bar.A(div) p:foo.bar(div) p:kotlin(div) p:kotlin.annotation(div) p:kotlin.collections(div) p:kotlin.ranges(div) p:kotlin.sequences(div) p:kotlin.text(div) p:kotlin.io(div) p:kotlin.comparisons(div) p:kotlin.js(div)*//= /*p:kotlin(Int)*/b +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt.touch b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/mathematicalLike.kt.touch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/other.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/other.kt new file mode 100644 index 00000000000..39217d0700e --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/other.kt @@ -0,0 +1,16 @@ +package foo.bar + +/*p:foo.bar*/fun testOther(a: /*p:foo.bar*/A, b: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int, c: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any, na: /*p:foo.bar*/A?) { + /*p:foo.bar(A) c:foo.bar.A(set) p:foo.bar(set)*/a[1] = /*p:foo.bar(A) c:foo.bar.A(get) p:kotlin(Int)*/a[2] + + /*p:kotlin(Int) p:kotlin(Boolean)*/b /*c:foo.bar.A(contains)*/in /*p:foo.bar(A)*/a + /*p:kotlin(String) p:kotlin(Boolean)*/"s" /*c:foo.bar.A(contains) p:foo.bar(contains)*/!in /*p:foo.bar(A)*/a + + /*c:foo.bar.A(invoke)*/a() + /*c:foo.bar.A(invoke) p:foo.bar p:foo.bar(invoke)*/a(1) + + val (/*c:foo.bar.A(component1)*/h, /*c:foo.bar.A(component2) p:foo.bar(component2)*/t) = /*p:foo.bar(A)*/a; + + for ((/*c:foo.bar.A(component1)*/f, /*c:foo.bar.A(component2) p:foo.bar(component2)*/s) in /*p:foo.bar(A) c:foo.bar.A(iterator) c:foo.bar.A(hasNext) p:foo.bar(hasNext) c:foo.bar.A(next)*/a); + for ((/*c:foo.bar.A(component1)*/f, /*c:foo.bar.A(component2) p:foo.bar(component2)*/s) in /*p:foo.bar(A) c:foo.bar.A(iterator) p:foo.bar(iterator) c:foo.bar.A(hasNext) p:foo.bar(hasNext) c:foo.bar.A(next)*/na); +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/other.kt.touch b/jps-plugin/testData/incremental/lookupTracker/jsKlib/conventions/other.kt.touch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/build.log b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/build.log new file mode 100644 index 00000000000..74d3d30ab54 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/build.log @@ -0,0 +1,7 @@ +==== INITIAL BUILD ==== +Compiling files: + src/genericType.kt + src/inferredType.kt + src/lambdaParameterType.kt + src/localInnerClassType.kt +Exit code: OK \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/genericType.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/genericType.kt new file mode 100644 index 00000000000..7eb6d235268 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/genericType.kt @@ -0,0 +1,15 @@ +package foo + +// From KT-10772 Problem with daemon on Idea 15.0.3 & 1-dev-25 + +/*p:foo*/fun identity(): (T) -> T = /*p:kotlin(Nothing) p:kotlin(Function1)*/null as (T) -> T + +/*p:foo*/fun compute(f: () -> T) { + val result = f() +} + +/*p:foo*/class Bar(val t: T) { + init { + val a = /*c:foo.Bar c:foo.Bar(T)*/t + } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt new file mode 100644 index 00000000000..c462d71231f --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/inferredType.kt @@ -0,0 +1,19 @@ +package foo + +/*p:foo(A)*/open class A +/*p:foo*/class B : /*p:foo*/A() + +/*p:foo*/fun getA() = /*p:foo*/A() +/*p:foo*/fun getB() = /*p:foo*/B() + +/*p:foo*/fun getListOfA() = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:kotlin.collections(List) p:foo(A)*/listOf(/*p:foo*/A()) +/*p:foo*/fun getListOfB() = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:kotlin.collections(List) p:foo(B)*/listOf(/*p:foo*/B()) + +/*p:foo*/fun useListOfA(a: /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/List) {} +/*p:foo*/fun useListOfB(b: /*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/List) {} + +/*p:foo*/fun testInferredType() { + /*p:foo*/useListOfA(/*p:foo p:kotlin.collections(List) p:foo(A)*/getListOfA()) + /*p:foo*/useListOfA(/*p:foo p:kotlin.collections(List) p:foo(B)*/getListOfB()) + /*p:foo*/useListOfB(/*p:foo p:kotlin.collections(List) p:foo(B)*/getListOfB()) +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/lambdaParameterType.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/lambdaParameterType.kt new file mode 100644 index 00000000000..f532b716c6d --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/lambdaParameterType.kt @@ -0,0 +1,11 @@ +package foo + +/*p:foo*/class C + +/*p:foo*/fun lambdaConsumer(fn: (/*p:foo*/A)->/*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Unit) {} +/*p:foo*/fun extensionConsumer(fn: /*p:foo*/A.()->/*p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Unit) {} + +/*p:foo*/fun testLambdaParameterType() { + /*p:foo*/lambdaConsumer /*p:kotlin(Function1) p:foo(A)*/{ /*p:foo(A)*/it } + /*p:foo*/extensionConsumer /*p:kotlin(Function1) p:foo(A)*/{ /*p:foo(A)*/this } +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/localInnerClassType.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/localInnerClassType.kt new file mode 100644 index 00000000000..c9e10d74f07 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/expressionType/localInnerClassType.kt @@ -0,0 +1,9 @@ +package foo + +/*p:foo*/fun bar() { + class A { + inner class B + } + + val b = A().B() +} \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/bar.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/bar.kt new file mode 100644 index 00000000000..ddac0faf273 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/bar.kt @@ -0,0 +1 @@ +package bar diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/build.log b/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/build.log new file mode 100644 index 00000000000..dc6965bc972 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/build.log @@ -0,0 +1,5 @@ +==== INITIAL BUILD ==== +Compiling files: + src/bar.kt(no lookups) + src/locals.kt +Exit code: OK \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/locals.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/locals.kt new file mode 100644 index 00000000000..8acbdc11b74 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/localDeclarations/locals.kt @@ -0,0 +1,49 @@ +package local.declarations + +import bar.* + +/*p:local.declarations*/fun f(p: /*p:local.declarations p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Any) /*p:kotlin(Int)*/{ + /*p:kotlin(Any) p:kotlin(String)*/p./*c:kotlin.Any*/toString() + + val a = /*p:kotlin(Int)*/1 + val b = /*p:kotlin(Int)*/a + fun localFun() = /*p:kotlin(Int)*/b + fun /*p:local.declarations p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int.localExtFun() = /*p:kotlin(Int)*/localFun() + + abstract class LocalI { + abstract var a: /*p:local.declarations p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Int + abstract fun foo() + } + + class LocalC : LocalI() { + override var a = /*p:kotlin(Int)*/1 + + override fun foo() {} + + var b = /*p:kotlin(String)*/"bbb" + + fun bar() = /*p:kotlin(Int)*/b + } + + val o = object { + val a = /*p:kotlin(String)*/"aaa" + fun foo(): LocalI = /*p:kotlin(Nothing)*/null as LocalI + } + + /*p:kotlin(Int)*/localFun() + /*p:kotlin(Int)*/1./*c:kotlin.Int c:kotlin.Number*/localExtFun() + + val c = LocalC() + /*p:kotlin(Int)*/c.a + /*p:kotlin(String)*/c.b + c.foo() + /*p:kotlin(Int)*/c.bar() + + val i: LocalI = c + /*p:kotlin(Int)*/i.a + i.foo() + + /*p:kotlin(String)*/o.a + val ii = o.foo() + /*p:kotlin(Int)*/ii.a +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/bar.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/bar.kt new file mode 100644 index 00000000000..d69fc70de05 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/bar.kt @@ -0,0 +1,7 @@ +package bar + +/*p:bar*/class A + +/*p:bar*/class B + +/*p:bar*/object O diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/baz.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/baz.kt new file mode 100644 index 00000000000..b6af61fb0db --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/baz.kt @@ -0,0 +1,7 @@ +package baz + +/*p:baz*/class A + +/*p:baz*/class B + +/*p:baz*/class C diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/build.log b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/build.log new file mode 100644 index 00000000000..6c6710fba2c --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/build.log @@ -0,0 +1,13 @@ +==== INITIAL BUILD ==== +Compiling files: + src/bar.kt + src/baz.kt + src/foo1.kt + src/foo2.kt +Exit code: OK + +==== STEP 1 ==== +Compiling files: + src/foo1.kt + src/foo2.kt +Exit code: OK \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo1.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo1.kt new file mode 100644 index 00000000000..edf2129aab9 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo1.kt @@ -0,0 +1,17 @@ +package foo + +import bar.* +/*p:baz(C)*/import baz.C + +/*p:foo*/val a = /*p:bar p:foo*/A() +/*p:foo*/var b: /*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/baz./*p:baz*/B = /*p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:foo p:bar p:baz(B)*/baz./*p:baz*/B() + +/*p:foo*/fun function(p: /*p:foo p:bar*/B): /*p:foo p:bar*/B /*p:kotlin(Nothing)*/{ + /*p:foo p:bar(A)*/a + /*p:kotlin(Nothing)*/return /*p:bar p:foo*/B() +} + +/*p:foo*/fun /*p:foo*/MyClass.extFunc(p: /**p:foo p:bar*//*p:foo p:bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Array, e: /*p:foo*/MyEnum, c: /**???*//*p:baz*/C): /*p:foo*/MyInterface /*p:kotlin(Nothing)*/{ + /*c:foo.MyClass p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar p:baz(B)*/b + /*p:kotlin(Nothing)*/return /*c:foo.MyClass p:foo p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js p:bar*/MyClass() +} diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo1.kt.touch b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo1.kt.touch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo2.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo2.kt new file mode 100644 index 00000000000..cf303aa5f0d --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo2.kt @@ -0,0 +1,7 @@ +package foo + +/*p:foo*/interface MyInterface + +/*p:foo*/class MyClass : /*p:foo*/MyInterface + +/*p:foo*/enum class MyEnum diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo2.kt.touch b/jps-plugin/testData/incremental/lookupTracker/jsKlib/packageDeclarations/foo2.kt.touch new file mode 100644 index 00000000000..e69de29bb2d diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/build.log b/jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/build.log new file mode 100644 index 00000000000..5aaa84efb3d --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/build.log @@ -0,0 +1,4 @@ +==== INITIAL BUILD ==== +Compiling files: + src/main.kt +Exit code: OK \ No newline at end of file diff --git a/jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/main.kt b/jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/main.kt new file mode 100644 index 00000000000..93fa07432e1 --- /dev/null +++ b/jps-plugin/testData/incremental/lookupTracker/jsKlib/simple/main.kt @@ -0,0 +1,6 @@ +package foo.bar + +/*p:foo.bar*/fun main(args: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Array) { + val f: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/Array + val s: /*p:foo.bar p:kotlin p:kotlin.annotation p:kotlin.collections p:kotlin.ranges p:kotlin.sequences p:kotlin.text p:kotlin.io p:kotlin.comparisons p:kotlin.js*/String +}