import static com.google.common.base.Preconditions.checkArgument;
-import com.google.common.annotations.Beta;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.concepts.AbstractSimpleIdentifiable;
* Abstract base class for {@link FileGeneratorFactory} implementations. Its constructor enforces no spaces in
* identifier.
*/
-@Beta
@NonNullByDefault
public abstract class AbstractFileGeneratorFactory extends AbstractSimpleIdentifiable<String>
implements FileGeneratorFactory {
import static java.util.Objects.requireNonNull;
-import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.base.MoreObjects.ToStringHelper;
import org.eclipse.jdt.annotation.NonNullByDefault;
*
* @author Robert Varga
*/
-@Beta
@NonNullByDefault
public abstract class AbstractGeneratedFile implements GeneratedFile {
private final GeneratedFileLifecycle lifecycle;
*/
package org.opendaylight.yangtools.plugin.generator.api;
-import com.google.common.annotations.Beta;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
*
* @author Robert Varga
*/
-@Beta
@NonNullByDefault
public abstract class AbstractGeneratedTextFile extends AbstractGeneratedFile {
protected AbstractGeneratedTextFile(final GeneratedFileLifecycle lifecycle) {
@Override
public final void writeBody(final OutputStream output) throws IOException {
- try (Writer writer = new OutputStreamWriter(output, StandardCharsets.UTF_8)) {
- try (BufferedWriter buffered = new BufferedWriter(writer)) {
+ try (var writer = new OutputStreamWriter(output, StandardCharsets.UTF_8)) {
+ try (var buffered = new BufferedWriter(writer)) {
writeBody(buffered);
}
}
*/
package org.opendaylight.yangtools.plugin.generator.api;
-import com.google.common.annotations.Beta;
import com.google.common.collect.Table;
import java.util.Set;
import org.eclipse.jdt.annotation.NonNullByDefault;
*
* @author Robert Varga
*/
-@Beta
@NonNullByDefault
public interface FileGenerator {
/**
* Indicate import resolution mode this code generator requires. Default implementation indicates
* {@link ImportResolutionMode#REVISION_EXACT_OR_LATEST}.
*
- * @return Required import resolution mode, null if the code generator does not care.
+ * @implNote
+ * Default implementation returns {@link ImportResolutionMode#REVISION_EXACT_OR_LATEST}.
+ *
+ * @return Required import resolution mode.
*/
default ImportResolutionMode importResolutionMode() {
return ImportResolutionMode.REVISION_EXACT_OR_LATEST;
/**
* {@link EffectiveModelContext} can be assembled in multiple ways, we hold known modes here.
*/
- @Beta
enum ImportResolutionMode {
/**
* Standard, RFC6020 and RFC7950 compliant mode. Imports are satisfied by exact revision match (if specified),
import static java.util.Objects.requireNonNull;
-import com.google.common.annotations.Beta;
+import java.io.Serial;
/**
* An exception reporting a problem with file generation. This exception should be reported when exception chaining
* occurs.
*/
-@Beta
public class FileGeneratorException extends Exception {
+ @Serial
private static final long serialVersionUID = 1L;
public FileGeneratorException(final String message) {
*/
package org.opendaylight.yangtools.plugin.generator.api;
-import com.google.common.annotations.Beta;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.opendaylight.yangtools.concepts.Identifiable;
/**
* A {@link java.util.ServiceLoader} factory for instantiating {@link FileGenerator} instances.
- *
- * @author Robert Varga
*/
-@Beta
@NonNullByDefault
public interface FileGeneratorFactory extends Identifiable<String> {
/**
*/
package org.opendaylight.yangtools.plugin.generator.api;
-import com.google.common.annotations.Beta;
import com.google.common.io.ByteSource;
import com.google.common.io.CharSource;
import java.io.IOException;
/**
* The contents of a generated file and its {@link GeneratedFileLifecycle}.
- *
- * @author Robert Varga
*/
-@Beta
@NonNullByDefault
public interface GeneratedFile extends Immutable {
/**
*
* @param output stream where to write the output
* @throws IOException when the stream reports an IOException
+ * @throws NullPointerException if {@code output} is {@code null}
*/
void writeBody(OutputStream output) throws IOException;
* @param lifecycle File lifecycle
* @param body File body
* @return A GeneratedFile.
- * @throws NullPointerException if any argument is null
+ * @throws NullPointerException if any argument is {@code null}
*/
static GeneratedFile of(final GeneratedFileLifecycle lifecycle, final CharSequence body) {
return new CharSeqGeneratedTextFile(lifecycle, body);
* @param lifecycle File lifecycle
* @param body File body
* @return A GeneratedFile.
- * @throws NullPointerException if any argument is null
+ * @throws NullPointerException if any argument is {@code null}
*/
static GeneratedFile of(final GeneratedFileLifecycle lifecycle, final CharSource body) {
return new CharSourceGeneratedTextFile(lifecycle, body);
* @param lifecycle File lifecycle
* @param body File body
* @return A GeneratedFile.
- * @throws NullPointerException if any argument is null
+ * @throws NullPointerException if any argument is {@code null}
*/
static GeneratedFile of(final GeneratedFileLifecycle lifecycle, final ByteSource body) {
return new ByteSourceGeneratedFile(lifecycle, body);
*/
package org.opendaylight.yangtools.plugin.generator.api;
-import com.google.common.annotations.Beta;
import org.eclipse.jdt.annotation.NonNullByDefault;
/**
* Lifecycle policy of a generated file. This governs how existing files interact with newly-generated bodies.
- *
- * @author Robert Varga
*/
-@Beta
@NonNullByDefault
public enum GeneratedFileLifecycle {
/**
import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
-import com.google.common.annotations.Beta;
import com.google.common.base.CharMatcher;
import com.google.common.base.MoreObjects;
import java.io.File;
/**
* A relative path to a generated file.
- *
- * @author Robert Varga
*/
-@Beta
@NonNullByDefault
public final class GeneratedFilePath {
public static final char SEPARATOR = '/';
@Override
public boolean equals(final @Nullable Object obj) {
- return this == obj || obj instanceof GeneratedFilePath && path.equals(((GeneratedFilePath) obj).path);
+ return this == obj || obj instanceof GeneratedFilePath other && path.equals(other.path);
}
@Override
import static com.google.common.base.Preconditions.checkArgument;
import static java.util.Objects.requireNonNull;
-import com.google.common.annotations.Beta;
import com.google.common.base.MoreObjects;
import com.google.common.collect.ImmutableMap;
import org.eclipse.jdt.annotation.NonNullByDefault;
* output structures. Notably they must handle pre-defined types, allow end users to specify mapping of custom types.
* They need to deal with runtime mismatches involving between FileGenerators and user's expectations, for example by
* issuing warnings when a mismatch is detected.
- *
- * @author Robert Varga
*/
-@Beta
@NonNullByDefault
public final class GeneratedFileType {
/**
public static GeneratedFileType of(final String name) {
checkArgument(!name.isEmpty());
- final @Nullable GeneratedFileType wellKnown = WELL_KNOWN.get(name);
+ final var wellKnown = WELL_KNOWN.get(name);
return wellKnown != null ? wellKnown : new GeneratedFileType(name);
}
@Override
public boolean equals(final @Nullable Object obj) {
- return this == obj || obj instanceof GeneratedFileType && name.equals(((GeneratedFileType) obj).name);
+ return this == obj || obj instanceof GeneratedFileType other && name.equals(other.name);
}
@Override
*/
package org.opendaylight.yangtools.plugin.generator.api;
-import com.google.common.annotations.Beta;
import java.util.Optional;
import org.opendaylight.yangtools.yang.model.api.ModuleLike;
import org.opendaylight.yangtools.yang.model.repo.api.SchemaSourceRepresentation;
* An SPI-level interface to find the schema source for a particular YANG module, as packaged in the final artifact.
* The module must be part of the current resolution context.
*/
-@Beta
public interface ModuleResourceResolver {
/**
* Find the path of the packaged resource which corresponds to the specified module in the specified representation.
* @param module Requested module
* @param representation Requested representation
* @return Path to packaged resource
- * @throws NullPointerException if any argument is null
+ * @throws NullPointerException if any argument is {@code null}
* @throws IllegalArgumentException if the requested representation is not supported by this resolver
*/
Optional<String> findModuleResourcePath(ModuleLike module,