blob: 4416b8b7db24ec846e243f57628d6e8336e71a42 [file] [log] [blame]
package com.intellij.structuralsearch.impl.matcher.filters;
import com.intellij.dupLocator.util.NodeFilter;
import com.intellij.psi.*;
/**
* Filter for typed symbols
*/
public class TypedSymbolNodeFilter extends JavaElementVisitor implements NodeFilter {
private boolean result;
@Override public void visitMethod(PsiMethod psiMethod) {
result = psiMethod.hasTypeParameters();
}
@Override public void visitClass(PsiClass psiClass) {
result = psiClass.hasTypeParameters();
}
@Override public void visitReferenceElement(PsiJavaCodeReferenceElement psiJavaCodeReferenceElement) {
result = psiJavaCodeReferenceElement.getParameterList().getTypeParameterElements().length > 0;
}
@Override public void visitTypeParameter(PsiTypeParameter parameter) {
// we need this since TypeParameter instanceof PsiClass (?)
}
private static class NodeFilterHolder {
private static final NodeFilter instance = new TypedSymbolNodeFilter();
}
public static NodeFilter getInstance() {
return NodeFilterHolder.instance;
}
private TypedSymbolNodeFilter() {
}
public boolean accepts(PsiElement element) {
result = false;
if (element!=null) element.accept(this);
return result;
}
}