From 024eba915b47e2b2e6c192b64dcdc77199d4e2db Mon Sep 17 00:00:00 2001 From: Daniil Ovchinnikov Date: Fri, 28 Sep 2018 21:34:40 +0300 Subject: [PATCH] [groovy] extract multi-processor logic into separate class --- .../processors/GroovyResolverProcessor.java | 24 +++++++++++-------- .../resolve/processors/MultiProcessor.java | 23 ++++++++++++++++++ 2 files changed, 37 insertions(+), 10 deletions(-) create mode 100644 plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MultiProcessor.java diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java index 2ac7da630060..2b31e4b736aa 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/GroovyResolverProcessor.java @@ -29,17 +29,20 @@ import org.jetbrains.plugins.groovy.lang.resolve.GrResolverProcessor; import org.jetbrains.plugins.groovy.lang.resolve.MethodResolveResult; import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtilKt; +import java.util.Collection; import java.util.Collections; import java.util.EnumSet; import java.util.List; +import static com.intellij.util.containers.ContainerUtil.concat; +import static java.util.Collections.singletonList; import static org.jetbrains.plugins.groovy.lang.psi.util.PropertyUtilKt.isPropertyName; import static org.jetbrains.plugins.groovy.lang.resolve.ResolveUtilKt.singleOrValid; import static org.jetbrains.plugins.groovy.lang.resolve.ResolveUtilKt.valid; import static org.jetbrains.plugins.groovy.lang.resolve.processors.inference.InferenceKt.buildTopLevelArgumentTypes; import static org.jetbrains.plugins.groovy.lang.resolve.processors.inference.InferenceKt.getTopLevelTypeCached; -public abstract class GroovyResolverProcessor implements PsiScopeProcessor, ElementClassHint, NameHint, DynamicMembersHint { +public abstract class GroovyResolverProcessor implements PsiScopeProcessor, ElementClassHint, NameHint, DynamicMembersHint, MultiProcessor { protected final @NotNull GrReferenceExpression myRef; private final @NotNull String myName; @@ -82,7 +85,7 @@ public abstract class GroovyResolverProcessor implements PsiScopeProcessor, Elem } final Lazy receiverType = LazyKt.lazy(() -> getTopLevelQualifierType()); if (myIsLValue) { - return Collections.singletonList( + return singletonList( new PropertyProcessor(receiverType, myName, PropertyKind.SETTER, () -> myArgumentTypes.getValue(), myRef) ); } @@ -106,14 +109,8 @@ public abstract class GroovyResolverProcessor implements PsiScopeProcessor, Elem return myAcceptableKinds.contains(GroovyResolveKind.PROPERTY); } - public static List allProcessors(PsiScopeProcessor processor) { - if (processor instanceof GroovyResolverProcessor && !((GroovyResolverProcessor)processor).myStopExecutingMethods) { - List> accessors = ((GroovyResolverProcessor)processor).myAccessorProcessors; - if (!accessors.isEmpty()) { - return ContainerUtil.concat(Collections.singletonList(processor), accessors); - } - } - return Collections.singletonList(processor); + public static Iterable allProcessors(PsiScopeProcessor processor) { + return MultiProcessor.allProcessors(processor); } @Override @@ -207,6 +204,13 @@ public abstract class GroovyResolverProcessor implements PsiScopeProcessor, Elem return true; } + @NotNull + @Override + public Collection getProcessors() { + return myStopExecutingMethods ? singletonList(this) + : concat(singletonList(this), myAccessorProcessors); + } + @NotNull public abstract List getCandidates(); diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MultiProcessor.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MultiProcessor.java new file mode 100644 index 000000000000..f615a167f3b9 --- /dev/null +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/MultiProcessor.java @@ -0,0 +1,23 @@ +// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package org.jetbrains.plugins.groovy.lang.resolve.processors; + +import com.intellij.psi.scope.PsiScopeProcessor; +import org.jetbrains.annotations.NotNull; + +import java.util.Collection; + +import static java.util.Collections.singletonList; +import static org.jetbrains.annotations.ApiStatus.Experimental; + +@Experimental +public interface MultiProcessor extends PsiScopeProcessor { + + @NotNull + Collection getProcessors(); + + @NotNull + static Iterable allProcessors(@NotNull PsiScopeProcessor processor) { + return processor instanceof MultiProcessor ? ((MultiProcessor)processor).getProcessors() + : singletonList(processor); + } +}