mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-264593 [groovy] gdsl: flatten custom member holders
GitOrigin-RevId: 14a5f9f819b73085baf6e17712684a00ecdb829a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
c83f86faf7
commit
675459121a
+9
-23
@@ -3,9 +3,11 @@ package org.jetbrains.plugins.groovy.dsl;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.CommonClassNames;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiType;
|
||||
import com.intellij.psi.impl.FakePsiElement;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.FList;
|
||||
@@ -18,14 +20,11 @@ import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.plugins.groovy.dsl.dsltop.GdslMembersProvider;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CompoundMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CustomMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.DeclarationType;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.NonCodeMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.toplevel.ClassContextFilter;
|
||||
import org.jetbrains.plugins.groovy.extensions.NamedArgumentDescriptor;
|
||||
import org.jetbrains.plugins.groovy.extensions.impl.NamedArgumentDescriptorImpl;
|
||||
import org.jetbrains.plugins.groovy.lang.completion.closureParameters.ClosureDescriptor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression;
|
||||
@@ -34,7 +33,6 @@ import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
* @author peter
|
||||
@@ -44,7 +42,7 @@ public class CustomMembersGenerator extends GroovyObjectSupport implements GdslM
|
||||
private static final GdslMembersProvider[] PROVIDERS = GdslMembersProvider.EP_NAME.getExtensions();
|
||||
public static final @NonNls String THROWS = "throws";
|
||||
private FList<Map> myDeclarations = FList.emptyList();
|
||||
private final CompoundMembersHolder myDepot = new CompoundMembersHolder();
|
||||
private final List<CustomMembersHolder> myMemberHolders = new ArrayList<>();
|
||||
private final GroovyClassDescriptor myDescriptor;
|
||||
@Nullable private final Map<String, List> myBindings;
|
||||
|
||||
@@ -86,28 +84,16 @@ public class CustomMembersGenerator extends GroovyObjectSupport implements GdslM
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public CustomMembersHolder getMembersHolder() {
|
||||
public List<CustomMembersHolder> getMembersHolder() {
|
||||
if (!myDeclarations.isEmpty()) {
|
||||
addMemberHolder(new CustomMembersHolder() {
|
||||
@Override
|
||||
public boolean processMembers(GroovyClassDescriptor descriptor, PsiScopeProcessor processor, ResolveState state) {
|
||||
return NonCodeMembersHolder.generateMembers(ContainerUtil.reverse(myDeclarations), descriptor.justGetPlaceFile()).processMembers(
|
||||
descriptor, processor, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void consumeClosureDescriptors(GroovyClassDescriptor descriptor, Consumer<? super ClosureDescriptor> consumer) {
|
||||
NonCodeMembersHolder.generateMembers(ContainerUtil.reverse(myDeclarations), descriptor.justGetPlaceFile())
|
||||
.consumeClosureDescriptors(descriptor, consumer);
|
||||
}
|
||||
});
|
||||
addMemberHolder(new CustomMembersHolderImpl(myDeclarations));
|
||||
}
|
||||
return myDepot;
|
||||
return myMemberHolders;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addMemberHolder(CustomMembersHolder holder) {
|
||||
myDepot.addHolder(holder);
|
||||
myMemberHolders.add(holder);
|
||||
}
|
||||
|
||||
private Object[] constructNewArgs(Object[] args) {
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
// Copyright 2000-2021 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.dsl;
|
||||
|
||||
import com.intellij.psi.ResolveState;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.containers.FList;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CustomMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.NonCodeMembersHolder;
|
||||
import org.jetbrains.plugins.groovy.lang.completion.closureParameters.ClosureDescriptor;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
final class CustomMembersHolderImpl implements CustomMembersHolder {
|
||||
|
||||
private final FList<Map> myDeclarations;
|
||||
|
||||
CustomMembersHolderImpl(FList<Map> declarations) {
|
||||
myDeclarations = declarations;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processMembers(GroovyClassDescriptor descriptor, PsiScopeProcessor processor, ResolveState state) {
|
||||
return NonCodeMembersHolder.generateMembers(ContainerUtil.reverse(myDeclarations), descriptor.justGetPlaceFile())
|
||||
.processMembers(descriptor, processor, state);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void consumeClosureDescriptors(GroovyClassDescriptor descriptor, Consumer<? super ClosureDescriptor> consumer) {
|
||||
NonCodeMembersHolder.generateMembers(ContainerUtil.reverse(myDeclarations), descriptor.justGetPlaceFile())
|
||||
.consumeClosureDescriptors(descriptor, consumer);
|
||||
}
|
||||
}
|
||||
+4
-5
@@ -9,7 +9,6 @@ import com.intellij.util.containers.MultiMap
|
||||
import groovy.transform.CompileStatic
|
||||
import groovy.transform.TypeCheckingMode
|
||||
import org.codehaus.groovy.control.CompilerConfiguration
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CompoundMembersHolder
|
||||
import org.jetbrains.plugins.groovy.dsl.holders.CustomMembersHolder
|
||||
import org.jetbrains.plugins.groovy.dsl.psi.PsiEnhancerCategory
|
||||
import org.jetbrains.plugins.groovy.dsl.toplevel.ContextFilter
|
||||
@@ -37,19 +36,19 @@ class GroovyDslExecutor {
|
||||
}
|
||||
|
||||
CustomMembersHolder processVariants(GroovyClassDescriptor descriptor, ProcessingContext ctx) {
|
||||
if (!enhancers) return CompoundMembersHolder.EMPTY
|
||||
if (!enhancers) return CustomMembersHolder.EMPTY
|
||||
|
||||
CompoundMembersHolder holder = new CompoundMembersHolder()
|
||||
List<CustomMembersHolder> holders = new ArrayList<>()
|
||||
for (pair in enhancers) {
|
||||
ProgressManager.checkCanceled()
|
||||
ctx.put(DslPointcut.BOUND, null)
|
||||
if (pair.first.isApplicable(descriptor, ctx)) {
|
||||
def generator = new CustomMembersGenerator(descriptor, ctx.get(DslPointcut.BOUND))
|
||||
doRun(generator, pair.second)
|
||||
holder.addHolder(generator.membersHolder)
|
||||
holders.addAll(generator.membersHolder)
|
||||
}
|
||||
}
|
||||
return holder
|
||||
return CustomMembersHolder.create(holders)
|
||||
}
|
||||
|
||||
@CompileStatic(TypeCheckingMode.SKIP)
|
||||
|
||||
+8
-7
@@ -1,8 +1,9 @@
|
||||
// Copyright 2000-2019 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.
|
||||
// Copyright 2000-2021 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.dsl.holders;
|
||||
|
||||
import com.intellij.psi.ResolveState;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.dsl.GroovyClassDescriptor;
|
||||
import org.jetbrains.plugins.groovy.lang.completion.closureParameters.ClosureDescriptor;
|
||||
|
||||
@@ -13,9 +14,13 @@ import java.util.function.Consumer;
|
||||
/**
|
||||
* @author ilyas
|
||||
*/
|
||||
public class CompoundMembersHolder implements CustomMembersHolder {
|
||||
class CompoundMembersHolder implements CustomMembersHolder {
|
||||
|
||||
private final List<CustomMembersHolder> myHolders = new ArrayList<>();
|
||||
private final List<CustomMembersHolder> myHolders;
|
||||
|
||||
CompoundMembersHolder(@NotNull List<CustomMembersHolder> holders) {
|
||||
myHolders = new ArrayList<>(holders);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processMembers(GroovyClassDescriptor descriptor, PsiScopeProcessor processor, ResolveState state) {
|
||||
@@ -31,8 +36,4 @@ public class CompoundMembersHolder implements CustomMembersHolder {
|
||||
holder.consumeClosureDescriptors(descriptor, consumer);
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized void addHolder(CustomMembersHolder holder) {
|
||||
myHolders.add(holder);
|
||||
}
|
||||
}
|
||||
|
||||
+17
-1
@@ -1,11 +1,14 @@
|
||||
// Copyright 2000-2019 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.
|
||||
// Copyright 2000-2021 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.dsl.holders;
|
||||
|
||||
import com.intellij.psi.ResolveState;
|
||||
import com.intellij.psi.scope.PsiScopeProcessor;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.plugins.groovy.dsl.GroovyClassDescriptor;
|
||||
import org.jetbrains.plugins.groovy.lang.completion.closureParameters.ClosureDescriptor;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
/**
|
||||
@@ -27,4 +30,17 @@ public interface CustomMembersHolder {
|
||||
boolean processMembers(GroovyClassDescriptor descriptor, PsiScopeProcessor processor, ResolveState state);
|
||||
|
||||
void consumeClosureDescriptors(GroovyClassDescriptor descriptor, Consumer<? super ClosureDescriptor> consumer);
|
||||
|
||||
static @NotNull CustomMembersHolder create(@NotNull List<CustomMembersHolder> holders) {
|
||||
List<CustomMembersHolder> nonEmptyHolders = ContainerUtil.filter(holders, it -> it != EMPTY);
|
||||
if (nonEmptyHolders.isEmpty()) {
|
||||
return EMPTY;
|
||||
}
|
||||
else if (nonEmptyHolders.size() == 1) {
|
||||
return nonEmptyHolders.get(0);
|
||||
}
|
||||
else {
|
||||
return new CompoundMembersHolder(nonEmptyHolders);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user