/**This analyzer ensures that all method that implement a public supported API method are marked with *{@linkDefinedBy}annotation,andthatmethodsthatdon'timplementapublicAPIarenotmarked *usingtheannotation.
*/ publicclass DefinedByAnalyzer extends AbstractCodingRulesAnalyzer {
public DefinedByAnalyzer(JavacTask task) { super(task);
treeVisitor = new DefinedByVisitor();
eventKind = Kind.ANALYZE;
}
//only java.compiler and jdk.compiler modules implement the APIs, //so only these need the @DefinedBy annotation: privatestaticfinal Set<String> MODULE = new HashSet<>(Arrays.asList( "java.compiler", "jdk.compiler"
));
class DefinedByVisitor extends TreeScanner {
@Override publicvoid visitClassDef(JCClassDecl tree) { if (MODULE.contains(tree.sym.packge().modle.name.toString())) { super.visitClassDef(tree);
}
}
@Override publicvoid visitMethodDef(JCMethodDecl tree) { if (!isAPIPackage(packageName(tree.sym))) { boolean seenAPIPackage = false;
for (MethodSymbol overridden : types.getOverriddenMethods(tree.sym)) {
String overriddenPackage = packageName(overridden);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.