import java.util.stream.Collectors;
import javax.annotation.processing.Generated;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.xtext.xbase.lib.StringExtensions;
import org.opendaylight.mdsal.binding.model.api.AnnotationType;
import org.opendaylight.mdsal.binding.model.api.ConcreteType;
import org.opendaylight.mdsal.binding.model.api.Type;
import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition.Multiple;
import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition.Single;
+import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
import org.opendaylight.mdsal.binding.model.ri.Types;
import org.opendaylight.mdsal.binding.spec.naming.BindingMapping;
import org.opendaylight.yangtools.yang.binding.Augmentable;
import org.opendaylight.yangtools.yang.model.api.YangStmtMapping;
import org.opendaylight.yangtools.yang.model.api.meta.DeclaredStatement;
import org.opendaylight.yangtools.yang.model.api.meta.EffectiveStatement;
+import org.opendaylight.yangtools.yang.model.api.stmt.AugmentEffectiveStatement;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.export.DeclaredStatementFormatter;
return false;
}
- static void appendSnippet(final StringBuilder sb, final GeneratedType type) {
- type.getYangSourceDefinition().ifPresent(def -> {
+ final void appendSnippet(final StringBuilder sb, final GeneratedType genType) {
+ genType.getYangSourceDefinition().ifPresent(def -> {
sb.append('\n');
if (def instanceof Single single) {
// sb.append("</i>\n");
if (hasBuilderClass(schema)) {
- final String builderName = type.getName() + BindingMapping.BUILDER_SUFFIX;
+ final String builderName = genType.getName() + BindingMapping.BUILDER_SUFFIX;
sb.append("\n<p>To create instances of this class use {@link ").append(builderName)
.append("}.\n")
if (node instanceof ListSchemaNode) {
final var keyDef = ((ListSchemaNode) node).getKeyDefinition();
if (!keyDef.isEmpty()) {
- sb.append("@see ").append(type.getName()).append(BindingMapping.KEY_SUFFIX);
+ sb.append("@see ").append(genType.getName()).append(BindingMapping.KEY_SUFFIX);
}
sb.append('\n');
}
}
+ } else if (node instanceof AugmentEffectiveStatement) {
+ // Find target Augmentation<Foo> and reference Foo
+ final var augType = findAugmentationArgument(genType);
+ if (augType != null) {
+ sb.append("\n\n")
+ .append("@see ").append(importedName(augType));
+ }
}
} else if (def instanceof Multiple multiple) {
sb.append("<pre>\n");
});
}
+ private static @Nullable Type findAugmentationArgument(final GeneratedType genType) {
+ for (var implType : genType.getImplements()) {
+ if (implType instanceof ParameterizedType parameterized) {
+ final var augmentType = BindingTypes.extractAugmentable(parameterized);
+ if (augmentType != null) {
+ return augmentType;
+ }
+ }
+ }
+ return null;
+ }
+
static String encodeJavadocSymbols(final String description) {
// FIXME: Use String.isBlank()?
return description == null || description.isEmpty() ? description