mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[groovy] extract multi-processor logic into separate class
This commit is contained in:
+14
-10
@@ -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<PsiType> 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<PsiScopeProcessor> allProcessors(PsiScopeProcessor processor) {
|
||||
if (processor instanceof GroovyResolverProcessor && !((GroovyResolverProcessor)processor).myStopExecutingMethods) {
|
||||
List<GrResolverProcessor<? extends GroovyResolveResult>> accessors = ((GroovyResolverProcessor)processor).myAccessorProcessors;
|
||||
if (!accessors.isEmpty()) {
|
||||
return ContainerUtil.concat(Collections.singletonList(processor), accessors);
|
||||
}
|
||||
}
|
||||
return Collections.singletonList(processor);
|
||||
public static Iterable<? extends PsiScopeProcessor> 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<? extends PsiScopeProcessor> getProcessors() {
|
||||
return myStopExecutingMethods ? singletonList(this)
|
||||
: concat(singletonList(this), myAccessorProcessors);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public abstract List<GroovyResolveResult> getCandidates();
|
||||
|
||||
|
||||
+23
@@ -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<? extends PsiScopeProcessor> getProcessors();
|
||||
|
||||
@NotNull
|
||||
static Iterable<? extends PsiScopeProcessor> allProcessors(@NotNull PsiScopeProcessor processor) {
|
||||
return processor instanceof MultiProcessor ? ((MultiProcessor)processor).getProcessors()
|
||||
: singletonList(processor);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user