diff --git a/plugins/kotlin/base/analysis-api-providers/src/org/jetbrains/kotlin/idea/base/analysisApiProviders/IdeKotlinDeclarationProviderFactory.kt b/plugins/kotlin/base/analysis-api-providers/src/org/jetbrains/kotlin/idea/base/analysisApiProviders/IdeKotlinDeclarationProviderFactory.kt index 89bb6bf5af23..d6cb27d0ef85 100644 --- a/plugins/kotlin/base/analysis-api-providers/src/org/jetbrains/kotlin/idea/base/analysisApiProviders/IdeKotlinDeclarationProviderFactory.kt +++ b/plugins/kotlin/base/analysis-api-providers/src/org/jetbrains/kotlin/idea/base/analysisApiProviders/IdeKotlinDeclarationProviderFactory.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.base.analysisApiProviders @@ -89,6 +89,10 @@ private class IdeKotlinDeclarationProvider( ) //TODO original LC has platformSourcesFirst() } + override fun findInternalFilesForFacade(facadeFqName: FqName): Collection { + return KotlinMultiFileClassPartIndex[facadeFqName.asString(), project, scope] + } + private fun getTypeAliasByClassId(classId: ClassId): KtTypeAlias? { return firstMatchingOrNull( stubKey = KotlinTopLevelTypeAliasFqNameIndex.KEY, @@ -103,15 +107,14 @@ private class IdeKotlinDeclarationProvider( override fun getTopLevelFunctions(callableId: CallableId): Collection = KotlinTopLevelFunctionFqnNameIndex.get(callableId.asTopLevelStringForIndexes(), project, scope) - override fun getTopLevelCallableFiles(callableId: CallableId): Collection { val callableIdString = callableId.asTopLevelStringForIndexes() return buildSet { - stubIndex.getContainingFilesIterator(KotlinTopLevelPropertyFqnNameIndex.key, callableIdString, project, scope).forEach {file -> + stubIndex.getContainingFilesIterator(KotlinTopLevelPropertyFqnNameIndex.key, callableIdString, project, scope).forEach { file -> psiManager.findFile(file)?.safeAs()?.let { add(it) } } - stubIndex.getContainingFilesIterator(KotlinTopLevelFunctionFqnNameIndex.key, callableIdString, project, scope).forEach {file -> + stubIndex.getContainingFilesIterator(KotlinTopLevelFunctionFqnNameIndex.key, callableIdString, project, scope).forEach { file -> psiManager.findFile(file)?.safeAs()?.let { add(it) } } } diff --git a/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/AbstractFirReferenceResolveInJavaTest.kt b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/AbstractFirReferenceResolveInJavaTest.kt new file mode 100644 index 000000000000..a93d24690720 --- /dev/null +++ b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/AbstractFirReferenceResolveInJavaTest.kt @@ -0,0 +1,17 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.fir.resolve + +import org.jetbrains.kotlin.idea.fir.invalidateCaches +import org.jetbrains.kotlin.idea.resolve.AbstractReferenceResolveInJavaTest +import org.jetbrains.kotlin.idea.test.runAll + +abstract class AbstractFirReferenceResolveInJavaTest : AbstractReferenceResolveInJavaTest() { + override fun isFirPlugin(): Boolean = true + + override fun tearDown() { + runAll( + { project.invalidateCaches() }, + { super.tearDown() }, + ) + } +} diff --git a/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/AbstractFirReferenceToCompiledKotlinResolveInJavaTest.kt b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/AbstractFirReferenceToCompiledKotlinResolveInJavaTest.kt new file mode 100644 index 000000000000..cd20280cb44c --- /dev/null +++ b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/AbstractFirReferenceToCompiledKotlinResolveInJavaTest.kt @@ -0,0 +1,17 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.fir.resolve + +import org.jetbrains.kotlin.idea.fir.invalidateCaches +import org.jetbrains.kotlin.idea.resolve.AbstractReferenceToCompiledKotlinResolveInJavaTest +import org.jetbrains.kotlin.idea.test.runAll + +abstract class AbstractFirReferenceToCompiledKotlinResolveInJavaTest : AbstractReferenceToCompiledKotlinResolveInJavaTest() { + override fun isFirPlugin(): Boolean = true + + override fun tearDown() { + runAll( + { project.invalidateCaches() }, + { super.tearDown() }, + ) + } +} diff --git a/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/FirReferenceResolveInJavaTestGenerated.java b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/FirReferenceResolveInJavaTestGenerated.java new file mode 100644 index 000000000000..aabb80323522 --- /dev/null +++ b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/FirReferenceResolveInJavaTestGenerated.java @@ -0,0 +1,146 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.idea.fir.resolve; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.idea.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.idea.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.jetbrains.kotlin.idea.base.test.TestRoot; +import org.junit.runner.RunWith; + +/** + * This class is generated by {@link org.jetbrains.kotlin.testGenerator.generator.TestGenerator}. + * DO NOT MODIFY MANUALLY. + */ +@SuppressWarnings("all") +@TestRoot("fir") +@TestDataPath("$CONTENT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public abstract class FirReferenceResolveInJavaTestGenerated extends AbstractFirReferenceResolveInJavaTest { + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("../idea/tests/testData/resolve/referenceInJava/binaryAndSource") + public static class BinaryAndSource extends AbstractFirReferenceResolveInJavaTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + @TestMetadata("Class.java") + public void testClass() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Class.java"); + } + + @TestMetadata("ClassObjectField.java") + public void testClassObjectField() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/ClassObjectField.java"); + } + + @TestMetadata("Constructor.java") + public void testConstructor() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Constructor.java"); + } + + @TestMetadata("EnumEntry.java") + public void testEnumEntry() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/EnumEntry.java"); + } + + @TestMetadata("Field.java") + public void testField() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Field.java"); + } + + @TestMetadata("FileFacade.java") + public void testFileFacade() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/FileFacade.java"); + } + + @TestMetadata("Getter.java") + public void testGetter() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Getter.java"); + } + + @TestMetadata("Method.java") + public void testMethod() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Method.java"); + } + + @TestMetadata("MethodOfDeeplyNested.java") + public void testMethodOfDeeplyNested() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MethodOfDeeplyNested.java"); + } + + @TestMetadata("MethodWithParameters.java") + public void testMethodWithParameters() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MethodWithParameters.java"); + } + + @TestMetadata("MultifileFacade1.java") + public void testMultifileFacade1() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java"); + } + + @TestMetadata("MultifileFacade2.java") + public void testMultifileFacade2() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java"); + } + + @TestMetadata("ObjectInstance.java") + public void testObjectInstance() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/ObjectInstance.java"); + } + + @TestMetadata("PlatformStaticFun.java") + public void testPlatformStaticFun() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/PlatformStaticFun.java"); + } + + @TestMetadata("SingleFileMultifileFacade.java") + public void testSingleFileMultifileFacade() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java"); + } + + @TestMetadata("TopLevelFunction.java") + public void testTopLevelFunction() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java"); + } + } + + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("../idea/tests/testData/resolve/referenceInJava/sourceOnly") + public static class SourceOnly extends AbstractFirReferenceResolveInJavaTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + @TestMetadata("AnnotationParameterReference.java") + public void testAnnotationParameterReference() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/sourceOnly/AnnotationParameterReference.java"); + } + + @TestMetadata("AutoGeneratedOverloads.java") + public void testAutoGeneratedOverloads() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/sourceOnly/AutoGeneratedOverloads.java"); + } + + @TestMetadata("ClassObjectStaticField.java") + public void testClassObjectStaticField() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/sourceOnly/ClassObjectStaticField.java"); + } + + @TestMetadata("DelegatedMethodFromInterfaceNoImpl.java") + public void testDelegatedMethodFromInterfaceNoImpl() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/sourceOnly/DelegatedMethodFromInterfaceNoImpl.java"); + } + + @TestMetadata("DelegatedMethodFromInterfaceWithImpl.java") + public void testDelegatedMethodFromInterfaceWithImpl() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/sourceOnly/DelegatedMethodFromInterfaceWithImpl.java"); + } + + @TestMetadata("KotlinCollection.java") + public void testKotlinCollection() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/sourceOnly/KotlinCollection.java"); + } + } +} diff --git a/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/FirReferenceToCompiledKotlinResolveInJavaTestGenerated.java b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/FirReferenceToCompiledKotlinResolveInJavaTestGenerated.java new file mode 100644 index 000000000000..577c318a1554 --- /dev/null +++ b/plugins/kotlin/fir/test/org/jetbrains/kotlin/idea/fir/resolve/FirReferenceToCompiledKotlinResolveInJavaTestGenerated.java @@ -0,0 +1,105 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. + +package org.jetbrains.kotlin.idea.fir.resolve; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.idea.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.idea.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.jetbrains.kotlin.idea.base.test.TestRoot; +import org.junit.runner.RunWith; + +/** + * This class is generated by {@link org.jetbrains.kotlin.testGenerator.generator.TestGenerator}. + * DO NOT MODIFY MANUALLY. + */ +@SuppressWarnings("all") +@TestRoot("fir") +@TestDataPath("$CONTENT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +@TestMetadata("../idea/tests/testData/resolve/referenceInJava/binaryAndSource") +public class FirReferenceToCompiledKotlinResolveInJavaTestGenerated extends AbstractFirReferenceToCompiledKotlinResolveInJavaTest { + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + @TestMetadata("Class.java") + public void testClass() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Class.java"); + } + + @TestMetadata("ClassObjectField.java") + public void testClassObjectField() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/ClassObjectField.java"); + } + + @TestMetadata("Constructor.java") + public void testConstructor() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Constructor.java"); + } + + @TestMetadata("EnumEntry.java") + public void testEnumEntry() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/EnumEntry.java"); + } + + @TestMetadata("Field.java") + public void testField() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Field.java"); + } + + @TestMetadata("FileFacade.java") + public void testFileFacade() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/FileFacade.java"); + } + + @TestMetadata("Getter.java") + public void testGetter() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Getter.java"); + } + + @TestMetadata("Method.java") + public void testMethod() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/Method.java"); + } + + @TestMetadata("MethodOfDeeplyNested.java") + public void testMethodOfDeeplyNested() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MethodOfDeeplyNested.java"); + } + + @TestMetadata("MethodWithParameters.java") + public void testMethodWithParameters() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MethodWithParameters.java"); + } + + @TestMetadata("MultifileFacade1.java") + public void testMultifileFacade1() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java"); + } + + @TestMetadata("MultifileFacade2.java") + public void testMultifileFacade2() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java"); + } + + @TestMetadata("ObjectInstance.java") + public void testObjectInstance() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/ObjectInstance.java"); + } + + @TestMetadata("PlatformStaticFun.java") + public void testPlatformStaticFun() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/PlatformStaticFun.java"); + } + + @TestMetadata("SingleFileMultifileFacade.java") + public void testSingleFileMultifileFacade() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java"); + } + + @TestMetadata("TopLevelFunction.java") + public void testTopLevelFunction() throws Exception { + runTest("../idea/tests/testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java"); + } +} diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/AbstractIdeCompiledLightClassesByFqNameTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/AbstractIdeCompiledLightClassesByFqNameTest.kt index 46085a0965bc..a052e0822db4 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/AbstractIdeCompiledLightClassesByFqNameTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/AbstractIdeCompiledLightClassesByFqNameTest.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.asJava.classes import com.intellij.openapi.roots.ModuleRootModificationUtil @@ -51,9 +51,9 @@ abstract class AbstractIdeCompiledLightClassesByFqNameTest : KotlinDaemonAnalyze fun doTest(testDataPath: String) { val testDataFile = File(testDataPath) - val expectedFile = KotlinTestUtils.replaceExtension(testDataFile, "compiled.java").let { - if (it.exists()) it else KotlinTestUtils.replaceExtension(testDataFile, "java") - } + val expectedFile = KotlinTestUtils.replaceExtension(testDataFile, "compiled.java").takeIf(File::exists) + ?: KotlinTestUtils.replaceExtension(testDataFile, "lib.java").takeIf(File::exists) + ?: KotlinTestUtils.replaceExtension(testDataFile, "java") withCustomCompilerOptions(testDataFile.readText(), project, module) { testLightClass( diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeCompiledLightClassesByFqNameTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeCompiledLightClassesByFqNameTestGenerated.java index dc2e91822926..f16786b37b7c 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeCompiledLightClassesByFqNameTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeCompiledLightClassesByFqNameTestGenerated.java @@ -62,6 +62,11 @@ public abstract class IdeCompiledLightClassesByFqNameTestGenerated extends Abstr runTest(compilerTestData("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt")); } + @TestMetadata("InternalFacadeClass.kt") + public void testInternalFacadeClass() throws Exception { + runTest(compilerTestData("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt")); + } + @TestMetadata("MultiFile.kt") public void testMultiFile() throws Exception { runTest(compilerTestData("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/MultiFile.kt")); diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeLightClassesByFqNameTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeLightClassesByFqNameTestGenerated.java index 7d1cf0a6d723..b69ed7d6dc8f 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeLightClassesByFqNameTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/asJava/classes/IdeLightClassesByFqNameTestGenerated.java @@ -186,6 +186,11 @@ public abstract class IdeLightClassesByFqNameTestGenerated extends AbstractIdeLi runTest(compilerTestData("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/AllPrivate.kt")); } + @TestMetadata("InternalFacadeClass.kt") + public void testInternalFacadeClass() throws Exception { + runTest(compilerTestData("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/InternalFacadeClass.kt")); + } + @TestMetadata("MultiFile.kt") public void testMultiFile() throws Exception { runTest(compilerTestData("compiler/testData/asJava/lightClasses/lightClassByFqName/facades/MultiFile.kt")); diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveInJavaTest.kt b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveInJavaTest.kt index 989a798f1f44..bcf3e0f82f14 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveInJavaTest.kt +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/AbstractReferenceResolveInJavaTest.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.idea.resolve @@ -13,20 +13,23 @@ import org.jetbrains.kotlin.idea.test.runAll import org.jetbrains.kotlin.psi.KtDeclaration import org.junit.Assert -private val FILE_WITH_KOTLIN_CODE = IDEA_TEST_DATA_DIR.resolve("resolve/referenceInJava/dependency/dependencies.kt") +private val DIRECTORY_WITH_KOTLIN_CODE = IDEA_TEST_DATA_DIR.resolve("resolve/referenceInJava/dependency") abstract class AbstractReferenceResolveInJavaTest : AbstractReferenceResolveTest() { override fun doTest(path: String) { val fileName = fileName() assert(fileName.endsWith(".java")) { fileName } - myFixture.configureByText("dependencies.kt", FileUtil.loadFile(FILE_WITH_KOTLIN_CODE, true)) + DIRECTORY_WITH_KOTLIN_CODE.listFiles()?.forEach { + myFixture.configureByText(it.name, FileUtil.loadFile(it, true)) + } + myFixture.configureByFile(fileName) performChecks() } } abstract class AbstractReferenceToCompiledKotlinResolveInJavaTest : AbstractReferenceResolveTest() { - private val mockLibraryFacility = MockLibraryFacility(FILE_WITH_KOTLIN_CODE) + private val mockLibraryFacility = MockLibraryFacility(DIRECTORY_WITH_KOTLIN_CODE) override fun doTest(path: String) { myFixture.configureByFile(fileName()) diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java index d2c690fa5cda..3aed529ddd18 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceResolveInJavaTestGenerated.java @@ -75,6 +75,16 @@ public abstract class ReferenceResolveInJavaTestGenerated extends AbstractRefere runTest("testData/resolve/referenceInJava/binaryAndSource/MethodWithParameters.java"); } + @TestMetadata("MultifileFacade1.java") + public void testMultifileFacade1() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java"); + } + + @TestMetadata("MultifileFacade2.java") + public void testMultifileFacade2() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java"); + } + @TestMetadata("ObjectInstance.java") public void testObjectInstance() throws Exception { runTest("testData/resolve/referenceInJava/binaryAndSource/ObjectInstance.java"); @@ -84,6 +94,16 @@ public abstract class ReferenceResolveInJavaTestGenerated extends AbstractRefere public void testPlatformStaticFun() throws Exception { runTest("testData/resolve/referenceInJava/binaryAndSource/PlatformStaticFun.java"); } + + @TestMetadata("SingleFileMultifileFacade.java") + public void testSingleFileMultifileFacade() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java"); + } + + @TestMetadata("TopLevelFunction.java") + public void testTopLevelFunction() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java"); + } } @RunWith(JUnit3RunnerWithInners.class) @@ -117,5 +137,10 @@ public abstract class ReferenceResolveInJavaTestGenerated extends AbstractRefere public void testDelegatedMethodFromInterfaceWithImpl() throws Exception { runTest("testData/resolve/referenceInJava/sourceOnly/DelegatedMethodFromInterfaceWithImpl.java"); } + + @TestMetadata("KotlinCollection.java") + public void testKotlinCollection() throws Exception { + runTest("testData/resolve/referenceInJava/sourceOnly/KotlinCollection.java"); + } } } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceToCompiledKotlinResolveInJavaTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceToCompiledKotlinResolveInJavaTestGenerated.java index 63fa1df733e8..1ca2c6631475 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceToCompiledKotlinResolveInJavaTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/resolve/ReferenceToCompiledKotlinResolveInJavaTestGenerated.java @@ -73,6 +73,16 @@ public class ReferenceToCompiledKotlinResolveInJavaTestGenerated extends Abstrac runTest("testData/resolve/referenceInJava/binaryAndSource/MethodWithParameters.java"); } + @TestMetadata("MultifileFacade1.java") + public void testMultifileFacade1() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java"); + } + + @TestMetadata("MultifileFacade2.java") + public void testMultifileFacade2() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java"); + } + @TestMetadata("ObjectInstance.java") public void testObjectInstance() throws Exception { runTest("testData/resolve/referenceInJava/binaryAndSource/ObjectInstance.java"); @@ -82,4 +92,14 @@ public class ReferenceToCompiledKotlinResolveInJavaTestGenerated extends Abstrac public void testPlatformStaticFun() throws Exception { runTest("testData/resolve/referenceInJava/binaryAndSource/PlatformStaticFun.java"); } + + @TestMetadata("SingleFileMultifileFacade.java") + public void testSingleFileMultifileFacade() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java"); + } + + @TestMetadata("TopLevelFunction.java") + public void testTopLevelFunction() throws Exception { + runTest("testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java"); + } } diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java new file mode 100644 index 000000000000..f79d2b81acf0 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade1.java @@ -0,0 +1,8 @@ +public class MultifileFacade1 { + void t() { + two.MultiFacade.topLevelFunction1(); + } +} + +// REF: (two).topLevelFunction1() +// CLS_REF: (two).topLevelFunction1() diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java new file mode 100644 index 000000000000..17e6b983ca30 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/MultifileFacade2.java @@ -0,0 +1,8 @@ +public class MultifileFacade2 { + void t() { + two.MultiFacade.topLevelFunction2(); + } +} + +// REF: (two).topLevelFunction2() +// CLS_REF: (two).topLevelFunction2() diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java new file mode 100644 index 000000000000..4e12db8ab702 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/SingleFileMultifileFacade.java @@ -0,0 +1,11 @@ +import one.SingleFacade; + +public class SingleFileMultifileFacade { + void t() { + SingleFacade.topLevelFunction(); + } +} + + +// REF: (one).topLevelFunction() +// CLS_REF: (one).topLevelFunction() \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java new file mode 100644 index 000000000000..fa88ce315c44 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/binaryAndSource/TopLevelFunction.java @@ -0,0 +1,8 @@ +public class TopLevelFunction { + public static void foo() { + k.DependenciesKt.withJvmOverloads(4); + } +} + +// REF: (k).withJvmOverloads(Int, Boolean, String) +// CLS_REF: (k).withJvmOverloads(Int, Boolean, String) \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/MultifileClassFacade_First.kt b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/MultifileClassFacade_First.kt new file mode 100644 index 000000000000..475295bdb01b --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/MultifileClassFacade_First.kt @@ -0,0 +1,6 @@ +@file:[JvmMultifileClass JvmName("MultiFacade")] +package two + +fun topLevelFunction1() { + +} diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/MultifileClassFacade_Second.kt b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/MultifileClassFacade_Second.kt new file mode 100644 index 000000000000..2e77d10a97e1 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/MultifileClassFacade_Second.kt @@ -0,0 +1,6 @@ +@file:[JvmMultifileClass JvmName("MultiFacade")] +package two + +fun topLevelFunction2() { + +} diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/SingleFileMultifileClass.kt b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/SingleFileMultifileClass.kt new file mode 100644 index 000000000000..051f5f6e5e49 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/dependency/SingleFileMultifileClass.kt @@ -0,0 +1,6 @@ +@file:[JvmMultifileClass JvmName("SingleFacade")] +package one + +fun topLevelFunction() { + +} diff --git a/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/sourceOnly/KotlinCollection.java b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/sourceOnly/KotlinCollection.java new file mode 100644 index 000000000000..aa1e8e169eec --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/resolve/referenceInJava/sourceOnly/KotlinCollection.java @@ -0,0 +1,9 @@ +import kotlin.collections.CollectionsKt; + +public class KotlinReferrer { + public void refer() { + CollectionsKt.arrayListOf(1); + } +} + +// REF: (kotlin.collections).arrayListOf(vararg T) \ No newline at end of file diff --git a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/FirGenerateTests.kt b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/FirGenerateTests.kt index 6886dcedfc0d..2f7d3ad1575f 100644 --- a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/FirGenerateTests.kt +++ b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/FirGenerateTests.kt @@ -1,4 +1,4 @@ -// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package org.jetbrains.kotlin.fir.testGenerator @@ -23,7 +23,9 @@ import org.jetbrains.kotlin.idea.fir.low.level.api.AbstractFirLibraryModuleDecla import org.jetbrains.kotlin.idea.fir.parameterInfo.AbstractFirParameterInfoTest import org.jetbrains.kotlin.idea.fir.quickfix.AbstractHighLevelQuickFixMultiFileTest import org.jetbrains.kotlin.idea.fir.quickfix.AbstractHighLevelQuickFixTest +import org.jetbrains.kotlin.idea.fir.resolve.AbstractFirReferenceResolveInJavaTest import org.jetbrains.kotlin.idea.fir.resolve.AbstractFirReferenceResolveTest +import org.jetbrains.kotlin.idea.fir.resolve.AbstractFirReferenceToCompiledKotlinResolveInJavaTest import org.jetbrains.kotlin.idea.fir.search.AbstractHLImplementationSearcherTest import org.jetbrains.kotlin.idea.fir.shortenRefs.AbstractFirShortenRefsTest import org.jetbrains.kotlin.idea.fir.uast.* @@ -31,6 +33,7 @@ import org.jetbrains.kotlin.idea.k2.refactoring.rename.AbstractFirRenameTest import org.jetbrains.kotlin.testGenerator.generator.TestGenerator import org.jetbrains.kotlin.testGenerator.model.* import org.jetbrains.kotlin.testGenerator.model.Patterns.DIRECTORY +import org.jetbrains.kotlin.testGenerator.model.Patterns.JAVA import org.jetbrains.kotlin.testGenerator.model.Patterns.KT_OR_KTS_WITHOUT_DOTS import org.jetbrains.kotlin.testGenerator.model.Patterns.KT_WITHOUT_DOTS import org.jetbrains.kotlin.testGenerator.model.Patterns.KT_WITHOUT_DOT_AND_FIR_PREFIX @@ -79,6 +82,14 @@ private fun assembleWorkspace(): TWorkspace = workspace { model("resolve/references", pattern = KT_WITHOUT_DOTS) } + testClass { + model("resolve/referenceInJava/binaryAndSource", pattern = JAVA) + model("resolve/referenceInJava/sourceOnly", pattern = JAVA) + } + + testClass { + model("resolve/referenceInJava/binaryAndSource", pattern = JAVA) + } testClass { val pattern = Patterns.forRegex("^([\\w\\-_]+)\\.kt$") @@ -226,7 +237,7 @@ private fun assembleWorkspace(): TWorkspace = workspace { testClass { model("search/implementations", pattern = KT_WITHOUT_DOTS) } - + testClass { model("quickDoc", pattern = Patterns.forRegex("""^([^_]+)\.(kt|java)$""")) }