[jdk22] Adds support for unnamed variables (JEP 456)

This commit is contained in:
Rawi01 authored and Roel Spilker committed 2024-03-18 00:40:39 +01:00
1 parent a54ec7005e
commit 23307eb8d1
3 files changed
+151 -1

No files matched your search

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2016-2021 The Project Lombok Authors.
* Copyright (C) 2016-2024 The Project Lombok Authors.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -263,6 +263,14 @@ public class PrettyPrinter extends JCTree.Visitor {
return false;
}
private void print(Name name) {
if (name.isEmpty()) {
print("_");
} else {
print(name.toString());
}
}
private void print(CharSequence s) {
boolean align = needsAlign;
if (needsNewLine && !onNewLine) println();
@@ -1722,6 +1730,8 @@ public class PrettyPrinter extends JCTree.Visitor {
printPatternCaseLabel(tree);
} else if (className.endsWith("$JCRecordPattern")) { // Introduced in JDK19
printRecordPattern(tree);
} else if (className.endsWith("$JCAnyPattern")) { // Introduced in JDK22
print("_");
} else {
throw new AssertionError("Unhandled tree type: " + tree.getClass() + ": " + tree);
}
@@ -0,0 +1,70 @@
// version 22:
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Stream;
record Box<T>(T content) {
}
record Pair<T, U>(T first, U second) {
}
public class UnnamedVariables {
void enhancedLoop() {
for (String _ : Arrays.asList("")) {
}
}
void initializationInForLoop() {
for (int i = 0, _ = Integer.MAX_VALUE; i < 10; i++) {
}
}
void assignment() {
var _ = 1;
}
void catchBlock() {
try {
} catch (Exception _) {
}
}
void tryWithResources() {
try (var _ = new Scanner("")) {
}
}
void lambda() {
Stream.of(1).forEach(_ -> {
});
}
Object switchStatement(Object o) {
return switch (o) {
case String _, Integer _ -> o;
case Long _ -> o;
default -> o;
};
}
void recordPattern(Object o) {
if (o instanceof Pair(Box _, Box(Integer _))) {
}
if (o instanceof Box(String _)) {
}
if (o instanceof Box(var _)) {
}
if (o instanceof Box(_)) {
}
}
Object recordPatternSwitch(Object o) {
return switch (o) {
case Box(String _), Box(Integer _) -> o;
case Box(Long _) -> o;
case Box(_) -> o;
default -> o;
};
}
}
@@ -0,0 +1,70 @@
// version 22:
import java.util.Arrays;
import java.util.Scanner;
import java.util.stream.Stream;
record Box<T>(T content) {
}
record Pair<T, U>(T first, U second) {
}
public class UnnamedVariables {
void enhancedLoop() {
for (String _ : Arrays.asList("")) {
}
}
void initializationInForLoop() {
for (int i = 0, _ = Integer.MAX_VALUE; i < 10; i++) {
}
}
void assignment() {
var _ = 1;
}
void catchBlock() {
try {
} catch (Exception _) {
}
}
void tryWithResources() {
try (var _ = new Scanner("")) {
}
}
void lambda() {
Stream.of(1).forEach(_ -> {
});
}
Object switchStatement(Object o) {
return switch (o) {
case String _, Integer _ -> o;
case Long _ -> o;
default -> o;
};
}
void recordPattern(Object o) {
if (o instanceof Pair(Box _, Box(Integer _))) {
}
if (o instanceof Box(String _)) {
}
if (o instanceof Box(var _)) {
}
if (o instanceof Box(_)) {
}
}
Object recordPatternSwitch(Object o) {
return switch (o) {
case Box(String _), Box(Integer _) -> o;
case Box(Long _) -> o;
case Box(_) -> o;
default -> o;
};
}
}