gdsl: don't mark scripts as using place file if not necessary to allow for better cache reuse; cleanup

This commit is contained in:
peter
2016-05-25 08:45:23 +02:00
parent ac28713e2e
commit b3efd0cdcd
2 changed files with 9 additions and 23 deletions
@@ -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;
}
@@ -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) {