use of org.gradle.build.docs.dsl.source.model.PropertyMetaData in project gradle by gradle.
the class ClassDocExtensionsBuilder method build.
private void build(ClassExtensionDoc extensionDoc) {
Document doc;
try {
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument();
} catch (ParserConfigurationException e) {
throw UncheckedException.throwAsUncheckedException(e);
}
LinkRenderer linkRenderer = new LinkRenderer(doc, model);
for (Map.Entry<String, ClassDoc> entry : extensionDoc.getExtensionClasses().entrySet()) {
String id = entry.getKey();
ClassDoc type = entry.getValue();
PropertyMetaData propertyMetaData = new PropertyMetaData(id, extensionDoc.getTargetClass().getClassMetaData());
propertyMetaData.setType(new TypeMetaData(type.getName()));
Element para = doc.createElement("para");
para.appendChild(doc.createTextNode("The "));
para.appendChild(linkRenderer.link(propertyMetaData.getType(), listener));
para.appendChild(doc.createTextNode(String.format(" added by the %s plugin.", extensionDoc.getPluginId())));
PropertyDoc propertyDoc = new PropertyDoc(propertyMetaData, Collections.singletonList(para), Collections.<ExtraAttributeDoc>emptyList());
extensionDoc.getExtraProperties().add(propertyDoc);
para = doc.createElement("para");
para.appendChild(doc.createTextNode("Configures the "));
para.appendChild(linkRenderer.link(propertyMetaData.getType(), listener));
para.appendChild(doc.createTextNode(String.format(" added by the %s plugin.", extensionDoc.getPluginId())));
MethodMetaData methodMetaData = new MethodMetaData(id, extensionDoc.getTargetClass().getClassMetaData());
methodMetaData.addParameter("configClosure", new TypeMetaData(Closure.class.getName()));
MethodDoc methodDoc = new MethodDoc(methodMetaData, Collections.singletonList(para));
extensionDoc.getExtraBlocks().add(new BlockDoc(methodDoc, propertyDoc, propertyMetaData.getType(), false));
}
}
use of org.gradle.build.docs.dsl.source.model.PropertyMetaData in project gradle by gradle.
the class ClassDocPropertiesBuilder method build.
/**
* Builds the properties of the given class
*/
void build(ClassDoc classDoc) {
Element thead = getChild(classDoc.getPropertiesTable(), "thead");
Element tr = getChild(thead, "tr");
List<Element> header = children(tr, "td");
if (header.size() < 1) {
throw new RuntimeException(String.format("Expected at least 1 <td> in <thead>/<tr>, found: %s", header));
}
Map<String, Element> inheritedValueTitleMapping = new HashMap<String, Element>();
List<Element> valueTitles = new ArrayList<Element>();
for (int i = 1; i < header.size(); i++) {
Element element = header.get(i);
Element override = findChild(element, "overrides");
if (override != null) {
element.removeChild(override);
inheritedValueTitleMapping.put(override.getTextContent(), element);
}
Node firstChild = element.getFirstChild();
if (firstChild instanceof Text) {
firstChild.setTextContent(firstChild.getTextContent().replaceFirst("^\\s+", ""));
}
Node lastChild = element.getLastChild();
if (lastChild instanceof Text) {
lastChild.setTextContent(lastChild.getTextContent().replaceFirst("\\s+$", ""));
}
valueTitles.add(element);
}
// adding the properties from the super class onto the inheriting class
Map<String, PropertyDoc> props = new TreeMap<String, PropertyDoc>();
List<ClassDoc> superTypes = classDoc.getSuperTypes();
for (ClassDoc superType : superTypes) {
LOG.info("Getting properties for {}", superType.getName());
for (PropertyDoc propertyDoc : superType.getClassProperties()) {
Map<String, ExtraAttributeDoc> additionalValues = new LinkedHashMap<String, ExtraAttributeDoc>();
for (ExtraAttributeDoc attributeDoc : propertyDoc.getAdditionalValues()) {
String key = attributeDoc.getKey();
if (inheritedValueTitleMapping.get(key) != null) {
ExtraAttributeDoc newAttribute = new ExtraAttributeDoc(inheritedValueTitleMapping.get(key), attributeDoc.getValueCell());
additionalValues.put(newAttribute.getKey(), newAttribute);
} else {
additionalValues.put(key, attributeDoc);
}
}
props.put(propertyDoc.getName(), propertyDoc.forClass(classDoc, additionalValues.values()));
}
}
for (Element row : children(classDoc.getPropertiesTable(), "tr")) {
List<Element> cells = children(row, "td");
if (cells.size() != header.size()) {
throw new RuntimeException(String.format("Expected %s <td> elements in <tr>, found: %s", header.size(), tr));
}
String propName = cells.get(0).getTextContent().trim();
PropertyMetaData property = classDoc.getClassMetaData().findProperty(propName);
if (property == null) {
throw new RuntimeException(String.format("No metadata for property '%s.%s'. Available properties: %s", classDoc.getName(), propName, classDoc.getClassMetaData().getPropertyNames()));
}
Map<String, ExtraAttributeDoc> additionalValues = new LinkedHashMap<String, ExtraAttributeDoc>();
if (!superTypes.isEmpty()) {
PropertyDoc overriddenProp = props.get(propName);
if (overriddenProp != null) {
for (ExtraAttributeDoc attributeDoc : overriddenProp.getAdditionalValues()) {
additionalValues.put(attributeDoc.getKey(), attributeDoc);
}
}
}
for (int i = 1; i < header.size(); i++) {
if (cells.get(i).getFirstChild() == null) {
continue;
}
ExtraAttributeDoc attributeDoc = new ExtraAttributeDoc(valueTitles.get(i - 1), cells.get(i));
additionalValues.put(attributeDoc.getKey(), attributeDoc);
}
PropertyDoc propertyDoc = new PropertyDoc(property, javadocConverter.parse(property, listener).getDocbook(), new ArrayList<ExtraAttributeDoc>(additionalValues.values()));
if (propertyDoc.getDescription() == null) {
throw new RuntimeException(String.format("Docbook content for '%s.%s' does not contain a description paragraph.", classDoc.getName(), propName));
}
props.put(propName, propertyDoc);
}
for (PropertyDoc propertyDoc : props.values()) {
classDoc.addClassProperty(propertyDoc);
}
}
Aggregations