mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
StandardPatterns.and: join the conditions to make PsiNamePatternCondition extractable
This commit is contained in:
@@ -18,6 +18,7 @@ package com.intellij.patterns;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -122,32 +123,42 @@ public class StandardPatterns {
|
||||
}
|
||||
|
||||
public static <E> ElementPattern<E> and(final ElementPattern<? extends E>... patterns) {
|
||||
return new ObjectPattern.Capture<E>(new InitialPatternConditionPlus(Object.class) {
|
||||
@Override
|
||||
public boolean accepts(@Nullable final Object o, final ProcessingContext context) {
|
||||
for (final ElementPattern pattern : patterns) {
|
||||
if (!pattern.accepts(o, context)) return false;
|
||||
}
|
||||
return true;
|
||||
final List<InitialPatternCondition> initial = ContainerUtil.newSmartList();
|
||||
for (ElementPattern<?> pattern : patterns) {
|
||||
initial.add(pattern.getCondition().getInitialCondition());
|
||||
}
|
||||
ObjectPattern.Capture<E> result = composeInitialConditions(initial);
|
||||
for (ElementPattern pattern : patterns) {
|
||||
for (PatternCondition<?> condition : (List<PatternCondition<?>>)pattern.getCondition().getConditions()) {
|
||||
result = result.with((PatternCondition<? super E>)condition);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void append(@NotNull @NonNls final StringBuilder builder, final String indent) {
|
||||
boolean first = true;
|
||||
for (final ElementPattern pattern : patterns) {
|
||||
if (!first) {
|
||||
builder.append("\n").append(indent);
|
||||
@NotNull
|
||||
private static <E> ObjectPattern.Capture<E> composeInitialConditions(final List<InitialPatternCondition> initial) {
|
||||
return new ObjectPattern.Capture<E>(new InitialPatternCondition(Object.class) {
|
||||
@Override
|
||||
public boolean accepts(@Nullable final Object o, final ProcessingContext context) {
|
||||
for (final InitialPatternCondition pattern : initial) {
|
||||
if (!pattern.accepts(o, context)) return false;
|
||||
}
|
||||
first = false;
|
||||
pattern.getCondition().append(builder, indent + " ");
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ElementPattern<?>> getPatterns() {
|
||||
return Arrays.<ElementPattern<?>>asList(patterns);
|
||||
}
|
||||
});
|
||||
|
||||
@Override
|
||||
public void append(@NotNull @NonNls final StringBuilder builder, final String indent) {
|
||||
boolean first = true;
|
||||
for (final InitialPatternCondition pattern : initial) {
|
||||
if (!first) {
|
||||
builder.append("\n").append(indent);
|
||||
}
|
||||
first = false;
|
||||
pattern.append(builder, indent + " ");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static <E> ObjectPattern.Capture<E> not(final ElementPattern<E> pattern) {
|
||||
|
||||
Reference in New Issue
Block a user