diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectContributor.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectContributor.kt index 16a1e1835df2..12fef0241940 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectContributor.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/resolve/GradleProjectContributor.kt @@ -18,14 +18,34 @@ package org.jetbrains.plugins.gradle.service.resolve import com.intellij.psi.PsiElement import com.intellij.psi.ResolveState import com.intellij.psi.scope.PsiScopeProcessor +import groovy.lang.Closure +import org.jetbrains.plugins.gradle.service.resolve.GradleCommonClassNames.GRADLE_API_FILE_COPY_SPEC import org.jetbrains.plugins.gradle.service.resolve.GradleCommonClassNames.GRADLE_API_PROJECT +import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock import org.jetbrains.plugins.groovy.lang.psi.impl.GroovyPsiManager +import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil +import org.jetbrains.plugins.groovy.lang.psi.patterns.groovyClosure +import org.jetbrains.plugins.groovy.lang.psi.patterns.psiMethod +import org.jetbrains.plugins.groovy.lang.resolve.delegatesTo.DelegatesToInfo /** * @author Vladislav.Soroka * @since 11/10/2016 */ class GradleProjectContributor : GradleMethodContextContributor { + + companion object { + val copySpecClosure = groovyClosure().inMethod(psiMethod(GRADLE_API_PROJECT, "copy", "copySpec")) + + } + + override fun getDelegatesToInfo(closure: GrClosableBlock): DelegatesToInfo? { + if (copySpecClosure.accepts(closure)) { + return DelegatesToInfo(TypesUtil.createType(GRADLE_API_FILE_COPY_SPEC, closure), Closure.DELEGATE_FIRST) + } + return null + } + override fun process(methodCallInfo: List, processor: PsiScopeProcessor, state: ResolveState, place: PsiElement): Boolean { val psiManager = GroovyPsiManager.getInstance(place.project) return GradleResolverUtil.processDeclarations(psiManager, processor, state, place, GRADLE_API_PROJECT)