package ru.csu.stan.java.ast.core; import java.util.List; import javax.lang.model.type.TypeKind; import javax.tools.JavaFileObject; import com.sun.source.tree.Tree.Kind; import com.sun.tools.javac.code.BoundKind; import com.sun.tools.javac.code.Symbol; import com.sun.tools.javac.code.Type; import com.sun.tools.javac.tree.JCTree; import com.sun.tools.javac.util.Name; /** * Интерфейс, описывающий события, возникающие при обходе AST. * */ public interface TraversalHandler { /** * Событие, возникающее при начале обработки узла. */ public void onStartNode(JCTree node, String name, Position position); /** * Событие, возникающее в конце обработки узла. */ public void onEndNode(JCTree node, String name, Position position); /** * Событие, возникающее, когда узел - null. */ public void onNullNode(String name); /** * Событие, возникающее в начале обработки списка узлов. */ public void onStartNodesList(List<? extends JCTree> nodesList, String name); /** * Событие, возникающее в конце обработки списка узлов. */ public void onEndNodesList(List<? extends JCTree> nodesList, String name); /** * Событие, возникающее, когда список узлов - null. */ public void onNullNodesList(String name); /** * Событие, возникающее в начале обработки символа. */ public void onSymbolStart(Symbol symbol, String name); /** * Событие, возникающее в конце обработки символа. */ public void onSymbolEnd(Symbol symbol, String name); /** * Событие, возникающее, когда символ - null. */ public void onNullSymbol(String name); /** * Событие, возникающее при обработки строки компилятора. */ public void onName(Name nameElement, String name); /** * Событие, возникающее при обработке литерала. */ public void onLiteral(Object value, Kind valueType); /** * Событие, возникающее при обработке типа. */ public void onType(Type type, String name); /** * Событие, возникающее при обработке флагов. */ public void onFlags(long flags); /** * Событие, возникающее при обработке примитивного типа. */ public void onPrimitiveType(TypeKind typeKind); /** * Событие, возникающее при обработке пустого оператора. */ public void onEmptyStatement(); /** * Событие, возникающее при обработке типа ограничения в generic-конструкциях. */ public void onBoundKind(BoundKind boundKind); /** * Событие, возникающее при ошибке. */ public void onErrorOcured(Exception e); /** * Событие, возникающее при обработке файла с исходным кодом. * Нужно чтобы отразить файл в представлении, то есть, не является стартовым. */ public void onSourceFile(JavaFileObject sourceFile); /** * Событие, возникающее при обработке пустого узла, состоящего только из имени. * Необходимо для создания пустых вспомогательных тегов, например, внутри if: condition, then и else. */ public void onEmptyNodeName(String nodeName); /** * Интерфейс, описывающий позицию конструкции в исходном тексте. * */ public static interface Position { /** * * @return Номер строки. */ public int getLineNumber(); /** * * @return Номер символа в строке. */ public int getColumnNumber(); } }