mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
gdsl: don't mark scripts as using place file if not necessary to allow for better cache reuse; cleanup
This commit is contained in:
@@ -118,9 +118,9 @@ public abstract class DslPointcut<T,V> {
|
||||
|
||||
@Override
|
||||
List<GdslType> matches(GdslType src, ProcessingContext context) {
|
||||
final PsiFile placeFile = context.get(GdslUtil.INITIAL_CONTEXT).getPlaceFile();
|
||||
final PsiFile placeFile = context.get(GdslUtil.INITIAL_CONTEXT).justGetPlaceFile();
|
||||
if (ClassContextFilter.isSubtype(src.psiType, placeFile, (String)arg)) {
|
||||
return Arrays.asList(src);
|
||||
return Collections.singletonList(src);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+7
-21
@@ -15,14 +15,10 @@
|
||||
*/
|
||||
package org.jetbrains.plugins.groovy.dsl.toplevel;
|
||||
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.patterns.ElementPattern;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.ProcessingContext;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.plugins.groovy.dsl.GroovyClassDescriptor;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.ClassUtil;
|
||||
import org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions.TypesUtil;
|
||||
|
||||
@@ -31,27 +27,17 @@ import java.util.Map;
|
||||
/**
|
||||
* @author peter
|
||||
*/
|
||||
public class ClassContextFilter implements ContextFilter {
|
||||
private final Condition<Pair<PsiType, PsiFile>> myPattern;
|
||||
public class ClassContextFilter {
|
||||
|
||||
public ClassContextFilter(Condition<Pair<PsiType, PsiFile>> pattern) {
|
||||
myPattern = pattern;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isApplicable(GroovyClassDescriptor descriptor, ProcessingContext ctx) {
|
||||
return myPattern.value(Pair.create(descriptor.getPsiType(), descriptor.getPlaceFile()));
|
||||
}
|
||||
|
||||
public static ClassContextFilter fromClassPattern(final ElementPattern pattern) {
|
||||
return new ClassContextFilter(pair -> {
|
||||
final PsiType type = pair.first;
|
||||
public static ContextFilter fromClassPattern(ElementPattern pattern) {
|
||||
return (descriptor, ctx) -> {
|
||||
PsiType type = descriptor.getPsiType();
|
||||
return type instanceof PsiClassType && pattern.accepts(((PsiClassType)type).resolve());
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
public static ClassContextFilter subtypeOf(final String typeText) {
|
||||
return new ClassContextFilter(p -> isSubtype(p.first, p.second, typeText));
|
||||
public static ContextFilter subtypeOf(String typeText) {
|
||||
return (descriptor, ctx) -> isSubtype(descriptor.getPsiType(), descriptor.justGetPlaceFile(), typeText);
|
||||
}
|
||||
|
||||
public static boolean isSubtype(PsiType checked, PsiFile placeFile, String typeText) {
|
||||
|
||||
Reference in New Issue
Block a user