Fix warnings about missing javadoc in augment interfaces.
Add setting of YangSourceDefinition when building GeneratedType
corresponding to augments so JavaFileTemplate.appendSnippet()
generate javadoc for this class.
JIRA: MDSAL-761
Change-Id: I243ce2e5198dca2b9c6e6c009c6ddb2a248d44a5
Signed-off-by: Samuel Schneider <samuel.schneider@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
import org.opendaylight.mdsal.binding.generator.impl.reactor.CollisionDomain.Member;
import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultAugmentRuntimeType;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.generator.impl.reactor.CollisionDomain.Member;
import org.opendaylight.mdsal.binding.generator.impl.rt.DefaultAugmentRuntimeType;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+import org.opendaylight.mdsal.binding.model.api.YangSourceDefinition;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilder;
import org.opendaylight.mdsal.binding.model.api.type.builder.GeneratedTypeBuilderBase;
import org.opendaylight.mdsal.binding.model.ri.BindingTypes;
final GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
final GeneratedType createTypeImpl(final TypeBuilderFactory builderFactory) {
final GeneratedTypeBuilder builder = builderFactory.newGeneratedTypeBuilder(typeName());
+ YangSourceDefinition.of(currentModule().statement(), statement()).ifPresent(builder::setYangSourceDefinition);
builder.addImplementsType(BindingTypes.augmentation(targetGenerator().getGeneratedType(builderFactory)));
addUsesInterfaces(builder, builderFactory);
addConcreteInterfaceMethods(builder);
builder.addImplementsType(BindingTypes.augmentation(targetGenerator().getGeneratedType(builderFactory)));
addUsesInterfaces(builder, builderFactory);
addConcreteInterfaceMethods(builder);
import java.util.stream.Collectors;
import javax.annotation.processing.Generated;
import org.eclipse.jdt.annotation.NonNull;
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.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.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.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.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;
import org.opendaylight.yangtools.yang.model.api.stmt.ModuleEffectiveStatement;
import org.opendaylight.yangtools.yang.model.export.DeclaredStatementFormatter;
- 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('\n');
if (def instanceof Single single) {
// sb.append("</i>\n");
if (hasBuilderClass(schema)) {
// 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")
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()) {
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);
+ } 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");
}
} 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
static String encodeJavadocSymbols(final String description) {
// FIXME: Use String.isBlank()?
return description == null || description.isEmpty() ? description
public static Optional<YangSourceDefinition> of(final ModuleEffectiveStatement module,
final EffectiveStatement<?, ?> effective) {
public static Optional<YangSourceDefinition> of(final ModuleEffectiveStatement module,
final EffectiveStatement<?, ?> effective) {
- return effective instanceof SchemaNode schema && effective.getDeclared() != null
- ? Optional.of(new Single(module, schema)) : Optional.empty();
+ return effective instanceof DocumentedNode node && effective.getDeclared() != null
+ ? Optional.of(new Single(module, node)) : Optional.empty();
}
public static Optional<YangSourceDefinition> of(final Module module, final Collection<? extends SchemaNode> nodes) {
}
public static Optional<YangSourceDefinition> of(final Module module, final Collection<? extends SchemaNode> nodes) {
import static org.opendaylight.mdsal.binding.model.ri.Types.typeForClass;
import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.VALUE_STATIC_FIELD_NAME;
import static org.opendaylight.mdsal.binding.model.ri.Types.typeForClass;
import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.VALUE_STATIC_FIELD_NAME;
+import com.google.common.annotations.Beta;
import com.google.common.annotations.VisibleForTesting;
import org.eclipse.jdt.annotation.NonNull;
import com.google.common.annotations.VisibleForTesting;
import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.mdsal.binding.model.api.ConcreteType;
import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
import org.opendaylight.mdsal.binding.model.api.ConcreteType;
import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject;
import org.opendaylight.mdsal.binding.model.api.GeneratedType;
+
+ /**
+ * Return the {@link Augmentable} type a parameterized {@link Augmentation} type references.
+ *
+ * @param type Parameterized type
+ * @return Augmentable target, or null if {@code type} does not match the result of {@link #augmentation(Type)}
+ * @throws NullPointerException if {@code type} is null
+ */
+ @Beta
+ public static @Nullable Type extractAugmentable(final ParameterizedType type) {
+ if (AUGMENTATION.equals(type.getRawType())) {
+ final var args = type.getActualTypeArguments();
+ if (args.length == 1) {
+ final var arg = args[0];
+ if (arg != null) {
+ return arg;
+ }
+ }
+ }
+ return null;
+ }