aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRawi01 <Rawi01@users.noreply.github.com>2021-08-18 19:36:50 +0200
committerRawi01 <Rawi01@users.noreply.github.com>2021-08-18 20:20:57 +0200
commitf516dd8ab3186121c4a880444302e2f980f393f8 (patch)
tree2e3647caf9dc825b86c7b56bbfd7cd99b885ec1c
parentaab88086565355f2740b287cf6a8c28d3329150e (diff)
downloadlombok-f516dd8ab3186121c4a880444302e2f980f393f8.tar.gz
lombok-f516dd8ab3186121c4a880444302e2f980f393f8.tar.bz2
lombok-f516dd8ab3186121c4a880444302e2f980f393f8.zip
[jdk17] Add support for sealed classes
-rw-r--r--src/delombok/lombok/delombok/PrettyPrinter.java8
-rw-r--r--src/utils/lombok/javac/Java14Flags.java26
-rw-r--r--src/utils/lombok/javac/Javac.java2
-rw-r--r--test/pretty/resource/after/Sealed.java16
-rw-r--r--test/pretty/resource/before/Sealed.java17
5 files changed, 43 insertions, 26 deletions
diff --git a/src/delombok/lombok/delombok/PrettyPrinter.java b/src/delombok/lombok/delombok/PrettyPrinter.java
index 2efe05c2..605b9391 100644
--- a/src/delombok/lombok/delombok/PrettyPrinter.java
+++ b/src/delombok/lombok/delombok/PrettyPrinter.java
@@ -545,6 +545,12 @@ public class PrettyPrinter extends JCTree.Visitor {
print(tree.implementing, ", ");
}
+ List<JCExpression> permitting = readObject(tree, "permitting", List.<JCExpression>nil());
+ if (permitting.nonEmpty()) {
+ print(" permits ");
+ print(permitting, ", ");
+ }
+
println(" {");
indent++;
printClassMembers(tree.defs, isEnum, isInterface);
@@ -1016,6 +1022,8 @@ public class PrettyPrinter extends JCTree.Visitor {
if ((v & TRANSIENT) != 0) print("transient ");
if ((v & NATIVE) != 0) print("native ");
if ((v & ABSTRACT) != 0) print("abstract ");
+ if ((v & SEALED) != 0) print("sealed ");
+ if ((v & NON_SEALED) != 0) print("non-sealed ");
if ((v & STRICTFP) != 0) print("strictfp ");
if ((v & DEFAULT) != 0 && (v & INTERFACE) == 0) print("default ");
}
diff --git a/src/utils/lombok/javac/Java14Flags.java b/src/utils/lombok/javac/Java14Flags.java
deleted file mode 100644
index 0d565dca..00000000
--- a/src/utils/lombok/javac/Java14Flags.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package lombok.javac;
-
-public class Java14Flags {
- private Java14Flags() { }
-
- /**
- * Flag to indicate that a class is a record. The flag is also used to mark fields that are
- * part of the state vector of a record and to mark the canonical constructor
- */
- public static final long RECORD = 1L<<61; // ClassSymbols, MethodSymbols and VarSymbols
-
- /**
- * Flag to mark a record constructor as a compact one
- */
- public static final long COMPACT_RECORD_CONSTRUCTOR = 1L<<51; // MethodSymbols only
-
- /**
- * Flag to mark a record field that was not initialized in the compact constructor
- */
- public static final long UNINITIALIZED_FIELD= 1L<<51; // VarSymbols only
-
- /** Flag is set for compiler-generated record members, it could be appplied to
- * accessors and fields
- */
- public static final int GENERATED_MEMBER = 1<<24; // MethodSymbols and VarSymbols
-}
diff --git a/src/utils/lombok/javac/Javac.java b/src/utils/lombok/javac/Javac.java
index d9fcc4f2..3fa0fbb5 100644
--- a/src/utils/lombok/javac/Javac.java
+++ b/src/utils/lombok/javac/Javac.java
@@ -80,6 +80,8 @@ public class Javac {
public static final long COMPACT_RECORD_CONSTRUCTOR = 1L << 51; // MethodSymbols (the 'implicit' many-args constructor that records have)
public static final long UNINITIALIZED_FIELD = 1L << 51; // VarSymbols (To identify fields that the compact record constructor won't initialize)
public static final long GENERATED_MEMBER = 1L << 24; // MethodSymbols, VarSymbols (marks methods and the constructor generated in records)
+ public static final long SEALED = 1L << 62; // ClassSymbols (Flag to indicate sealed class/interface declaration)
+ public static final long NON_SEALED = 1L << 63; // ClassSymbols (Flag to indicate that the class/interface was declared with the non-sealed modifier)
/**
* Returns the version of this java compiler, i.e. the JDK that it shipped in. For example, for javac v1.7, this returns {@code 7}.
diff --git a/test/pretty/resource/after/Sealed.java b/test/pretty/resource/after/Sealed.java
new file mode 100644
index 00000000..15096034
--- /dev/null
+++ b/test/pretty/resource/after/Sealed.java
@@ -0,0 +1,16 @@
+public class Sealed {
+ public abstract sealed class Parent permits Child1, Child2 {
+ }
+
+ public final class Child1 extends Parent {
+ }
+
+ public abstract non-sealed class Child2 extends Parent {
+ }
+
+ public sealed interface SealedInterface permits ChildInterface1 {
+ }
+
+ public non-sealed interface ChildInterface1 extends SealedInterface {
+ }
+} \ No newline at end of file
diff --git a/test/pretty/resource/before/Sealed.java b/test/pretty/resource/before/Sealed.java
new file mode 100644
index 00000000..46828627
--- /dev/null
+++ b/test/pretty/resource/before/Sealed.java
@@ -0,0 +1,17 @@
+// version 15:
+public class Sealed {
+ public abstract sealed class Parent permits Child1, Child2 {
+ }
+
+ public final class Child1 extends Parent {
+ }
+
+ public abstract non-sealed class Child2 extends Parent {
+ }
+
+ public sealed interface SealedInterface permits ChildInterface1 {
+ }
+
+ public non-sealed interface ChildInterface1 extends SealedInterface {
+ }
+} \ No newline at end of file