package sharpen.xobotos.api.templates;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import com.thoughtworks.xstream.annotations.XStreamOmitField;
import org.eclipse.jdt.core.dom.ASTNode;
import sharpen.core.csharp.ast.CSNode;
import sharpen.xobotos.api.Filter;
import sharpen.xobotos.api.TemplateVisitor;
import sharpen.xobotos.api.TemplateVisitor.VisitMode;
import sharpen.xobotos.config.LocationFilter.Match;
import sharpen.xobotos.config.annotations.AttributeReference;
import sharpen.xobotos.output.IOutputProvider;
import sharpen.xobotos.output.OutputType;
import java.util.List;
public abstract class AbstractMemberTemplate<T extends ASTNode, U extends CSNode> extends AbstractTemplate
implements IOutputProvider {
@XStreamOmitField
@AttributeReference("output")
private OutputType _outputType;
@XStreamImplicit(itemFieldName="filter")
private List<Filter> _filters;
public Match matches(T member) {
if (getName() != null) {
if (Filter.matchesName(member, getName(), false))
return Match.POSITIVE;
else
return Match.NO_MATCH;
}
if (_filters == null)
return Match.POSITIVE;
for (final Filter filter : _filters) {
Match match = filter.matches(member);
if (match != Match.NO_MATCH)
return match;
}
return Match.NO_MATCH;
}
@Override
public OutputType getOutputType() {
return _outputType;
}
public U createCustomMember(T node) {
return null;
}
public void visit(TemplateVisitor visitor, VisitMode mode) {
visitor.accept(this);
}
@Override
protected void print(StringBuilder sb) {
if (_outputType != null) {
sb.append(':');
sb.append(_outputType);
}
super.print(sb);
}
}