use of com.webcohesion.enunciate.javac.decorations.element.DecoratedElement in project enunciate by stoicflame.
the class JavaDoc method assumeInheritedTypeComments.
private void assumeInheritedTypeComments(TypeElement e, JavaDocTagHandler tagHandler) {
if (valueInherits(this.value)) {
String inheritedValue = "";
List<? extends TypeMirror> interfaces = e.getInterfaces();
for (TypeMirror iface : interfaces) {
Element el = iface instanceof DeclaredType ? ((DeclaredType) iface).asElement() : null;
if (el instanceof DecoratedElement) {
inheritedValue = ((DecoratedElement) el).getJavaDoc(tagHandler).toString();
if (!inheritedValue.isEmpty()) {
break;
}
}
}
if (inheritedValue.isEmpty()) {
TypeMirror superclass = e.getSuperclass();
if (superclass instanceof DeclaredType) {
Element el = ((DeclaredType) superclass).asElement();
if (el instanceof DecoratedElement) {
inheritedValue = ((DecoratedElement) el).getJavaDoc().toString();
}
}
}
if (!inheritedValue.isEmpty()) {
if (this.value.isEmpty()) {
this.value = inheritedValue;
} else {
this.value = INHERITDOC_PATTERN.matcher(this.value).replaceAll(inheritedValue);
}
}
}
}
use of com.webcohesion.enunciate.javac.decorations.element.DecoratedElement in project enunciate by stoicflame.
the class ApiDocsJavaDocTagHandler method onInlineTag.
@Override
public String onInlineTag(String tagName, String tagText, DecoratedElement context) {
if ("link".equals(tagName)) {
JavaDocLink link = JavaDocLink.parse(tagText);
String classRef = link.getClassName();
String subelementRef = link.getMemberName();
String value = link.getLabel();
// use the current context as the class ref.
if ("".equals(classRef)) {
DecoratedElement type = context;
while (!(type instanceof DecoratedTypeElement)) {
type = (DecoratedElement) type.getEnclosingElement();
if (type == null || type instanceof PackageElement) {
break;
}
}
if (type instanceof DecoratedTypeElement) {
classRef = ((DecoratedTypeElement) type).getQualifiedName().toString();
}
}
if (!"".equals(classRef)) {
if (classRef.indexOf('.') < 0) {
// if it's a local reference, assume it's in the current package.
DecoratedElement pckg = context;
while (!(pckg instanceof DecoratedPackageElement)) {
pckg = (DecoratedElement) pckg.getEnclosingElement();
if (pckg == null) {
break;
}
}
if (pckg != null) {
classRef = ((DecoratedPackageElement) pckg).getQualifiedName() + "." + classRef;
}
}
// now find the reference
Set<Syntax> syntaxes = this.registry.getSyntaxes(this.context);
for (Syntax syntax : syntaxes) {
List<DataType> dataTypes = syntax.findDataTypes(classRef);
if (dataTypes != null && !dataTypes.isEmpty()) {
DataType dataType = dataTypes.get(0);
Value dataTypeValue = dataType.findValue(subelementRef);
if (dataTypeValue != null) {
return "<a href=\"" + dataType.getSlug() + ".html#" + dataTypeValue.getValue() + "\">" + (value != null ? value : dataTypeValue.getValue()) + "</a>";
}
Property property = dataType.findProperty(subelementRef);
if (property != null) {
return "<a href=\"" + dataType.getSlug() + ".html#prop-" + property.getName() + "\">" + (value != null ? value : property.getName()) + "</a>";
}
return "<a href=\"" + dataType.getSlug() + ".html\">" + (value != null ? value : (subelementRef.isEmpty() ? dataType.getLabel() : subelementRef)) + "</a>";
}
}
List<ResourceApi> resourceApis = this.registry.getResourceApis(this.context);
for (ResourceApi resourceApi : resourceApis) {
Method method = resourceApi.findMethodFor(classRef, subelementRef);
if (method != null) {
if (value == null) {
value = method.getLabel() + " " + method.getResource().getGroup().getLabel();
}
return "<a href=\"" + method.getResource().getGroup().getSlug() + ".html#" + method.getSlug() + "\">" + value + "</a>";
} else {
ResourceGroup resourceGroup = resourceApi.findResourceGroupFor(classRef);
if (resourceGroup != null) {
if (value == null) {
value = resourceGroup.getLabel();
}
return "<a href=\"" + resourceGroup.getSlug() + ".html\">" + value + "</a>";
}
}
}
List<ServiceApi> serviceApis = this.registry.getServiceApis(this.context);
for (ServiceApi serviceApi : serviceApis) {
Operation operation = serviceApi.findOperationFor(classRef, subelementRef);
if (operation != null) {
if (value == null) {
value = operation.getName();
}
return "<a href=\"" + operation.getService().getSlug() + ".html#" + operation.getSlug() + "\">" + value + "</a>";
} else {
Service service = serviceApi.findServiceFor(classRef);
if (service != null) {
if (value == null) {
value = service.getLabel();
}
return "<a href=\"" + service.getSlug() + ".html\">" + value + "</a>";
}
}
}
}
return value != null ? value : tagText.trim();
} else if ("code".equals(tagName)) {
return "<code>" + tagText + "</code>";
}
return tagText;
}
use of com.webcohesion.enunciate.javac.decorations.element.DecoratedElement in project enunciate by stoicflame.
the class AnnotationUtils method getJavaDocTags.
public static List<JavaDoc.JavaDocTagList> getJavaDocTags(String tag, Element el) {
if (el == null || (el instanceof TypeElement && Object.class.getName().equals(((TypeElement) el).getQualifiedName().toString()))) {
return Collections.emptyList();
}
ArrayList<JavaDoc.JavaDocTagList> allTags = new ArrayList<JavaDoc.JavaDocTagList>();
JavaDoc.JavaDocTagList tagList = null;
if (el instanceof ElementAdaptor) {
tagList = new JavaDoc(((ElementAdaptor) el).getDocComment(), null, null, null).get(tag);
} else if (el instanceof DecoratedElement) {
tagList = new JavaDoc(((DecoratedElement) el).getDocComment(), null, null, null).get(tag);
}
if (tagList != null && !tagList.isEmpty()) {
allTags.add(tagList);
}
if (el instanceof TypeElement) {
// include the superclass.
TypeMirror superclass = ((TypeElement) el).getSuperclass();
if (superclass instanceof DeclaredType) {
Element element = ((DeclaredType) superclass).asElement();
allTags.addAll(getJavaDocTags(tag, element));
}
}
allTags.addAll(getJavaDocTags(tag, el.getEnclosingElement()));
return allTags;
}
use of com.webcohesion.enunciate.javac.decorations.element.DecoratedElement in project enunciate by stoicflame.
the class DecoratedProcessingEnvironment method findSourcePosition.
public SourcePosition findSourcePosition(Element element) {
while (element instanceof DecoratedElement) {
element = ((DecoratedElement) element).getDelegate();
}
if (element instanceof ElementAdaptor) {
return ((ElementAdaptor) element).getSourcePosition();
}
TreePath path = this.trees.getPath(element);
if (path != null) {
CompilationUnitTree cu = path.getCompilationUnit();
SourcePositions positions = this.trees.getSourcePositions();
long position = positions.getStartPosition(cu, path.getLeaf());
long line = cu.getLineMap().getLineNumber(position);
long column = cu.getLineMap().getColumnNumber(position);
return new SourcePosition(path, cu.getSourceFile(), position, line, column);
} else {
return null;
}
}
use of com.webcohesion.enunciate.javac.decorations.element.DecoratedElement in project enunciate by stoicflame.
the class JavaDoc method assumeInheritedExecutableComments.
private void assumeInheritedExecutableComments(ExecutableElement context, DecoratedProcessingEnvironment env, JavaDocTagHandler tagHandler) {
if (assumeInheritedExecutableComments(context, EMPTY)) {
// all comments have already been assumed.
return;
}
Element el = context.getEnclosingElement();
if (el instanceof TypeElement) {
TypeElement typeElement = (TypeElement) el;
List<TypeMirror> interfaces = new ArrayList<>();
aggregateInterfaces(interfaces, typeElement);
for (TypeMirror iface : interfaces) {
Element superType = iface instanceof DeclaredType ? ((DeclaredType) iface).asElement() : null;
if (superType != null) {
List<ExecutableElement> methods = ElementFilter.methodsIn(superType.getEnclosedElements());
for (ExecutableElement candidate : methods) {
if (env.getElementUtils().overrides(context, candidate, typeElement) && candidate instanceof DecoratedElement) {
JavaDoc inheritedDocs = ((DecoratedElement) candidate).getJavaDoc(tagHandler);
if (assumeInheritedExecutableComments(context, inheritedDocs)) {
return;
}
}
}
}
}
TypeMirror superclass = typeElement.getSuperclass();
if (superclass != null && superclass instanceof DeclaredType) {
Element superType = ((DeclaredType) superclass).asElement();
if (superType != null) {
List<ExecutableElement> methods = ElementFilter.methodsIn(superType.getEnclosedElements());
for (ExecutableElement candidate : methods) {
if (env.getElementUtils().overrides(context, candidate, typeElement) && candidate instanceof DecoratedElement) {
JavaDoc inheritedDocs = ((DecoratedElement) candidate).getJavaDoc(tagHandler);
assumeInheritedExecutableComments(context, inheritedDocs);
return;
}
}
}
}
}
}
Aggregations