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.PsiClass
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.ProjectScope
import com.intellij.psi.stubs.StringStubIndexExtension
import com.intellij.util.containers.ContainerUtil
import gnu.trove.THashSet
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.descriptors.CallableDescriptor
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.getLibrarySourcesModuleInfos
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.decompiler.navigation.MemberMatching.*
import org.jetbrains.kotlin.idea.stubindex.KotlinFullClassNameIndex
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.stubindex.*
import org.jetbrains.kotlin.idea.util.ProjectRootsUtil
import org.jetbrains.kotlin.idea.util.isExpectDeclaration
import org.jetbrains.kotlin.lexer.KtTokens
@@ -63,7 +62,14 @@ object SourceNavigationHelper {
val additionalScope = binaryModuleInfos.flatMap {
it.associatedCommonLibraries()
}.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(
@@ -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/");
}
@TestMetadata("includedPluginProblem")
public void testIncludedPluginProblem() throws Exception {
runTest("idea/testData/script/definition/navigation/includedPluginProblem/");
}
@TestMetadata("javaLib")
public void testJavaLib() throws Exception {
runTest("idea/testData/script/definition/navigation/javaLib/");