import java.util.regex.Pattern
import org.opendaylight.yangtools.binding.generator.util.Types
import org.opendaylight.yangtools.sal.binding.model.api.ConcreteType
+import org.opendaylight.yangtools.sal.binding.model.api.Constant
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedProperty
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedTransferObject
import org.opendaylight.yangtools.sal.binding.model.api.GeneratedType
import org.opendaylight.yangtools.sal.binding.model.api.MethodSignature
import org.opendaylight.yangtools.sal.binding.model.api.Restrictions
import org.opendaylight.yangtools.sal.binding.model.api.Type
-import org.opendaylight.yangtools.sal.binding.model.api.Constant
+import org.opendaylight.yangtools.sal.binding.model.api.TypeMember
import org.opendaylight.yangtools.yang.common.QName
abstract class BaseTemplate {
return getter.name.substring(prefix).toFirstLower;
}
+ final protected def isAccessor(MethodSignature maybeGetter) {
+ return maybeGetter.name.startsWith("is") || maybeGetter.name.startsWith("get");
+ }
+
/**
* Template method which generates the getter method for <code>field</code>
*
* generated property with data about field which is generated as the getter method
* @return string with the getter method source code in JAVA format
*/
- final protected def getterMethod(GeneratedProperty field) {
+ protected def getterMethod(GeneratedProperty field) {
'''
public «field.returnType.importedName» «field.getterMethodName»() {
«IF field.returnType.importedName.contains("[]")»
}
private static final CharMatcher AMP_MATCHER = CharMatcher.is('&');
- private static final CharMatcher GT_MATCHER = CharMatcher.is('>');
- private static final CharMatcher LT_MATCHER = CharMatcher.is('<');
def encodeJavadocSymbols(String description) {
if (description.nullOrEmpty) {
return description;
}
- var ret = description.replace("*/", "*/")
-
- // FIXME: Use Guava's HtmlEscapers once we have it available
+ var ret = description.replace("*/", "*/");
ret = AMP_MATCHER.replaceFrom(ret, "&");
- ret = GT_MATCHER.replaceFrom(ret, ">");
- ret = LT_MATCHER.replaceFrom(ret, "<");
+
return ret;
}
'''.toString
}
+ def protected String formatDataForJavaDoc(TypeMember type, String additionalComment) {
+ val StringBuilder typeDescriptionBuilder = new StringBuilder();
+ if (!type.comment.nullOrEmpty) {
+ typeDescriptionBuilder.append(formatToParagraph(type.comment))
+ typeDescriptionBuilder.append(NEW_LINE)
+ typeDescriptionBuilder.append(NEW_LINE)
+ typeDescriptionBuilder.append(NEW_LINE)
+ }
+ typeDescriptionBuilder.append(additionalComment)
+ var typeDescription = wrapToDocumentation(typeDescriptionBuilder.toString)
+ return '''
+ «typeDescription»
+ '''.toString
+ }
+
+ def asCode(String text) {
+ return "<code>" + text + "</code>"
+ }
+
def asLink(String text) {
val StringBuilder sb = new StringBuilder()
var tempText = text
var StringBuilder lineBuilder = new StringBuilder();
var boolean isFirstElementOnNewLineEmptyChar = false;
- formattedText = formattedText.encodeJavadocSymbols
+ formattedText = encodeJavadocSymbols(formattedText)
formattedText = NL_MATCHER.removeFrom(formattedText)
formattedText = TAB_MATCHER.removeFrom(formattedText)
formattedText = SPACES_PATTERN.matcher(formattedText).replaceAll(" ")
val StringTokenizer tokenizer = new StringTokenizer(formattedText, " ", true);
- while(tokenizer.hasMoreElements) {
+ while (tokenizer.hasMoreElements) {
val nextElement = tokenizer.nextElement.toString
- if(lineBuilder.length + nextElement.length > 80) {
+ if (lineBuilder.length != 0 && lineBuilder.length + nextElement.length > 80) {
if (lineBuilder.charAt(lineBuilder.length - 1) == ' ') {
lineBuilder.setLength(0)
lineBuilder.append(lineBuilder.substring(0, lineBuilder.length - 1))
}
}
- if(isFirstElementOnNewLineEmptyChar) {
+ if (isFirstElementOnNewLineEmptyChar) {
isFirstElementOnNewLineEmptyChar = !isFirstElementOnNewLineEmptyChar
}
def protected emitConstant(Constant c) '''
«IF c.value instanceof QName»
«val qname = c.value as QName»
- public static final «c.type.importedName» «c.name» = «QName.name».cachedReference(
- «QName.name».create("«qname.namespace.toString»", "«qname.formattedRevision»", "«qname.localName»"));
+ public static final «c.type.importedName» «c.name» = «QName.name».create("«qname.namespace.toString»",
+ "«qname.formattedRevision»", "«qname.localName»").intern();
«ELSE»
public static final «c.type.importedName» «c.name» = «c.value»;
«ENDIF»