import com.google.common.base.MoreObjects;
import org.opendaylight.yangtools.concepts.Immutable;
-abstract class AbstractIRObject implements Immutable {
+abstract sealed class AbstractIRObject implements Immutable permits IRArgument, IRKeyword, IRStatement {
+ @Override
+ public abstract int hashCode();
+
+ @Override
+ public abstract boolean equals(Object obj);
+
@Override
public final String toString() {
return MoreObjects.toStringHelper(this).add("fragment", toYangFragment(new StringBuilder())).toString();
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
-import java.util.Iterator;
import java.util.List;
import org.eclipse.jdt.annotation.NonNull;
* </ul>
*/
@Beta
-public abstract class IRArgument extends AbstractIRObject {
+public abstract sealed class IRArgument extends AbstractIRObject {
/**
* An argument composed of multiple concatenated parts.
*/
return parts;
}
+ @Override
+ public int hashCode() {
+ return parts.hashCode();
+ }
+
+ @Override
+ public boolean equals(final Object obj) {
+ return this == obj || obj instanceof Concatenation other && parts.equals(other.parts);
+ }
+
@Override
StringBuilder toYangFragment(final StringBuilder sb) {
- final Iterator<Single> it = parts.iterator();
+ final var it = parts.iterator();
it.next().toYangFragment(sb);
while (it.hasNext()) {
it.next().toYangFragment(sb.append(" + "));
* The subclasses may very much change, in terms of both naming and function, to support whatever StatementFactory
* ends up doing.
*/
- public abstract static class Single extends IRArgument {
+ public abstract static sealed class Single extends IRArgument {
private final @NonNull String string;
Single(final String string) {
return this instanceof Identifier;
}
+ @Override
+ public final int hashCode() {
+ return string.hashCode();
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ return this == obj || obj != null && getClass().equals(obj.getClass())
+ && string.equals(((Single) obj).string);
+ }
+
@Override
StringBuilder toYangFragment(final StringBuilder sb) {
return sb.append(string);
import static java.util.Objects.requireNonNull;
import com.google.common.annotations.Beta;
+import java.util.Objects;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.opendaylight.yangtools.yang.common.AbstractQName;
* that connection, rather than following the RFC-assigned names.
*/
@Beta
-public abstract class IRKeyword extends AbstractIRObject {
+public abstract sealed class IRKeyword extends AbstractIRObject {
@Beta
public static final class Qualified extends IRKeyword {
private final @NonNull String prefix;
private final @NonNull String identifier;
IRKeyword(final String localName) {
- this.identifier = requireNonNull(localName);
+ identifier = requireNonNull(localName);
}
/**
* @return Declaration string.
*/
public abstract @NonNull String asStringDeclaration();
+
+ @Override
+ public final int hashCode() {
+ return Objects.hashCode(prefix()) * 31 + identifier.hashCode();
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ return this == obj || obj instanceof IRKeyword other && identifier.equals(other.identifier)
+ && Objects.equals(prefix(), other.prefix());
+ }
}
import com.google.common.annotations.Beta;
import com.google.common.collect.ImmutableList;
import java.util.List;
+import java.util.Objects;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
* </ul>
*/
@Beta
-public abstract class IRStatement extends AbstractIRObject {
+public abstract sealed class IRStatement extends AbstractIRObject
+ permits IRStatement022, IRStatement031, IRStatement044 {
private final @NonNull IRKeyword keyword;
private final IRArgument argument;
argument.toYangFragment(sb.append(' '));
}
- final List<? extends IRStatement> statements = statements();
+ final var statements = statements();
if (statements.isEmpty()) {
return sb.append(';');
}
}
return sb.append('}');
}
+
+ @Override
+ public final int hashCode() {
+ return Objects.hash(keyword, argument, statements()) ^ startLine() ^ startColumn();
+ }
+
+ @Override
+ public final boolean equals(final Object obj) {
+ return obj == this || obj instanceof IRStatement other && keyword.equals(other.keyword)
+ && Objects.equals(argument, other.argument) && startLine() == other.startLine()
+ && startColumn() == other.startColumn() && statements().equals(other.statements());
+ }
}
*/
package org.opendaylight.yangtools.yang.parser.rfc7950.ir;
-class IRStatement044 extends IRStatement {
+sealed class IRStatement044 extends IRStatement permits IRStatement144, IRStatementL44 {
private final int startLine;
private final int startColumn;