This commit is contained in:
Gregory.Shrago
2016-06-22 21:22:18 +03:00
parent c5b1e4938c
commit b568285c3a
2 changed files with 48 additions and 50 deletions
@@ -112,17 +112,17 @@ public class SyntaxTraverser<T> extends FilteredTraverserBase<T, SyntaxTraverser
@NotNull
public SyntaxTraverser<T> expandTypes(@NotNull Condition<? super IElementType> c) {
return super.expand(compose(api.TO_TYPE(), c));
return super.expand(compose(api.TO_TYPE, c));
}
@NotNull
public SyntaxTraverser<T> filterTypes(@NotNull Condition<? super IElementType> c) {
return super.filter(compose(api.TO_TYPE(), c));
return super.filter(compose(api.TO_TYPE, c));
}
@NotNull
public SyntaxTraverser<T> forceDisregardTypes(@NotNull Condition<? super IElementType> c) {
return super.forceDisregard(compose(api.TO_TYPE(), c));
return super.forceDisregard(compose(api.TO_TYPE, c));
}
@Nullable
@@ -167,53 +167,45 @@ public class SyntaxTraverser<T> extends FilteredTraverserBase<T, SyntaxTraverser
});
}
@NotNull
public Function<T, IElementType> TO_TYPE() {
return new Function<T, IElementType>() {
@Override
public IElementType fun(T t) {
return typeOf(t);
}
public final Function<T, IElementType> TO_TYPE = new Function<T, IElementType>() {
@Override
public IElementType fun(T t) {
return typeOf(t);
}
@Override
public String toString() {
return "TO_TYPE";
}
};
}
@Override
public String toString() {
return "TO_TYPE";
}
};
@NotNull
public Function<T, CharSequence> TO_TEXT() {
return new Function<T, CharSequence>() {
@Override
public CharSequence fun(T t) {
return textOf(t);
}
public final Function<T, CharSequence> TO_TEXT = new Function<T, CharSequence>() {
@Override
public CharSequence fun(T t) {
return textOf(t);
}
@Override
public String toString() {
return "TO_TEXT";
}
};
}
@Override
public String toString() {
return "TO_TEXT";
}
};
@NotNull
public Function<T, TextRange> TO_RANGE() {
return new Function<T, TextRange>() {
@Override
public TextRange fun(T t) {
return rangeOf(t);
}
public final Function<T, TextRange> TO_RANGE = new Function<T, TextRange>() {
@Override
public TextRange fun(T t) {
return rangeOf(t);
}
@Override
public String toString() {
return "TO_RANGE";
}
};
}
@Override
public String toString() {
return "TO_RANGE";
}
};
}
public abstract static class ApiEx<T> extends Api<T> {
@Nullable
public abstract T first(@NotNull T node);
@@ -231,13 +223,20 @@ public class SyntaxTraverser<T> extends FilteredTraverserBase<T, SyntaxTraverser
public JBIterable<? extends T> children(@NotNull final T node) {
final T first = first(node);
if (first == null) return JBIterable.empty();
return JBIterable.generate(first, new Function<T, T>() {
@Override
public T fun(T t) {
return next(t);
}
});
return JBIterable.generate(first, TO_NEXT);
}
private final Function<T, T> TO_NEXT = new Function<T, T>() {
@Override
public T fun(T t) {
return next(t);
}
@Override
public String toString() {
return "TO_NEXT";
}
};
}
private static class PsiApi extends ApiEx<PsiElement> {
@@ -31,7 +31,6 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
@@ -97,7 +96,7 @@ class ChameleonSyntaxHighlightingPass extends TextEditorHighlightingPass {
TextAttributes defaultAttrs = scheme.getAttributes(HighlighterColors.TEXT);
SyntaxTraverser<PsiElement> s = psiTraverser(myFile).
expand(compose(psiApi().TO_RANGE(), range -> range.intersects(myStartOffset, myEndOffset))).filterTypes(instanceOf(ILazyParseableElementType.class)).filterTypes(notInstanceOf(IFileElementType.class));
expand(compose(psiApi().TO_RANGE, range -> range.intersects(myStartOffset, myEndOffset))).filterTypes(instanceOf(ILazyParseableElementType.class)).filterTypes(notInstanceOf(IFileElementType.class));
List<HighlightInfo> infos = ContainerUtil.newArrayList();