Skip to content

Commit 45906ed

Browse files
authored
Merge pull request google#2604 from tomball/master
Fixed testSkipTreeKindImport() translator test, updates build to JDK 21 minimum.
2 parents 7ef8eae + 5ca72ae commit 45906ed

7 files changed

Lines changed: 220 additions & 250 deletions

File tree

.github/workflows/main.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@ jobs:
1717
MAKE_CMD: "env TRANSLATE_GLOBAL_FLAGS=--swift-friendly ENV_J2OBJC_ARCHS=macosx_iphone64 make -j32"
1818

1919
steps:
20-
- name: java_17_env
21-
run: echo "JAVA_17_HOME=$(/usr/libexec/java_home -v 17)" >> $GITHUB_ENV
20+
- name: java_21_env
21+
run: echo "JAVA_21_HOME=$(/usr/libexec/java_home -v 21)" >> $GITHUB_ENV
2222

2323
- uses: actions/checkout@v2
2424

2525
# Build everything but protobuf targets, which require that the public
2626
# protobuf distribution be installed.
2727
- name: build_all
28-
run: $MAKE_CMD JAVA_HOME=$JAVA_17_HOME frameworks examples_dist
28+
run: $MAKE_CMD JAVA_HOME=$JAVA_21_HOME frameworks examples_dist
2929

3030
# Test command-line tools.
3131
- name: test_tools
32-
run: $MAKE_CMD JAVA_HOME=$JAVA_17_HOME test_translator test_cycle_finder test_jre_cycles
32+
run: $MAKE_CMD JAVA_HOME=$JAVA_21_HOME test_translator test_cycle_finder test_jre_cycles

make/common.mk

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -178,19 +178,11 @@ endif
178178
TRANSLATOR_DEPS = $(DIST_DIR)/j2objc $(DIST_JAR_DIR)/j2objc.jar
179179

180180
ifndef JAVA_HOME
181-
JAVA_HOME = $(shell /usr/libexec/java_home -v 17)
181+
JAVA_HOME = $(shell /usr/libexec/java_home -v 21)
182182
endif
183183
JAVA = $(JAVA_HOME)/bin/java
184184
JAVAC = $(JAVA_HOME)/bin/javac
185-
ifneq (,$(findstring build 17, $(shell $(JAVA) -version 2>&1)))
186-
JAVA_VERSION = 17
187-
else ifneq (,$(findstring build 18, $(shell $(JAVA) -version 2>&1)))
188-
JAVA_VERSION = 18
189-
else ifneq (,$(findstring build 19, $(shell $(JAVA) -version 2>&1)))
190-
JAVA_VERSION = 19
191-
else ifneq (,$(findstring build 20, $(shell $(JAVA) -version 2>&1)))
192-
JAVA_VERSION = 20
193-
else ifneq (,$(findstring build 21, $(shell $(JAVA) -version 2>&1)))
185+
ifneq (,$(findstring build 21, $(shell $(JAVA) -version 2>&1)))
194186
JAVA_VERSION = 21
195187
else ifneq (,$(findstring build 22, $(shell $(JAVA) -version 2>&1)))
196188
JAVA_VERSION = 22
@@ -201,7 +193,7 @@ JAVA_VERSION = 24
201193
else ifneq (,$(findstring build 25, $(shell $(JAVA) -version 2>&1)))
202194
JAVA_VERSION = 25
203195
else
204-
$(error JDK not supported. Please set JAVA_HOME to JDK 17 or higher.)
196+
$(error JDK not supported. Please set JAVA_HOME to JDK 21 or higher.)
205197
endif
206198

207199
# Used to build JRE module.

scripts/j2objc.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ else
5555
readonly JAVA=`which java`
5656
fi
5757

58-
SUPPORTED_JAVA_VERSIONS=(17 18 19 20 21 22 23 24 25)
58+
SUPPORTED_JAVA_VERSIONS=(21 22 23 24 25)
5959
JAVA_VERSION=0
6060
for version in ${SUPPORTED_JAVA_VERSIONS[@]}; do
6161
${JAVA} -version 2>&1 | fgrep -q "build ${version}"

