From f5aa49b7e16b095a0facfd582111c8542760c685 Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Wed, 17 Jan 2018 14:56:32 +0300 Subject: [PATCH] [groovy] add TRANSFORMATION compile phase --- .../groovy/lang/psi/util/groovyClassImplUtil.kt | 12 ++++++++++++ .../groovy/lang/resolve/CompilationPhaseHint.java | 3 ++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/groovyClassImplUtil.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/groovyClassImplUtil.kt index 6953004b26b2..650afee2a3d8 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/groovyClassImplUtil.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/psi/util/groovyClassImplUtil.kt @@ -4,8 +4,10 @@ package org.jetbrains.plugins.groovy.lang.psi.util import com.intellij.psi.ResolveState import com.intellij.psi.scope.PsiScopeProcessor import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition +import org.jetbrains.plugins.groovy.lang.resolve.CollectClassMembersUtil.getFields import org.jetbrains.plugins.groovy.lang.resolve.CompilationPhaseHint import org.jetbrains.plugins.groovy.lang.resolve.CompilationPhaseHint.Phase.CONVERSION +import org.jetbrains.plugins.groovy.lang.resolve.CompilationPhaseHint.Phase.TRANSFORMATION import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil.processElement import org.jetbrains.plugins.groovy.lang.resolve.shouldProcessFields @@ -13,6 +15,7 @@ fun GrTypeDefinition.processPhase(processor: PsiScopeProcessor, state: ResolveSt val hint = requireNotNull(processor.getHint(CompilationPhaseHint.HINT_KEY)) return when (hint.beforePhase()) { CONVERSION -> processBeforeConversion(processor, state) + TRANSFORMATION -> processBeforeTransformations(processor, state) } } @@ -24,3 +27,12 @@ private fun GrTypeDefinition.processBeforeConversion(processor: PsiScopeProcesso } return true } + +private fun GrTypeDefinition.processBeforeTransformations(processor: PsiScopeProcessor, state: ResolveState): Boolean { + if (processor.shouldProcessFields()) { + for (codeField in getFields(this, false)) { // property nodes removed if field with same name exists + if (!processElement(processor, codeField, state)) return false + } + } + return true +} diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/CompilationPhaseHint.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/CompilationPhaseHint.java index 3735dd4d0b0b..54dcdeeafb58 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/CompilationPhaseHint.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/CompilationPhaseHint.java @@ -9,7 +9,8 @@ public interface CompilationPhaseHint { Key HINT_KEY = Key.create("groovy.compilation.phase"); enum Phase { - CONVERSION + CONVERSION, + TRANSFORMATION } @NotNull