From 1b6bccf0221d449b4f6a67eb6a33870508fadc0b Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Fri, 18 Nov 2016 17:03:54 +0300 Subject: [PATCH] IDEA-146198 Gradle: cannot resolve sourceSets --- .../gradle/service/resolve/GradleJavaContributor.kt | 12 +++++++++++- .../jetbrains/plugins/gradle/service/resolve/util.kt | 5 ++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleJavaContributor.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleJavaContributor.kt index 3f7e1fefd037..b042620b5c53 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleJavaContributor.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleJavaContributor.kt @@ -55,6 +55,8 @@ class GradleJavaContributor : GradleMethodContextContributor { groovyClosure().withAncestor(2, sourceSetClosure), groovyClosure().inMethod(or(psiMethod(GRADLE_API_SOURCE_SET, "java"), psiMethod(GRADLE_API_SOURCE_SET, "resources")))) + + val sourceDirectorySetClosureCandidate = groovyClosure().inMethod(psiMethodInClass(GRADLE_API_SOURCE_SET)) } override fun getDelegatesToInfo(closure: GrClosableBlock): DelegatesToInfo? { @@ -93,10 +95,18 @@ class GradleJavaContributor : GradleMethodContextContributor { if (!processor.execute(methodBuilder, state)) return false } } - if (place.parent is GrReferenceExpression || psiElement.withTreeParent(sourceSetsClosure).accepts(place)) { + + if (!psiElement.inside(sourceDirectorySetClosureCandidate).accepts(place) + && (place.parent is GrReferenceExpression || psiElement.withTreeParent(sourceSetsClosure).accepts(place))) { val variable = GrLightVariable(place.manager, name, GRADLE_API_SOURCE_SET, place) if (!processor.execute(variable, state)) return false } + + if (psiElement.inside(sourceDirectorySetClosureCandidate).accepts(place)) { + if (!GradleResolverUtil.processDeclarations(psiManager, processor, state, place, GRADLE_API_SOURCE_DIRECTORY_SET)) { + return false + } + } } return true diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/util.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/util.kt index ea6c0e897c4b..219caddcc565 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/util.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/util.kt @@ -24,6 +24,7 @@ import com.intellij.psi.scope.BaseScopeProcessor import com.intellij.psi.scope.ElementClassHint import com.intellij.psi.scope.NameHint.KEY import com.intellij.psi.scope.PsiScopeProcessor +import org.jetbrains.plugins.groovy.lang.psi.patterns.GroovyPatterns /** * @author Vladislav.Soroka @@ -67,4 +68,6 @@ class ComponentProcessor(val delegate: PsiScopeProcessor, val place: PsiElement, else { null } -} \ No newline at end of file +} + +fun psiMethodInClass(containingClass: String) = GroovyPatterns.psiMethod().definedInClass(containingClass) \ No newline at end of file