[gradle] extract GradleNonCodeMembersContributor#shouldSkipDeclarationsAndSetters

org.jetbrains.plugins.gradle.service.resolve.UtilKt.processDeclarations uses questionable algorithm and duplicates
declarations causing unexpected side-effects. Later #shouldSkipDeclarationsAndSetters should return true for any
qualified name, i.e. aforementioned #processDeclarations won't be used anymore.
This commit is contained in:
Daniil Ovchinnikov
2019-03-25 20:23:10 +03:00
parent dd3f5f0306
commit 2cdd8e485b
2 changed files with 14 additions and 5 deletions
@@ -96,7 +96,7 @@ class GradleNonCodeMembersContributor : NonCodeMembersContributor() {
extensionsData.findProperty(propCandidate)?.let(processVariable)
}
else {
if (aClass.qualifiedName !in GradleConventionsContributor.conventions) {
if (!shouldSkipDeclarationsAndSetters(aClass.qualifiedName)) {
processDeclarations(aClass, processor, state, place)
}
val propCandidate = place.references.singleOrNull()?.canonicalText ?: return
@@ -157,4 +157,9 @@ class GradleNonCodeMembersContributor : NonCodeMembersContributor() {
}
}
}
private fun shouldSkipDeclarationsAndSetters(qualifiedName: String?): Boolean {
return qualifiedName in GradleSetterAsMethodContributor.knownDecoratedClasses
|| qualifiedName in GradleConventionsContributor.conventions
}
}
@@ -17,10 +17,14 @@ import org.jetbrains.plugins.groovy.lang.resolve.shouldProcessMethods
class GradleSetterAsMethodContributor : NonCodeMembersContributor() {
override fun getClassNames(): Collection<String> = listOf(
GRADLE_API_PROJECT,
GRADLE_API_ARTIFACTS_MODULE_DEPENDENCY
)
companion object {
val knownDecoratedClasses = setOf(
GRADLE_API_PROJECT,
GRADLE_API_ARTIFACTS_MODULE_DEPENDENCY
)
}
override fun getClassNames(): Collection<String> = knownDecoratedClasses
override fun processDynamicElements(qualifierType: PsiType,
aClass: PsiClass?,