From c63fe773195d09254deee03edc57daf985f4936c Mon Sep 17 00:00:00 2001 From: Christopher Tubbs Date: Thu, 30 Apr 2026 15:39:41 -0400 Subject: [PATCH] Revert "Support a java-11 compile target (#123)" This reverts commit 70d29df19bc1101635821bf514b49207f00651bd. --- README.md | 5 ----- .../accumulo/access/antlr4/Antlr4Tests.java | 12 +++++------ .../accumulo/access/AccessEvaluator.java | 5 ++++- .../accumulo/access/AccessExpression.java | 9 ++++++--- .../access/ParsedAccessExpression.java | 5 ++++- .../access/impl/AccessEvaluatorImpl.java | 2 +- .../accumulo/access/impl/AccessImpl.java | 2 +- .../accumulo/access/impl/CharsWrapper.java | 5 ++--- .../access/impl/AccessEvaluatorTest.java | 12 +++++------ .../access/examples/ParseExamples.java | 20 +++++++------------ pom.xml | 2 +- 11 files changed, 38 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index b6d4136..1aa81db 100644 --- a/README.md +++ b/README.md @@ -47,11 +47,6 @@ are package private and are not part of the public API. * [ExpressionType](modules/core/src/main/java/org/apache/accumulo/access/ParsedAccessExpression.java). * [Authorizations](modules/core/src/main/java/org/apache/accumulo/access/Authorizations.java). -`AccessEvaluator`, `AccessExpression`, and `ParsedAccessExpression` will be -sealed interfaces or classes in future releases that support class sealing. So, -users should not create their own implementations of these. Their -implementations are expected to be provided by this library only. - ## Getting Started Add the library to your CLASSPATH. For Maven, use: diff --git a/modules/antlr4-example/src/test/java/org/apache/accumulo/access/antlr4/Antlr4Tests.java b/modules/antlr4-example/src/test/java/org/apache/accumulo/access/antlr4/Antlr4Tests.java index f3bd662..1eecfd1 100644 --- a/modules/antlr4-example/src/test/java/org/apache/accumulo/access/antlr4/Antlr4Tests.java +++ b/modules/antlr4-example/src/test/java/org/apache/accumulo/access/antlr4/Antlr4Tests.java @@ -152,20 +152,20 @@ public void testCompareAntlrEvaluationAgainstAccessEvaluatorImpl() throws Except assertNotEquals(0, test.getExpressions().length); for (String expression : test.getExpressions()) { switch (test.getExpectedResult()) { - case ACCESSIBLE: + case ACCESSIBLE -> { assertTrue(evaluator.canAccess(expression), expression); assertTrue(antlr.canAccess(expression), expression); - break; - case INACCESSIBLE: + } + case INACCESSIBLE -> { assertFalse(evaluator.canAccess(expression), expression); assertFalse(antlr.canAccess(expression), expression); - break; - case ERROR: + } + case ERROR -> { assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(expression), expression); assertThrows(InvalidAccessExpressionException.class, () -> antlr.canAccess(expression), expression); - break; + } } } } diff --git a/modules/core/src/main/java/org/apache/accumulo/access/AccessEvaluator.java b/modules/core/src/main/java/org/apache/accumulo/access/AccessEvaluator.java index ab2fbd7..bc447bc 100644 --- a/modules/core/src/main/java/org/apache/accumulo/access/AccessEvaluator.java +++ b/modules/core/src/main/java/org/apache/accumulo/access/AccessEvaluator.java @@ -18,6 +18,9 @@ */ package org.apache.accumulo.access; +import org.apache.accumulo.access.impl.AccessEvaluatorImpl; +import org.apache.accumulo.access.impl.MultiAccessEvaluatorImpl; + /** * This class is used to decide if an entity with a given set of authorizations can access * subsequent access expressions. @@ -50,7 +53,7 @@ * @see Accumulo Access Documentation * @since 1.0.0 */ -public interface AccessEvaluator { +public sealed interface AccessEvaluator permits AccessEvaluatorImpl, MultiAccessEvaluatorImpl { /** * Evaluates an expression. diff --git a/modules/core/src/main/java/org/apache/accumulo/access/AccessExpression.java b/modules/core/src/main/java/org/apache/accumulo/access/AccessExpression.java index 61f97f9..7c1d68e 100644 --- a/modules/core/src/main/java/org/apache/accumulo/access/AccessExpression.java +++ b/modules/core/src/main/java/org/apache/accumulo/access/AccessExpression.java @@ -21,12 +21,15 @@ import java.io.Serializable; import java.util.Objects; +import org.apache.accumulo.access.impl.AccessExpressionImpl; + /** * An immutable wrapper for a validated access expression. * * @since 1.0.0 */ -public abstract class AccessExpression implements Serializable { +public sealed abstract class AccessExpression implements Serializable + permits AccessExpressionImpl, ParsedAccessExpression { private static final long serialVersionUID = 1L; @@ -50,8 +53,8 @@ protected AccessExpression() {} @Override public boolean equals(Object o) { - return this == o || (o instanceof AccessExpression - && Objects.equals(getExpression(), ((AccessExpression) o).getExpression())); + return this == o + || (o instanceof AccessExpression a && Objects.equals(getExpression(), a.getExpression())); } @Override diff --git a/modules/core/src/main/java/org/apache/accumulo/access/ParsedAccessExpression.java b/modules/core/src/main/java/org/apache/accumulo/access/ParsedAccessExpression.java index c098e77..4e53a16 100644 --- a/modules/core/src/main/java/org/apache/accumulo/access/ParsedAccessExpression.java +++ b/modules/core/src/main/java/org/apache/accumulo/access/ParsedAccessExpression.java @@ -20,6 +20,8 @@ import java.util.List; +import org.apache.accumulo.access.impl.ParsedAccessExpressionImpl; + /** * Instances of this class are immutable and wrap a verified access expression and a parse tree for * the access expression. To create an instance of this class call @@ -28,7 +30,8 @@ * * @since 1.0.0 */ -public abstract class ParsedAccessExpression extends AccessExpression { +public sealed abstract class ParsedAccessExpression extends AccessExpression + permits ParsedAccessExpressionImpl { private static final long serialVersionUID = 1L; diff --git a/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessEvaluatorImpl.java b/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessEvaluatorImpl.java index f1c7477..a568b4b 100644 --- a/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessEvaluatorImpl.java +++ b/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessEvaluatorImpl.java @@ -52,7 +52,7 @@ public final class AccessEvaluatorImpl implements AccessEvaluator { .andThen(auth -> wrappedAuths.add(new CharsWrapper(auth.toCharArray())))); this.authorizedPredicate = - auth -> auth instanceof CharsWrapper ? wrappedAuths.contains((CharsWrapper) auth) + auth -> auth instanceof CharsWrapper wrapped ? wrappedAuths.contains(wrapped) : wrappedAuths.contains(new CharsWrapper(auth.toString().toCharArray())); this.authorizationValidator = authorizationValidator; } diff --git a/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessImpl.java b/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessImpl.java index 355dacc..037dad5 100644 --- a/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessImpl.java +++ b/modules/core/src/main/java/org/apache/accumulo/access/impl/AccessImpl.java @@ -40,7 +40,7 @@ public class AccessImpl implements Access { private final AuthorizationValidator authValidator; private void validateAuthArgument(CharSequence auth) { - if (auth.length() == 0) { + if (auth.isEmpty()) { throw InvalidAuthorizationException.emptyString(); } if (!authValidator.test(auth, ANY)) { diff --git a/modules/core/src/main/java/org/apache/accumulo/access/impl/CharsWrapper.java b/modules/core/src/main/java/org/apache/accumulo/access/impl/CharsWrapper.java index a65c21b..a58554b 100644 --- a/modules/core/src/main/java/org/apache/accumulo/access/impl/CharsWrapper.java +++ b/modules/core/src/main/java/org/apache/accumulo/access/impl/CharsWrapper.java @@ -69,9 +69,8 @@ public int hashCode() { @Override public boolean equals(Object o) { - return this == o || (o instanceof CharsWrapper && length() == ((CharsWrapper) o).length() - && Arrays.equals(wrapped, offset, offset + len, ((CharsWrapper) o).wrapped, - ((CharsWrapper) o).offset, ((CharsWrapper) o).offset + ((CharsWrapper) o).len)); + return this == o || (o instanceof CharsWrapper obs && length() == obs.length() && Arrays + .equals(wrapped, offset, offset + len, obs.wrapped, obs.offset, obs.offset + obs.len)); } @Override diff --git a/modules/core/src/test/java/org/apache/accumulo/access/impl/AccessEvaluatorTest.java b/modules/core/src/test/java/org/apache/accumulo/access/impl/AccessEvaluatorTest.java index 6910ac2..c170c95 100644 --- a/modules/core/src/test/java/org/apache/accumulo/access/impl/AccessEvaluatorTest.java +++ b/modules/core/src/test/java/org/apache/accumulo/access/impl/AccessEvaluatorTest.java @@ -93,7 +93,7 @@ private static void runTestCases(Access accumuloAccess, TestDataSet testSet, } switch (tests.getExpectedResult()) { - case ACCESSIBLE: + case ACCESSIBLE -> { assertTrue(evaluator.canAccess(expression), expression); assertTrue(evaluator.canAccess(accumuloAccess.newExpression(expression)), expression); assertTrue(evaluator.canAccess(accumuloAccess.newParsedExpression(expression)), @@ -101,8 +101,8 @@ private static void runTestCases(Access accumuloAccess, TestDataSet testSet, assertTrue( evaluator.canAccess(accumuloAccess.newParsedExpression(expression).getExpression()), expression); - break; - case INACCESSIBLE: + } + case INACCESSIBLE -> { assertFalse(evaluator.canAccess(expression), expression); assertFalse(evaluator.canAccess(accumuloAccess.newExpression(expression)), expression); assertFalse(evaluator.canAccess(accumuloAccess.newParsedExpression(expression)), @@ -110,8 +110,8 @@ private static void runTestCases(Access accumuloAccess, TestDataSet testSet, assertFalse( evaluator.canAccess(accumuloAccess.newParsedExpression(expression).getExpression()), expression); - break; - case ERROR: + } + case ERROR -> { assertThrows(InvalidAccessExpressionException.class, () -> evaluator.canAccess(expression), expression); assertThrows(InvalidAccessExpressionException.class, @@ -120,7 +120,7 @@ private static void runTestCases(Access accumuloAccess, TestDataSet testSet, () -> accumuloAccess.newExpression(expression), expression); assertThrows(InvalidAccessExpressionException.class, () -> accumuloAccess.newParsedExpression(expression), expression); - break; + } } } } diff --git a/modules/examples/src/main/java/org/apache/accumulo/access/examples/ParseExamples.java b/modules/examples/src/main/java/org/apache/accumulo/access/examples/ParseExamples.java index d36402d..8dd0b3e 100644 --- a/modules/examples/src/main/java/org/apache/accumulo/access/examples/ParseExamples.java +++ b/modules/examples/src/main/java/org/apache/accumulo/access/examples/ParseExamples.java @@ -85,17 +85,12 @@ public static class NormalizedExpression implements Comparable 1; + case OR -> 2; + case AND -> 3; + case EMPTY -> throw new IllegalArgumentException("Unexpected type " + type); + }; } @Override @@ -116,8 +111,7 @@ public int compareTo(NormalizedExpression o) { @Override public boolean equals(Object o) { - return this == o - || (o instanceof NormalizedExpression && compareTo((NormalizedExpression) o) == 0); + return this == o || (o instanceof NormalizedExpression n && compareTo(n) == 0); } @Override diff --git a/pom.xml b/pom.xml index 546fbc3..b61aa15 100644 --- a/pom.xml +++ b/pom.xml @@ -116,7 +116,7 @@ specific language governing permissions and limitations under the License. ]]> false - 11 + 17 true true