*/
package org.opendaylight.yangtools.yang.parser.spi.meta;
+import static java.util.Objects.requireNonNull;
+
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import org.eclipse.jdt.annotation.NonNullByDefault;
import org.eclipse.jdt.annotation.Nullable;
@NonNullByDefault
-@SuppressFBWarnings("NP_NULL_PARAM_DEREF_NONVIRTUAL")
public enum ModelProcessingPhase {
- INIT(null),
+ INIT(),
/**
* Preliminary cross-source relationship resolution phase which collects available module names and module
private final @Nullable ModelProcessingPhase previousPhase;
- ModelProcessingPhase(final @Nullable ModelProcessingPhase previous) {
- this.previousPhase = previous;
+ @SuppressFBWarnings(value = "NP_STORE_INTO_NONNULL_FIELD",
+ justification = "https://github.com/spotbugs/spotbugs/issues/743")
+ ModelProcessingPhase() {
+ previousPhase = null;
+ }
+
+ ModelProcessingPhase(final ModelProcessingPhase previousPhase) {
+ this.previousPhase = requireNonNull(previousPhase);
}
+ /**
+ * Return the preceding phase, or null if this phase is the first one.
+ *
+ * @return Preceding phase, if there is one
+ */
public @Nullable ModelProcessingPhase getPreviousPhase() {
return previousPhase;
}
+
+ /**
+ * Determine whether this processing phase is implied to have completed by completion of some other phase.
+ * Algebraically this means that other is not null and is either this phase or its {@link #getPreviousPhase()} chain
+ * contains this phase.
+ *
+ * @param other Other phase
+ * @return True if this phase completes no later than specified phase.
+ */
+ public boolean isCompletedBy(final @Nullable ModelProcessingPhase other) {
+ return other != null && ordinal() <= other.ordinal();
+ }
}