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:
Natalia Selezneva
2020-07-24 17:04:03 +03:00
parent 7dd687cf00
commit 7b80be5c9d
4 changed files with 32 additions and 5 deletions
@@ -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(
@@ -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
@@ -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/");