import java.util.List;
import java.util.Map;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.plexus.build.incremental.BuildContext;
private static final Logger LOG = LoggerFactory.getLogger(IncrementalBuildSupport.class);
private static final List<String> TRANSIENT_DIRECTORIES = List.of("generated-resources", "generated-sources");
+ private final @NonNull YangToSourcesState previousState;
private final @NonNull ImmutableMap<String, FileGeneratorArg> fileGeneratorArgs;
private final @NonNull FileStateSet projectYangs;
private final @NonNull FileStateSet dependencyYangs;
- private final @Nullable YangToSourcesState previousState;
-
IncrementalBuildSupport(final YangToSourcesState previousState,
final ImmutableMap<String, FileGeneratorArg> fileGeneratorArgs, final FileStateSet projectYangs,
final FileStateSet dependencyYangs) {
- this.previousState = previousState;
+ this.previousState = requireNonNull(previousState);
this.fileGeneratorArgs = requireNonNull(fileGeneratorArgs);
this.projectYangs = requireNonNull(projectYangs);
this.dependencyYangs = requireNonNull(dependencyYangs);
* @return {@code true} if restored state is different from currently-observed state
*/
boolean inputsChanged() {
- // Local variable to aid null analysis
- final var local = previousState;
- if (local == null) {
- LOG.debug("{}: no previous input state", YangToSourcesProcessor.LOG_PREFIX);
- return true;
- }
- if (!fileGeneratorArgs.equals(local.fileGeneratorArgs())) {
+ if (!fileGeneratorArgs.equals(previousState.fileGeneratorArgs())) {
LOG.debug("{}: file generator arguments changed from {} to {}", YangToSourcesProcessor.LOG_PREFIX,
- fileGeneratorArgs, local.fileGeneratorArgs());
+ fileGeneratorArgs, previousState.fileGeneratorArgs());
return true;
}
- if (!projectYangs.equals(local.projectYangs())) {
+ if (!projectYangs.equals(previousState.projectYangs())) {
LOG.debug("{}: project YANG files changed", YangToSourcesProcessor.LOG_PREFIX);
return true;
}
- if (!dependencyYangs.equals(local.dependencyYangs())) {
+ if (!dependencyYangs.equals(previousState.dependencyYangs())) {
LOG.debug("{}: dependency YANG files changed", YangToSourcesProcessor.LOG_PREFIX);
return true;
}
* @return {@code true} if restored state and the build directory differ
*/
boolean outputsChanged(final String projectBuildDirectory) throws IOException {
- // Local variable to aid null analysis
- final var local = previousState;
- if (local == null) {
- LOG.debug("{}: no previous output state", YangToSourcesProcessor.LOG_PREFIX);
- return true;
- }
-
// Compare explicit mentions first
- final var outputFiles = local.outputFiles().fileStates();
+ final var outputFiles = previousState.outputFiles().fileStates();
if (outputsChanged(outputFiles.values())) {
return true;
}
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorException;
import org.opendaylight.yangtools.plugin.generator.api.FileGeneratorFactory;
import org.opendaylight.yangtools.yang.common.YangConstants;
}
void execute() throws MojoExecutionException, MojoFailureException {
- final YangToSourcesState prevState;
+ YangToSourcesState prevState;
try {
prevState = stateStorage.loadState();
} catch (IOException e) {
}
if (prevState == null) {
LOG.debug("{} no previous execution state present", LOG_PREFIX);
+ prevState = new YangToSourcesState(ImmutableMap.of(),
+ FileStateSet.empty(), FileStateSet.empty(), FileStateSet.empty());
}
// Collect all files in the current project.
}
}
- private void wipeAllState(final @Nullable YangToSourcesState prevState) throws MojoExecutionException {
- if (prevState != null) {
- for (var file : prevState.outputFiles().fileStates().keySet()) {
- try {
- Files.deleteIfExists(Path.of(file));
- } catch (IOException e) {
- throw new MojoExecutionException("Failed to remove file " + file, e);
- }
- }
+ private void wipeAllState(final YangToSourcesState prevState) throws MojoExecutionException {
+ try {
+ prevState.deleteOutputFiles();
+ } catch (IOException e) {
+ throw new MojoExecutionException("Failed to delete output files", e);
}
-
try {
stateStorage.deleteState();
} catch (IOException e) {
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.Collection;
import org.eclipse.jdt.annotation.NonNull;
import org.opendaylight.yangtools.concepts.WritableObject;
FileStateSet.readFrom(in), FileStateSet.readFrom(in), FileStateSet.readFrom(in));
}
- static @NonNull YangToSourcesState empty() {
- return new YangToSourcesState(ImmutableMap.of(),
- FileStateSet.empty(), FileStateSet.empty(), FileStateSet.empty());
- }
-
@Override
public void writeTo(final DataOutput out) throws IOException {
out.writeInt(MAGIC);
outputFiles.writeTo(out);
}
+ /**
+ * Delete all output files mentioned in {@link #outputFiles}.
+ *
+ * @throws IOException if any error occurs
+ */
+ void deleteOutputFiles() throws IOException {
+ for (var file : outputFiles.fileStates().keySet()) {
+ Files.deleteIfExists(Path.of(file));
+ }
+ }
+
private static void writeConfigurations(final DataOutput out, final Collection<FileGeneratorArg> configurations)
throws IOException {
out.writeInt(configurations.size());