Temporary workaround for gradle issue: wrong navigation for included plugin source code
https://github.com/gradle/gradle/issues/13783 ^KT-39522
This commit is contained in:
+11
-5
@@ -14,20 +14,19 @@ import com.intellij.openapi.vfs.VirtualFile
|
|||||||
import com.intellij.psi.JavaPsiFacade
|
import com.intellij.psi.JavaPsiFacade
|
||||||
import com.intellij.psi.PsiClass
|
import com.intellij.psi.PsiClass
|
||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
|
import com.intellij.psi.search.ProjectScope
|
||||||
import com.intellij.psi.stubs.StringStubIndexExtension
|
import com.intellij.psi.stubs.StringStubIndexExtension
|
||||||
import com.intellij.util.containers.ContainerUtil
|
import com.intellij.util.containers.ContainerUtil
|
||||||
import gnu.trove.THashSet
|
import gnu.trove.THashSet
|
||||||
import org.jetbrains.annotations.TestOnly
|
import org.jetbrains.annotations.TestOnly
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
||||||
import org.jetbrains.kotlin.idea.caches.project.BinaryModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.BinaryModuleInfo
|
||||||
|
import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getBinaryLibrariesModuleInfos
|
import org.jetbrains.kotlin.idea.caches.project.getBinaryLibrariesModuleInfos
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getLibrarySourcesModuleInfos
|
import org.jetbrains.kotlin.idea.caches.project.getLibrarySourcesModuleInfos
|
||||||
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
|
||||||
import org.jetbrains.kotlin.idea.decompiler.navigation.MemberMatching.*
|
import org.jetbrains.kotlin.idea.decompiler.navigation.MemberMatching.*
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
|
import org.jetbrains.kotlin.idea.stubindex.*
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelFunctionFqnNameIndex
|
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelPropertyFqnNameIndex
|
|
||||||
import org.jetbrains.kotlin.idea.stubindex.KotlinTopLevelTypeAliasFqNameIndex
|
|
||||||
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
|
||||||
import org.jetbrains.kotlin.idea.util.isExpectDeclaration
|
import org.jetbrains.kotlin.idea.util.isExpectDeclaration
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
@@ -63,7 +62,14 @@ object SourceNavigationHelper {
|
|||||||
val additionalScope = binaryModuleInfos.flatMap {
|
val additionalScope = binaryModuleInfos.flatMap {
|
||||||
it.associatedCommonLibraries()
|
it.associatedCommonLibraries()
|
||||||
}.mapNotNull { it.sourcesModuleInfo?.sourceScope() }.union()
|
}.mapNotNull { it.sourcesModuleInfo?.sourceScope() }.union()
|
||||||
primaryScope + additionalScope
|
|
||||||
|
if (binaryModuleInfos.any { it is ScriptDependenciesInfo }) {
|
||||||
|
// NOTE: this is a workaround for https://github.com/gradle/gradle/issues/13783:
|
||||||
|
// script configuration for *.gradle.kts files doesn't include sources for included plugins
|
||||||
|
primaryScope + additionalScope + ProjectScope.getContentScope(containingFile.project)
|
||||||
|
} else {
|
||||||
|
primaryScope + additionalScope
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NavigationKind.SOURCES_TO_CLASS_FILES -> getLibrarySourcesModuleInfos(
|
NavigationKind.SOURCES_TO_CLASS_FILES -> getLibrarySourcesModuleInfos(
|
||||||
|
|||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
object KObject {
|
||||||
|
fun foo() {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
// NOTE: test should fail when https://github.com/gradle/gradle/issues/13783 is fixed
|
||||||
|
// and the related workaround in SourceNavigationHelper is removed
|
||||||
|
// Then test can be removed
|
||||||
|
test.KObject.<caret>foo()
|
||||||
|
|
||||||
|
// DEPENDENCIES: classpath:module-classes
|
||||||
|
|
||||||
|
// REF: (in test.KObject).foo()
|
||||||
|
// FILE: test/custom.kt
|
||||||
Generated
+5
@@ -43,6 +43,11 @@ public class ScriptConfigurationNavigationTestGenerated extends AbstractScriptCo
|
|||||||
runTest("idea/testData/script/definition/navigation/customBaseClass/");
|
runTest("idea/testData/script/definition/navigation/customBaseClass/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("includedPluginProblem")
|
||||||
|
public void testIncludedPluginProblem() throws Exception {
|
||||||
|
runTest("idea/testData/script/definition/navigation/includedPluginProblem/");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("javaLib")
|
@TestMetadata("javaLib")
|
||||||
public void testJavaLib() throws Exception {
|
public void testJavaLib() throws Exception {
|
||||||
runTest("idea/testData/script/definition/navigation/javaLib/");
|
runTest("idea/testData/script/definition/navigation/javaLib/");
|
||||||
|
|||||||
Reference in New Issue
Block a user