Add Art from Android 14 (Android U, api level 34)
Built from branch udc-beta3-release (Beta 3).
Update android.jar for API level 34 and update API database based on that.
Update Record tests as this version of Art supports records natively.
Test: ./tools/test.py --no-internal --runtimes=dex-14.0.0:dex-9.0.0:jdk11:none
Change-Id: Ib885d4aaf3cfd6db5306bd04371ac7b406984b6e
Fixes: b/286005360
diff --git a/.gitignore b/.gitignore
index 018c71b..503889a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -296,8 +296,8 @@
tools/*/host/art-12.0.0-beta4.tar.gz
tools/*/host/art-13.0.0
tools/*/host/art-13.0.0.tar.gz
-tools/*/host/art-14.0.0-dp1
-tools/*/host/art-14.0.0-dp1.tar.gz
+tools/*/host/art-14.0.0-beta3
+tools/*/host/art-14.0.0-beta3.tar.gz
tools/*/host/art-master
tools/*/host/art-master.tar.gz
tools/*/art.tar.gz
diff --git a/build.gradle b/build.gradle
index 04704bc..e41cbf1 100644
--- a/build.gradle
+++ b/build.gradle
@@ -377,7 +377,7 @@
"linux/art-10.0.0",
"linux/host/art-12.0.0-beta4",
"linux/host/art-13.0.0",
- "linux/host/art-14.0.0-dp1",
+ "linux/host/art-14.0.0-beta3",
"linux/host/art-master",
"linux/dalvik",
"linux/dalvik-4.0.4",
diff --git a/scripts/add-android-jar.sh b/scripts/add-android-jar.sh
index eabdedc..e6ba2c2 100755
--- a/scripts/add-android-jar.sh
+++ b/scripts/add-android-jar.sh
@@ -16,8 +16,8 @@
SDK_HOME=$HOME/Android/Sdk
# Modify these to match the SDK android.jar to add.
-SDK_DIR_NAME=android-33
-SDK_VERSION=33
+SDK_DIR_NAME=android-UpsideDownCake
+SDK_VERSION=34
SDK_DIR=$SDK_HOME/platforms/$SDK_DIR_NAME
THIRD_PARTY_ANDROID_JAR=third_party/android_jar
diff --git a/src/test/examplesJava17/records/RecordWithAnnotations.java b/src/test/examplesJava17/records/RecordWithAnnotations.java
index d1648b6..fe9fd95 100644
--- a/src/test/examplesJava17/records/RecordWithAnnotations.java
+++ b/src/test/examplesJava17/records/RecordWithAnnotations.java
@@ -10,6 +10,9 @@
import java.lang.annotation.Target;
import java.lang.reflect.Field;
import java.lang.reflect.RecordComponent;
+import java.util.ArrayList;
+import java.util.Comparator;
+import java.util.List;
public class RecordWithAnnotations {
@@ -56,16 +59,39 @@
System.out.println(c.getType().getName());
System.out.println(c.getGenericSignature() == null);
System.out.println(c.getAnnotations().length);
+ // Collect and sort the annotations, as the order is not deterministic on Art (tested
+ // on Art 14 Beta 3).
+ List<String> annotations = new ArrayList<>();
for (int j = 0; j < c.getAnnotations().length; j++) {
- System.out.println(c.getAnnotations()[j]);
+ annotations.add(c.getAnnotations()[j].toString());
+ }
+ annotations.sort(Comparator.naturalOrder());
+ for (int j = 0; j < annotations.size(); j++) {
+ System.out.println(annotations.get(j));
}
}
System.out.println(Person.class.getDeclaredFields().length);
+ List<Field> fields = new ArrayList<>();
for (int i = 0; i < Person.class.getDeclaredFields().length; i++) {
- Field f = Person.class.getDeclaredFields()[i];
+ fields.add(Person.class.getDeclaredFields()[i]);
+ }
+ fields.sort(
+ new Comparator<Field>() {
+ @Override
+ public int compare(Field o1, Field o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ });
+ for (int i = 0; i < fields.size(); i++) {
+ Field f = fields.get(i);
System.out.println(f.getDeclaredAnnotations().length);
+ List<String> annotations = new ArrayList<>();
for (int j = 0; j < f.getDeclaredAnnotations().length; j++) {
- System.out.println(f.getAnnotations()[j]);
+ annotations.add(f.getAnnotations()[j].toString());
+ }
+ annotations.sort(Comparator.naturalOrder());
+ for (int j = 0; j < annotations.size(); j++) {
+ System.out.println(annotations.get(j));
}
}
}
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/java/com/android/tools/r8/TestRunResult.java
index 28625eb..595b3b7 100644
--- a/src/test/java/com/android/tools/r8/TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/TestRunResult.java
@@ -168,6 +168,11 @@
return assertFailure();
}
+ public RR assertFailureWithOutputThatMatches(Matcher<String> matcher) {
+ assertStdoutMatches(matcher);
+ return assertFailure();
+ }
+
public RR assertFailureWithErrorThatThrows(Class<? extends Throwable> expectedError) {
return assertFailureWithErrorThatMatches(containsString(expectedError.getName()));
}
diff --git a/src/test/java/com/android/tools/r8/ToolHelper.java b/src/test/java/com/android/tools/r8/ToolHelper.java
index 1151357..596a13d 100644
--- a/src/test/java/com/android/tools/r8/ToolHelper.java
+++ b/src/test/java/com/android/tools/r8/ToolHelper.java
@@ -789,7 +789,7 @@
ImmutableMap.<DexVm, String>builder()
.put(DexVm.ART_DEFAULT, "art")
.put(DexVm.ART_MASTER_HOST, "host/art-master")
- .put(DexVm.ART_14_0_0_HOST, "host/art-14.0.0-dp1")
+ .put(DexVm.ART_14_0_0_HOST, "host/art-14.0.0-beta3")
.put(DexVm.ART_13_0_0_HOST, "host/art-13.0.0")
.put(DexVm.ART_12_0_0_HOST, "host/art-12.0.0-beta4")
.put(DexVm.ART_10_0_0_HOST, "art-10.0.0")
diff --git a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
index cda9c15..8605db0 100644
--- a/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
+++ b/src/test/java/com/android/tools/r8/apimodel/AndroidApiHashingDatabaseBuilderGeneratorTest.java
@@ -110,9 +110,9 @@
methodReferences.forEach(field -> numberOfMethods.increment())));
});
// These numbers will change when updating api-versions.xml
- assertEquals(5635, parsedApiClasses.size());
- assertEquals(29017, numberOfFields.get());
- assertEquals(44107, numberOfMethods.get());
+ assertEquals(5716, parsedApiClasses.size());
+ assertEquals(29609, numberOfFields.get());
+ assertEquals(44827, numberOfMethods.get());
}
@Test
diff --git a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
index 802ccce..fbbadb0 100644
--- a/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
+++ b/src/test/java/com/android/tools/r8/cf/methodhandles/invokespecial/InvokeSpecialMethodHandleTest.java
@@ -130,7 +130,12 @@
} else if (parameters.isDexRuntime()
&& parameters.asDexRuntime().getVersion().isNewerThan(Version.V9_0_0)) {
// VMs between 9 and 13 segfault.
- result.assertFailureWithErrorThatMatches(containsString("HandleUnexpectedSignal"));
+ if (parameters.asDexRuntime().getVersion().isEqualTo(Version.V14_0_0)) {
+ result.assertFailureWithOutputThatMatches(
+ containsString("reverting to SIG_DFL handler for signal 11"));
+ } else {
+ result.assertFailureWithErrorThatMatches(containsString("HandleUnexpectedSignal"));
+ }
} else {
result.assertSuccessWithOutput(getExpected());
}
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
index 089553b..f1e10a1 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/DateTimeFormatterTest.java
@@ -12,6 +12,7 @@
import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
@@ -69,11 +70,13 @@
if (libraryDesugaringSpecification.hasTimeDesugaring(parameters)) {
run.assertSuccessWithOutput(
parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+ && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U)
? expectedOutputDesugaredLibNNBSP
: expectedOutputDesugaredLib);
} else {
run.assertSuccessWithOutput(
parameters.isDexRuntimeVersionNewerThanOrEqual(Version.V14_0_0)
+ && parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U)
? expectedOutputNNBSP
: expectedOutput);
}
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java
index dc3ef4e..14485c9 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentAnnotationsTest.java
@@ -16,6 +16,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.Pair;
@@ -35,7 +36,7 @@
private static final String RECORD_NAME = "RecordWithAnnotations";
private static final byte[][] PROGRAM_DATA = RecordTestUtils.getProgramData(RECORD_NAME);
private static final String MAIN_TYPE = RecordTestUtils.getMainType(RECORD_NAME);
- private static final String EXPECTED_RESULT =
+ private static final String JVM_EXPECTED_RESULT =
StringUtils.lines(
"Jane Doe",
"42",
@@ -57,12 +58,39 @@
"@records.RecordWithAnnotations$AnnotationRecordComponentOnly(\"z\")",
"2",
"2",
- "@records.RecordWithAnnotations$Annotation(\"a\")",
- "@records.RecordWithAnnotations$AnnotationFieldOnly(\"b\")",
- "2",
"@records.RecordWithAnnotations$Annotation(\"x\")",
- "@records.RecordWithAnnotations$AnnotationFieldOnly(\"y\")");
- private static final String EXPECTED_RESULT_R8 =
+ "@records.RecordWithAnnotations$AnnotationFieldOnly(\"y\")",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(\"a\")",
+ "@records.RecordWithAnnotations$AnnotationFieldOnly(\"b\")");
+ private static final String ART_EXPECTED_RESULT =
+ StringUtils.lines(
+ "Jane Doe",
+ "42",
+ "Jane Doe",
+ "42",
+ "true",
+ "2",
+ "name",
+ "java.lang.String",
+ "true",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=a)",
+ "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=c)",
+ "age",
+ "int",
+ "true",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=x)",
+ "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=z)",
+ "2",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=x)",
+ "@records.RecordWithAnnotations$AnnotationFieldOnly(value=y)",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=a)",
+ "@records.RecordWithAnnotations$AnnotationFieldOnly(value=b)");
+ private static final String JVM_EXPECTED_RESULT_R8 =
StringUtils.lines(
"Jane Doe",
"42",
@@ -89,7 +117,34 @@
"2",
"@records.RecordWithAnnotations$Annotation(\"x\")",
"@records.RecordWithAnnotations$AnnotationFieldOnly(\"y\")");
- private static final String EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS =
+ private static final String ART_EXPECTED_RESULT_R8 =
+ StringUtils.lines(
+ "Jane Doe",
+ "42",
+ "Jane Doe",
+ "42",
+ "true",
+ "2",
+ "a",
+ "java.lang.String",
+ "true",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=a)",
+ "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=c)",
+ "b",
+ "int",
+ "true",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=x)",
+ "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=z)",
+ "2",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=a)",
+ "@records.RecordWithAnnotations$AnnotationFieldOnly(value=b)",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=x)",
+ "@records.RecordWithAnnotations$AnnotationFieldOnly(value=y)");
+ private static final String JVM_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS =
StringUtils.lines(
"Jane Doe",
"42",
@@ -112,10 +167,33 @@
"2",
"0",
"0");
- private static final String EXPECTED_RESULT_DESUGARED =
- StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "Class.isRecord not present");
- private static final String EXPECTED_RESULT_DESUGARED_JVM17 =
+ private static final String ART_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS =
+ StringUtils.lines(
+ "Jane Doe",
+ "42",
+ "Jane Doe",
+ "42",
+ "true",
+ "2",
+ "a",
+ "java.lang.String",
+ "true",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=a)",
+ "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=c)",
+ "b",
+ "int",
+ "true",
+ "2",
+ "@records.RecordWithAnnotations$Annotation(value=x)",
+ "@records.RecordWithAnnotations$AnnotationRecordComponentOnly(value=z)",
+ "2",
+ "0",
+ "0");
+ private static final String EXPECTED_RESULT_DESUGARED_RECORD_SUPPORT =
StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "false");
+ private static final String EXPECTED_RESULT_DESUGARED_NO_RECORD_SUPPORT =
+ StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "Class.isRecord not present");
@Parameter(0)
public TestParameters parameters;
@@ -141,7 +219,7 @@
testForJvm(parameters)
.addProgramClassFileData(PROGRAM_DATA)
.run(parameters.getRuntime(), MAIN_TYPE)
- .assertSuccessWithOutput(EXPECTED_RESULT);
+ .assertSuccessWithOutput(JVM_EXPECTED_RESULT);
}
@Test
@@ -151,6 +229,8 @@
// Android U will support records.
boolean compilingForNativeRecordSupport =
parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+ boolean runtimeWithNativeRecordSupport =
+ parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V14_0_0);
testForDesugaring(
parameters,
options -> {
@@ -164,16 +244,13 @@
.addProgramClassFileData(PROGRAM_DATA)
.run(parameters.getRuntime(), MAIN_TYPE)
.applyIf(
- parameters.isDexRuntime() && compilingForNativeRecordSupport,
- // Current Art 14 build does not support the java.lang.Record class.
- r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
compilingForNativeRecordSupport,
- r -> r.assertSuccessWithOutput(EXPECTED_RESULT),
+ r -> r.assertSuccessWithOutput(ART_EXPECTED_RESULT),
r ->
r.assertSuccessWithOutput(
- !parameters.isCfRuntime()
- ? EXPECTED_RESULT_DESUGARED
- : EXPECTED_RESULT_DESUGARED_JVM17)
+ !runtimeWithNativeRecordSupport
+ ? EXPECTED_RESULT_DESUGARED_NO_RECORD_SUPPORT
+ : EXPECTED_RESULT_DESUGARED_RECORD_SUPPORT)
.inspect(
inspector -> {
ClassSubject person =
@@ -247,6 +324,9 @@
boolean compilingForNativeRecordSupport =
parameters.isCfRuntime()
|| parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+ boolean runtimeWithNativeRecordSupport =
+ parameters.isCfRuntime()
+ || parameters.getDexRuntimeVersion().isNewerThanOrEqual(Version.V14_0_0);
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
// TODO(b/231930852): Change to android.jar for Androud U when that contains
@@ -317,16 +397,24 @@
})
.run(parameters.getRuntime(), MAIN_TYPE)
.applyIf(
- parameters.isCfRuntime(),
// TODO(b/274888318): EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS still has component
// annotations.
+ parameters.isCfRuntime(),
r ->
r.assertSuccessWithOutput(
- keepAnnotations ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS),
- // r -> r.assertSuccessWithOutput(EXPECTED_RESULT_R8),
+ keepAnnotations
+ ? JVM_EXPECTED_RESULT_R8
+ : JVM_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS),
compilingForNativeRecordSupport,
- // Current Art 14 build does not support the java.lang.Record class.
- r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
- r -> r.assertSuccessWithOutput(EXPECTED_RESULT_DESUGARED));
+ r ->
+ r.assertSuccessWithOutput(
+ keepAnnotations
+ ? ART_EXPECTED_RESULT_R8
+ : ART_EXPECTED_RESULT_R8_NO_KEEP_ANNOTATIONS),
+ r ->
+ r.assertSuccessWithOutput(
+ runtimeWithNativeRecordSupport
+ ? EXPECTED_RESULT_DESUGARED_RECORD_SUPPORT
+ : EXPECTED_RESULT_DESUGARED_NO_RECORD_SUPPORT));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java
index 5ce845f..fe07ad0 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordComponentSignatureTest.java
@@ -14,6 +14,7 @@
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.TestShrinkerBuilder;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
@@ -56,6 +57,8 @@
"Jane Doe", "42", "Jane Doe", "42", "true", "1", "a", "java.lang.Object", "null", "0");
private static final String EXPECTED_RESULT_DESUGARED =
StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "Class.isRecord not present");
+ private static final String EXPECTED_RESULT_DESUGARED_ART_14 =
+ StringUtils.lines("Jane Doe", "42", "Jane Doe", "42", "false");
@Parameter(0)
public TestParameters parameters;
@@ -91,6 +94,9 @@
// Android U will support records.
boolean compilingForNativeRecordSupport =
parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+ boolean runningWithNativeRecordSupport =
+ parameters.getRuntime().isDex()
+ && parameters.getRuntime().asDex().getVersion().isNewerThanOrEqual(Version.V14_0_0);
testForDesugaring(
parameters,
options -> {
@@ -106,9 +112,12 @@
.applyIf(
compilingForNativeRecordSupport,
// Current Art 14 build does not support the java.lang.Record class.
- r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
+ r -> r.assertSuccessWithOutput(EXPECTED_RESULT),
r ->
- r.assertSuccessWithOutput(EXPECTED_RESULT_DESUGARED)
+ r.assertSuccessWithOutput(
+ runningWithNativeRecordSupport
+ ? EXPECTED_RESULT_DESUGARED_ART_14
+ : EXPECTED_RESULT_DESUGARED)
.inspect(
inspector -> {
ClassSubject person =
@@ -154,6 +163,9 @@
boolean compilingForNativeRecordSupport =
parameters.isCfRuntime()
|| parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U);
+ boolean runningWithNativeRecordSupport =
+ parameters.getRuntime().isDex()
+ && parameters.getRuntime().asDex().getVersion().isNewerThanOrEqual(Version.V14_0_0);
testForR8(parameters.getBackend())
.addProgramClassFileData(PROGRAM_DATA)
// TODO(b/231930852): Change to android.jar for Androud U when that contains
@@ -193,13 +205,14 @@
.run(parameters.getRuntime(), MAIN_TYPE)
// No Art VM actually supports the java.lang.Record class.
.applyIf(
- parameters.isCfRuntime(),
+ compilingForNativeRecordSupport,
r ->
r.assertSuccessWithOutput(
keepSignatures ? EXPECTED_RESULT_R8 : EXPECTED_RESULT_R8_NO_KEEP_SIGNATURE),
- compilingForNativeRecordSupport,
- // Current Art 14 build does not support the java.lang.Record class.
- r -> r.assertFailureWithErrorThatThrows(NoClassDefFoundError.class),
- r -> r.assertSuccessWithOutput(EXPECTED_RESULT_DESUGARED));
+ r ->
+ r.assertSuccessWithOutput(
+ runningWithNativeRecordSupport
+ ? EXPECTED_RESULT_DESUGARED_ART_14
+ : EXPECTED_RESULT_DESUGARED));
}
}
diff --git a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
index 3e1c8ce..00a590e 100644
--- a/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/records/RecordInvokeCustomSplitDesugaringTest.java
@@ -4,9 +4,13 @@
package com.android.tools.r8.desugar.records;
+import static com.android.tools.r8.DiagnosticsMatcher.diagnosticMessage;
+import static org.hamcrest.CoreMatchers.containsString;
+
import com.android.tools.r8.TestBase;
import com.android.tools.r8.TestParameters;
import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.StringUtils;
import java.nio.file.Path;
import org.junit.Test;
@@ -77,7 +81,20 @@
.addProgramFiles(desugared)
.setMinApi(parameters)
.addKeepMainRule(MAIN_TYPE)
- .compile()
+ .applyIf(
+ parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U),
+ b -> b.allowDiagnosticWarningMessages())
+ .compileWithExpectedDiagnostics(
+ // Type com.android.tools.r8.RecordTag from desugared code will be converted to
+ // java.lang.Record during reading causing duplicate java.lang.Record class.
+ parameters.getApiLevel().isGreaterThanOrEqualTo(AndroidApiLevel.U)
+ ? diagnostics ->
+ diagnostics.assertWarningsMatch(
+ diagnosticMessage(
+ containsString(
+ "The following library types, prefixed by java., are present both"
+ + " as library and non library classes: java.lang.Record.")))
+ : diagnostics -> diagnostics.assertNoMessages())
.run(parameters.getRuntime(), MAIN_TYPE)
.assertSuccessWithOutput(EXPECTED_RESULT_R8);
}
diff --git a/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java b/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
index bd06608..bda012e 100644
--- a/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
+++ b/src/test/java/com/android/tools/r8/globalsynthetics/GlobalSyntheticsEnsureClassesOutputTest.java
@@ -50,7 +50,7 @@
.setProgramConsumer(new DexIndexedConsumer.ArchiveConsumer(output))
.build());
CodeInspector inspector = new CodeInspector(output);
- assertEquals(1026, inspector.allClasses().size());
+ assertEquals(1044, inspector.allClasses().size());
}
@Test
diff --git a/third_party/android_jar/lib-v34.tar.gz.sha1 b/third_party/android_jar/lib-v34.tar.gz.sha1
index 3b7b739..0c3c782 100644
--- a/third_party/android_jar/lib-v34.tar.gz.sha1
+++ b/third_party/android_jar/lib-v34.tar.gz.sha1
@@ -1 +1 @@
-ac28074fa7b977e03eb0692248e1edcee36a2c33
\ No newline at end of file
+0b366542a5c6536e93da29e5f13bd320df6e2e34
\ No newline at end of file
diff --git a/third_party/api_database/api_database.tar.gz.sha1 b/third_party/api_database/api_database.tar.gz.sha1
index 9883fe5..5749b41 100644
--- a/third_party/api_database/api_database.tar.gz.sha1
+++ b/third_party/api_database/api_database.tar.gz.sha1
@@ -1 +1 @@
-29b5c8dfdccf33e7a540d5de29476805a7d5c2f0
\ No newline at end of file
+9570931632e830d695b18bd83f69456c74196d6e
\ No newline at end of file
diff --git a/tools/linux/host/art-14.0.0-beta3.tar.gz.sha1 b/tools/linux/host/art-14.0.0-beta3.tar.gz.sha1
new file mode 100644
index 0000000..42f9f43
--- /dev/null
+++ b/tools/linux/host/art-14.0.0-beta3.tar.gz.sha1
@@ -0,0 +1 @@
+c879ddf6410159a4ac7e673fd66a64abe2140ffa
\ No newline at end of file
diff --git a/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1 b/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1
deleted file mode 100644
index c88b923..0000000
--- a/tools/linux/host/art-14.0.0-dp1.tar.gz.sha1
+++ /dev/null
@@ -1 +0,0 @@
-1c41f5d79e335ff132b7a95d995b65581c250df8
\ No newline at end of file