下面列出了怎么用javax.lang.model.element.ElementVisitor的API类实例代码及写法,或者点击链接到github查看源代码。
private String collectPlugins(String packageName, final Iterable<? extends Element> elements, List<PluginEntry> list) {
boolean calculatePackage = packageName == null;
final Elements elementUtils = processingEnv.getElementUtils();
final ElementVisitor<PluginEntry, Plugin> pluginVisitor = new PluginElementVisitor(elementUtils);
final ElementVisitor<Collection<PluginEntry>, Plugin> pluginAliasesVisitor = new PluginAliasesElementVisitor(
elementUtils);
for (final Element element : elements) {
final Plugin plugin = element.getAnnotation(Plugin.class);
if (plugin == null) {
continue;
}
final PluginEntry entry = element.accept(pluginVisitor, plugin);
list.add(entry);
if (calculatePackage) {
packageName = calculatePackage(elementUtils, element, packageName);
}
final Collection<PluginEntry> entries = element.accept(pluginAliasesVisitor, plugin);
for (final PluginEntry pluginEntry : entries) {
list.add(pluginEntry);
}
}
return packageName;
}
public void testOriginatingElementComments() throws Exception {
b = new LayerBuilder(doc, new Element() {
public @Override ElementKind getKind() {
return ElementKind.OTHER;
}
public @Override String toString() {
return "originating.Type";
}
public @Override TypeMirror asType() {return null;}
public @Override List<? extends AnnotationMirror> getAnnotationMirrors() {return null;}
public @Override <A extends Annotation> A getAnnotation(Class<A> annotationType) {return null;}
public @Override Set<Modifier> getModifiers() {return null;}
public @Override Name getSimpleName() {return null;}
public @Override Element getEnclosingElement() {return null;}
public @Override List<? extends Element> getEnclosedElements() {return null;}
public @Override <R, P> R accept(ElementVisitor<R, P> v, P p) {return null;}
@Override
public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationType) {
return (A[]) Array.newInstance(annotationType, 0);
}
}, null);
b.folder("f").write();
assertEquals("<filesystem><folder name='f'><!--originating.Type--></folder></filesystem>", dump());
// #180154: do not repeat after an incremental build
b.folder("f").write();
assertEquals("<filesystem><folder name='f'><!--originating.Type--></folder></filesystem>", dump());
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return other.accept(v, p);
}
@Override @DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitTypeParameter(this, p);
}
@Override @DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitModule(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitPackage(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitType(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitVariable(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitExecutable(this, p);
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new UnsupportedOperationException("Not supported yet.");
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return null;
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return null;
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return other.accept(v, p);
}
@Override @DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitTypeParameter(this, p);
}
@Override @DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitModule(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitPackage(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitType(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitVariable(this, p);
}
@DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitExecutable(this, p);
}
@Override @DefinedBy(Api.LANGUAGE_MODEL)
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
throw new AssertionError();
}
@Override
public <R, P> R accept(ElementVisitor<R, P> v, P p) {
return v.visitUnknown(this, p);
}