| package org.checkerframework.javacutil; |
| |
| import com.sun.source.tree.CompilationUnitTree; |
| import com.sun.source.util.TreePath; |
| import com.sun.source.util.TreePathScanner; |
| import javax.lang.model.element.TypeElement; |
| |
| /** |
| * Process the types in an AST in a trivial manner, with hooks for derived classes to actually do |
| * something. |
| */ |
| public abstract class BasicTypeProcessor extends AbstractTypeProcessor { |
| /** The source tree that's being scanned. */ |
| protected CompilationUnitTree currentRoot; |
| |
| /** Create a TreePathScanner at the given root. */ |
| protected abstract TreePathScanner<?, ?> createTreePathScanner(CompilationUnitTree root); |
| |
| /** Visit the tree path for the type element. */ |
| @Override |
| public void typeProcess(TypeElement e, TreePath p) { |
| currentRoot = p.getCompilationUnit(); |
| |
| TreePathScanner<?, ?> scanner = null; |
| try { |
| scanner = createTreePathScanner(currentRoot); |
| scanner.scan(p, null); |
| } catch (Throwable t) { |
| System.err.println( |
| "BasicTypeProcessor.typeProcess: unexpected Throwable (" |
| + t.getClass().getSimpleName() |
| + ") when processing " |
| + currentRoot.getSourceFile().getName() |
| + (t.getMessage() != null ? "; message: " + t.getMessage() : "")); |
| } |
| } |
| } |