translator/src/test/java/com/google/devtools/j2objc/GenerationTest.java

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ public abstract class GenerationTest extends TestCase {
100100
@Override
101101
protected void setUp() throws IOException {
102102
tempDir = FileUtil.createTempDir("testout");
103-
SourceVersion.setMaxSupportedVersion(SourceVersion.JAVA_17);
103+
SourceVersion.setMaxSupportedVersion(SourceVersion.JAVA_21);
104104
loadOptions();
105105
createParser();
106106
}
@@ -799,14 +799,6 @@ protected interface TestLambda {
799799
void run() throws IOException;
800800
}
801801

802-
protected void testOnJava21OrAbove(TestLambda test) throws IOException {
803-
if (Runtime.version().feature() >= 21) {
804-
SourceVersion.setMaxSupportedVersion(SourceVersion.JAVA_21);
805-
options.setSourceVersion(SourceVersion.JAVA_21);
806-
test.run();
807-
}
808-
}
809-
810802
protected void testOnJava22OrAbove(TestLambda test) throws IOException {
811803
if (Runtime.version().feature() >= 22) {
812804
SourceVersion.setMaxSupportedVersion(SourceVersion.JAVA_22);
@@ -815,6 +807,14 @@ protected void testOnJava22OrAbove(TestLambda test) throws IOException {
815807
}
816808
}
817809

810+
protected void testOnJava25OrAbove(TestLambda test) throws IOException {
811+
if (Runtime.version().feature() >= 25) {
812+
SourceVersion.setMaxSupportedVersion(SourceVersion.JAVA_25);
813+
options.setSourceVersion(SourceVersion.JAVA_25);
814+
test.run();
815+
}
816+
}
817+
818818
protected String extractKytheMetadata(String translation) {
819819
String openingDelimiter = "/* This file contains Kythe metadata.";
820820
String closingDelimiter = "*/";

translator/src/test/java/com/google/devtools/j2objc/gen/StatementGeneratorTest.java

Lines changed: 81 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -2062,105 +2062,96 @@ public void testSimpleSwitchExpression() throws IOException {
20622062
@SuppressWarnings("StringConcatToTextBlock")
20632063
public void testASTConversionSimpleSwitchExpressionWithPatternAndGuard() throws IOException {
20642064
// Switch expression patterns introduced in Java 21.
2065-
testOnJava21OrAbove(
2066-
() -> {
2067-
String ast =
2068-
translateType("Test", SIMPLE_SWITCH_EXPRESSION_WITH_PATTERN_AND_GUARD).toString();
2069-
assertTranslatedLines(
2070-
ast,
2071-
"java.lang.String test( java.lang.String str){",
2072-
" java.lang.String msg;",
2073-
" if (JreIndexOfStr(str, {}, 0) instanceof java.lang.String &&"
2074-
+ " ((java.lang.String)JreIndexOfStr(str, {},"
2075-
+ " 0)).length() > 10) {",
2076-
" msg=JreStrcat($$, \"Long string: \", ((java.lang.String)JreIndexOfStr(str, {},"
2077-
+ " 0)));",
2078-
" }",
2079-
" else if (JreIndexOfStr(str, {}, 0) instanceof java.lang.String) {",
2080-
" msg=JreStrcat($$, \"Short string: \", ((java.lang.String)JreIndexOfStr(str, {},"
2081-
+ " 0)));",
2082-
" }",
2083-
" return msg;",
2084-
"}");
2085-
});
2065+
String ast =
2066+
translateType("Test", SIMPLE_SWITCH_EXPRESSION_WITH_PATTERN_AND_GUARD).toString();
2067+
assertTranslatedLines(
2068+
ast,
2069+
"java.lang.String test( java.lang.String str){",
2070+
" java.lang.String msg;",
2071+
" if (JreIndexOfStr(str, {}, 0) instanceof java.lang.String &&"
2072+
+ " ((java.lang.String)JreIndexOfStr(str, {},"
2073+
+ " 0)).length() > 10) {",
2074+
" msg=JreStrcat($$, \"Long string: \", ((java.lang.String)JreIndexOfStr(str, {},"
2075+
+ " 0)));",
2076+
" }",
2077+
" else if (JreIndexOfStr(str, {}, 0) instanceof java.lang.String) {",
2078+
" msg=JreStrcat($$, \"Short string: \", ((java.lang.String)JreIndexOfStr(str, {},"
2079+
+ " 0)));",
2080+
" }",
2081+
" return msg;",
2082+
"}");
20862083
}
20872084

20882085
@SuppressWarnings("StringConcatToTextBlock")
20892086
public void testNullSwitchExpressionCase() throws IOException {
2090-
testOnJava21OrAbove(
2091-
() -> {
2092-
String translation =
2093-
translateSourceFile(
2094-
"class Test {\n"
2095-
+ " String testNullCase(String s) {\n"
2096-
+ " String result = switch (s) {\n"
2097-
+ " case null -> \"oops\";\n"
2098-
+ " case \"Foo\", \"Bar\" -> \"great\";\n"
2099-
+ " default -> \"okay\";\n"
2100-
+ " };\n"
2101-
+ " return result;"
2102-
+ " }\n"
2103-
+ "}\n",
2104-
"Test",
2105-
"Test.m")
2106-
.toString();
2107-
assertTranslatedLines(
2108-
translation,
2109-
"switch (JreIndexOfStr(s, (id[]){ nil, @\"Foo\", @\"Bar\" }, 3)) {",
2110-
" case 0:",
2111-
" result = @\"oops\";",
2112-
" break;",
2113-
" case 1:",
2114-
" case 2:",
2115-
" result = @\"great\";",
2116-
" break;",
2117-
" default:",
2118-
" result = @\"okay\";",
2119-
" break;",
2120-
"};");
2121-
});
2087+
String translation =
2088+
translateSourceFile(
2089+
"class Test {\n"
2090+
+ " String testNullCase(String s) {\n"
2091+
+ " String result = switch (s) {\n"
2092+
+ " case null -> \"oops\";\n"
2093+
+ " case \"Foo\", \"Bar\" -> \"great\";\n"
2094+
+ " default -> \"okay\";\n"
2095+
+ " };\n"
2096+
+ " return result;"
2097+
+ " }\n"
2098+
+ "}\n",
2099+
"Test",
2100+
"Test.m")
2101+
.toString();
2102+
assertTranslatedLines(
2103+
translation,
2104+
"switch (JreIndexOfStr(s, (id[]){ nil, @\"Foo\", @\"Bar\" }, 3)) {",
2105+
" case 0:",
2106+
" result = @\"oops\";",
2107+
" break;",
2108+
" case 1:",
2109+
" case 2:",
2110+
" result = @\"great\";",
2111+
" break;",
2112+
" default:",
2113+
" result = @\"okay\";",
2114+
" break;",
2115+
"};");
21222116
}
21232117

21242118
// Test from https://openjdk.org/jeps/441: Improved enum constant case labels
21252119
@SuppressWarnings("StringConcatToTextBlock")
21262120
public void testQualifiedEnumNamesInSwitchExpressionCase() throws IOException {
2127-
testOnJava21OrAbove(
2128-
() -> {
2129-
String translation =
2130-
translateSourceFile(
2131-
"sealed interface Currency permits Coin {}\n"
2132-
+ "enum Coin implements Currency { HEADS, TAILS }\n"
2133-
+ "class Test {"
2134-
+ " void goodEnumSwitch1(Currency c) {\n"
2135-
+ " switch (c) {\n"
2136-
+ " case Coin.HEADS -> {\n"
2137-
+ " System.out.println(\"Heads\");\n"
2138-
+ " }\n"
2139-
+ " case Coin.TAILS -> {\n"
2140-
+ " System.out.println(\"Tails\");\n"
2141-
+ " }\n"
2142-
+ " }\n"
2143-
+ " }\n"
2144-
+ "}",
2145-
"Test",
2146-
"Test.m");
2147-
assertTranslatedLines(
2148-
translation,
2149-
"- (void)goodEnumSwitch1WithCurrency:(id<Currency>)c {",
2150-
" switch (c) {",
2151-
" case Coin_Enum_HEADS:",
2152-
" {",
2153-
" [JreLoadStatic(JavaLangSystem, out) printlnWithNSString:@\"Heads\"];",
2154-
" }",
2155-
" break;",
2156-
" case Coin_Enum_TAILS:",
2157-
" {",
2158-
" [JreLoadStatic(JavaLangSystem, out) printlnWithNSString:@\"Tails\"];",
2159-
" }",
2160-
" break;",
2161-
" }",
2162-
"}");
2163-
});
2121+
String translation =
2122+
translateSourceFile(
2123+
"sealed interface Currency permits Coin {}\n"
2124+
+ "enum Coin implements Currency { HEADS, TAILS }\n"
2125+
+ "class Test {"
2126+
+ " void goodEnumSwitch1(Currency c) {\n"
2127+
+ " switch (c) {\n"
2128+
+ " case Coin.HEADS -> {\n"
2129+
+ " System.out.println(\"Heads\");\n"
2130+
+ " }\n"
2131+
+ " case Coin.TAILS -> {\n"
2132+
+ " System.out.println(\"Tails\");\n"
2133+
+ " }\n"
2134+
+ " }\n"
2135+
+ " }\n"
2136+
+ "}",
2137+
"Test",
2138+
"Test.m");
2139+
assertTranslatedLines(
2140+
translation,
2141+
"- (void)goodEnumSwitch1WithCurrency:(id<Currency>)c {",
2142+
" switch (c) {",
2143+
" case Coin_Enum_HEADS:",
2144+
" {",
2145+
" [JreLoadStatic(JavaLangSystem, out) printlnWithNSString:@\"Heads\"];",
2146+
" }",
2147+
" break;",
2148+
" case Coin_Enum_TAILS:",
2149+
" {",
2150+
" [JreLoadStatic(JavaLangSystem, out) printlnWithNSString:@\"Tails\"];",
2151+
" }",
2152+
" break;",
2153+
" }",
2154+
"}");
21642155
}
21652156

21662157
@SuppressWarnings("StringConcatToTextBlock")

translator/src/test/java/com/google/devtools/j2objc/javac/JavacTreeConverterTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,11 @@ public void testIncorrectEnclosingElementBug_staticNamedImport() throws IOExcept
8383
// Note the ";" between the imports.
8484
// https://groups.google.com/forum/#!topic/j2objc-discuss/HWN0i1HsQKg
8585
public void testSkipTreeKindImport() throws IOException {
86-
String translation = translateSourceFile(
86+
Object unused = maybeCompileType("Example",
8787
"import java.util.Collection;"
8888
+ ";"
8989
+ "import java.util.Iterator;"
90-
+ "public class Example {}",
91-
"Example", "Example.h");
92-
assertTranslation(translation, "@interface Example : NSObject");
90+
+ "public class Example {}");
91+
assertError("extraneous semicolon");
9392
}
9493
}

0 commit comments

Comments
 (0)