diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt index b6b55b017a3..cdaf062fa1b 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/fileClasses/JvmFileClassUtil.kt @@ -16,6 +16,8 @@ package org.jetbrains.kotlin.fileClasses +import com.intellij.psi.util.CachedValueProvider +import com.intellij.psi.util.CachedValuesManager import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils @@ -103,3 +105,13 @@ public object JvmFileClassUtil { } public class ParsedJmvFileClassAnnotations(public val name: String, public val multipleFiles: Boolean) + +public val JetFile.javaFileFacadeFqName: FqName + get() { + return CachedValuesManager.getCachedValue(this) { + val facadeFqName = + if (isCompiled) packageFqName.child(Name.identifier(virtualFile.nameWithoutExtension)) + else JvmFileClassUtil.getFileClassInfoNoResolve(this).facadeClassFqName + CachedValueProvider.Result(facadeFqName, this) + } + } \ No newline at end of file diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt index 583f1b8d816..2b85c96995d 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/LightClassUtil.kt @@ -31,7 +31,7 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.PathUtil import com.intellij.util.SmartList import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil +import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.load.java.JvmAbi import org.jetbrains.kotlin.load.kotlin.PackageClassUtils import org.jetbrains.kotlin.name.FqName @@ -268,7 +268,7 @@ public object LightClassUtil { if (parent is JetFile) { // top-level declaration val fqName = if (useNewPackageParts) - JvmFileClassUtil.getFileClassInfoNoResolve(parent).facadeClassFqName + parent.javaFileFacadeFqName else PackageClassUtils.getPackageClassFqName(parent.packageFqName) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/JetShortNamesCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/JetShortNamesCache.kt index b5fe6afab1f..88e92f3cc24 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/JetShortNamesCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/JetShortNamesCache.kt @@ -26,7 +26,11 @@ import com.intellij.util.Processor import com.intellij.util.containers.ContainerUtil import com.intellij.util.containers.HashSet import org.jetbrains.kotlin.asJava.JavaElementFinder -import org.jetbrains.kotlin.idea.stubindex.* +import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName +import org.jetbrains.kotlin.idea.stubindex.JetClassShortNameIndex +import org.jetbrains.kotlin.idea.stubindex.JetFileFacadeShortNameIndex +import org.jetbrains.kotlin.idea.stubindex.JetFunctionShortNameIndex +import org.jetbrains.kotlin.idea.stubindex.PackageIndexUtil import org.jetbrains.kotlin.name.FqName import java.util.* diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt index 3e254596037..28ab3e6054c 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IDELightClassGenerationSupport.kt @@ -37,10 +37,10 @@ import com.intellij.psi.util.PsiTreeUtil import com.intellij.util.cls.ClsFormatException import org.jetbrains.kotlin.asJava.* import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.idea.decompiler.navigation.JetSourceNavigationHelper import org.jetbrains.kotlin.idea.stubindex.* import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope.kotlinSourceAndClassFiles -import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope.kotlinSourcesAndLibraries import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.load.kotlin.PackageClassUtils diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/IndexUtils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/IndexUtils.kt index 96c74ff56a3..0efe7fc4519 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/IndexUtils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/stubindex/IndexUtils.kt @@ -17,12 +17,6 @@ package org.jetbrains.kotlin.idea.stubindex import com.intellij.psi.stubs.IndexSink -import com.intellij.psi.util.CachedValueProvider -import com.intellij.psi.util.CachedValuesManager -import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo -import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.stubs.KotlinCallableStubBase import org.jetbrains.kotlin.util.aliasImportMap @@ -74,13 +68,3 @@ private fun JetTypeElement.index(declarat else -> error("Unsupported type: $this") } } - -public val JetFile.javaFileFacadeFqName: FqName - get() { - return CachedValuesManager.getCachedValue(this) { - val facadeFqName = - if (isCompiled) packageFqName.child(Name.identifier(virtualFile.nameWithoutExtension)) - else JvmFileClassUtil.getFileClassInfoNoResolve(this).facadeClassFqName - CachedValueProvider.Result(facadeFqName, this) - } - } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt index 385794f7dc5..ff6f1c009f1 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/rename/RenameKotlinFileProcessor.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.idea.refactoring.rename import com.intellij.openapi.fileTypes.FileTypeManager -import com.intellij.openapi.util.io.FileUtil import com.intellij.psi.JavaPsiFacade import com.intellij.psi.PsiElement import com.intellij.psi.search.SearchScope @@ -46,7 +45,7 @@ class RenameKotlinFileProcessor() : RenamePsiFileProcessor() { val project = jetFile.project val facadeClass = JavaPsiFacade.getInstance(project).findClass(facadeFqName.asString(), project.allScope()) if (facadeClass != null) { - allRenames[facadeClass] = PackagePartClassUtils.getPartClassName(FileUtil.getNameWithoutExtension(newName)) + allRenames[facadeClass] = PackagePartClassUtils.getFilePartShortName(newName) } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt b/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt index 6425db3de0c..a1c568c7b24 100644 --- a/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt @@ -25,7 +25,7 @@ import com.intellij.openapi.util.Ref import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil +import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.idea.MainFunctionDetector import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.project.ProjectStructureUtil @@ -99,7 +99,7 @@ public class KotlinRunConfigurationProducer : RunConfigurationProducer null - is JetFile -> JvmFileClassUtil.getFileClassInfoNoResolve(container).facadeClassFqName + is JetFile -> container.javaFileFacadeFqName is JetClassOrObject -> { if (container is JetObjectDeclaration && container.isCompanion()) { val containerClass = container.getParentOfType(true) diff --git a/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.0.kt b/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.0.kt new file mode 100644 index 00000000000..cd5a23a8f4c --- /dev/null +++ b/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.0.kt @@ -0,0 +1,8 @@ +// PSI_ELEMENT: org.jetbrains.kotlin.psi.JetNamedFunction +// OPTIONS: usages +@file:[JvmName("RequestProcessor") JvmMultifileClass] + +package server + +fun processRequest() = "foo" + diff --git a/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.1.java b/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.1.java new file mode 100644 index 00000000000..faedf5379a8 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.1.java @@ -0,0 +1,11 @@ +package client; + +import server.RequestProcessor; + +class JClient { + String s = RequestProcessor.processRequest(); + + String sendRequest() { + return RequestProcessor.processRequest(); + } +} \ No newline at end of file diff --git a/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.results.txt b/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.results.txt new file mode 100644 index 00000000000..a634df2c7d0 --- /dev/null +++ b/idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.results.txt @@ -0,0 +1,2 @@ +Unclassified usage (6: 33) String s = RequestProcessor.processRequest(); +Unclassified usage (9: 33) return RequestProcessor.processRequest(); diff --git a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java index 7b180e8b789..a5889561747 100644 --- a/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/findUsages/JetFindUsagesTestGenerated.java @@ -606,6 +606,12 @@ public class JetFindUsagesTestGenerated extends AbstractJetFindUsagesTest { doTest(fileName); } + @TestMetadata("kotlinTopLevelMethodUsagesMultifile.0.kt") + public void testKotlinTopLevelMethodUsagesMultifile() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesMultifile.0.kt"); + doTest(fileName); + } + @TestMetadata("kotlinTopLevelMethodUsagesNoImport.0.kt") public void testKotlinTopLevelMethodUsagesNoImport() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/findUsages/kotlin/findFunctionUsages/kotlinTopLevelMethodUsagesNoImport.0.kt");