VarHandle desugaring test of types not supported by desugaring
Bug: b/247076137
Change-Id: I4634d35f094a40d1725dc9f9c909ac3e96df88c7
diff --git a/src/test/examplesJava9/varhandle/InstanceBooleanField.java b/src/test/examplesJava9/varhandle/InstanceBooleanField.java
new file mode 100644
index 0000000..89c034a
--- /dev/null
+++ b/src/test/examplesJava9/varhandle/InstanceBooleanField.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package varhandle;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+
+public class InstanceBooleanField {
+
+ private boolean field;
+
+ public static void testSet(VarHandle varHandle) {
+ System.out.println("testGet");
+
+ InstanceBooleanField instance = new InstanceBooleanField();
+ System.out.println(varHandle.get(instance));
+
+ // boolean and Boolean values.
+ varHandle.set(instance, true);
+ System.out.println((boolean) varHandle.get(instance));
+ varHandle.set(instance, Boolean.FALSE);
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void testCompareAndSet(VarHandle varHandle) {
+ System.out.println("testCompareAndSet");
+
+ InstanceBooleanField instance = new InstanceBooleanField();
+
+ // boolean and Boolean values.
+ varHandle.compareAndSet(instance, true, false);
+ System.out.println((boolean) varHandle.get(instance));
+ varHandle.compareAndSet(instance, false, true);
+ System.out.println((boolean) varHandle.get(instance));
+ varHandle.compareAndSet(instance, Boolean.TRUE, false);
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, false, Boolean.TRUE);
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, Boolean.TRUE, Boolean.FALSE);
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
+ VarHandle varHandle;
+ try {
+ varHandle =
+ MethodHandles.lookup().findVarHandle(InstanceBooleanField.class, "field", boolean.class);
+ } catch (UnsupportedOperationException e) {
+ System.out.println("Got UnsupportedOperationException");
+ return;
+ }
+
+ testSet(varHandle);
+ testCompareAndSet(varHandle);
+ }
+}
diff --git a/src/test/examplesJava9/varhandle/InstanceByteField.java b/src/test/examplesJava9/varhandle/InstanceByteField.java
new file mode 100644
index 0000000..242df89
--- /dev/null
+++ b/src/test/examplesJava9/varhandle/InstanceByteField.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package varhandle;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+
+public class InstanceByteField {
+
+ private byte field;
+
+ public static void testSet(VarHandle varHandle) {
+ System.out.println("testGet");
+
+ InstanceByteField instance = new InstanceByteField();
+ System.out.println(varHandle.get(instance));
+
+ // byte and Byte values.
+ varHandle.set(instance, (byte) 1);
+ System.out.println((byte) varHandle.get(instance));
+ varHandle.set(instance, Byte.valueOf((byte) 2));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void testCompareAndSet(VarHandle varHandle) {
+ System.out.println("testCompareAndSet");
+
+ InstanceByteField instance = new InstanceByteField();
+
+ // byte and Byte values.
+ varHandle.compareAndSet(instance, (byte) 1, (byte) 2);
+ System.out.println((byte) varHandle.get(instance));
+ varHandle.compareAndSet(instance, (byte) 0, (byte) 1);
+ System.out.println((byte) varHandle.get(instance));
+ varHandle.compareAndSet(instance, Byte.valueOf((byte) 1), (byte) 2);
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, (byte) 2, Byte.valueOf((byte) 3));
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, Byte.valueOf((byte) 3), Byte.valueOf((byte) 4));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
+ VarHandle varHandle;
+ try {
+ varHandle =
+ MethodHandles.lookup().findVarHandle(InstanceByteField.class, "field", byte.class);
+ } catch (UnsupportedOperationException e) {
+ System.out.println("Got UnsupportedOperationException");
+ return;
+ }
+
+ testSet(varHandle);
+ testCompareAndSet(varHandle);
+ }
+}
diff --git a/src/test/examplesJava9/varhandle/InstanceDoubleField.java b/src/test/examplesJava9/varhandle/InstanceDoubleField.java
new file mode 100644
index 0000000..5b59463
--- /dev/null
+++ b/src/test/examplesJava9/varhandle/InstanceDoubleField.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package varhandle;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+
+public class InstanceDoubleField {
+
+ private double field;
+
+ public static void testSet(VarHandle varHandle) {
+ System.out.println("testGet");
+
+ InstanceDoubleField instance = new InstanceDoubleField();
+ System.out.println(varHandle.get(instance));
+
+ // double and Double values.
+ varHandle.set(instance, 1.0);
+ System.out.println((double) varHandle.get(instance));
+ varHandle.set(instance, Double.valueOf(2));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void testCompareAndSet(VarHandle varHandle) {
+ System.out.println("testCompareAndSet");
+
+ InstanceDoubleField instance = new InstanceDoubleField();
+
+ // double and Double values.
+ varHandle.compareAndSet(instance, 1.0, 2.0);
+ System.out.println((double) varHandle.get(instance));
+ varHandle.compareAndSet(instance, 0.0, 1.0);
+ System.out.println((double) varHandle.get(instance));
+ varHandle.compareAndSet(instance, Double.valueOf(1), 2.0);
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, 2.0, Double.valueOf(3));
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, Double.valueOf(3), Double.valueOf(4));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
+ VarHandle varHandle;
+ try {
+ varHandle =
+ MethodHandles.lookup().findVarHandle(InstanceDoubleField.class, "field", double.class);
+ } catch (UnsupportedOperationException e) {
+ System.out.println("Got UnsupportedOperationException");
+ return;
+ }
+
+ testSet(varHandle);
+ testCompareAndSet(varHandle);
+ }
+}
diff --git a/src/test/examplesJava9/varhandle/InstanceFloatField.java b/src/test/examplesJava9/varhandle/InstanceFloatField.java
new file mode 100644
index 0000000..06960c4
--- /dev/null
+++ b/src/test/examplesJava9/varhandle/InstanceFloatField.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package varhandle;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+
+public class InstanceFloatField {
+
+ private float field;
+
+ public static void testSet(VarHandle varHandle) {
+ System.out.println("testGet");
+
+ InstanceFloatField instance = new InstanceFloatField();
+ System.out.println(varHandle.get(instance));
+
+ // float and Float values.
+ varHandle.set(instance, 1.0f);
+ System.out.println((float) varHandle.get(instance));
+ varHandle.set(instance, Float.valueOf(2));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void testCompareAndSet(VarHandle varHandle) {
+ System.out.println("testCompareAndSet");
+
+ InstanceFloatField instance = new InstanceFloatField();
+
+ // float and Float values.
+ varHandle.compareAndSet(instance, 1.0f, 2.0f);
+ System.out.println((float) varHandle.get(instance));
+ varHandle.compareAndSet(instance, 0.0f, 1.0f);
+ System.out.println((float) varHandle.get(instance));
+ varHandle.compareAndSet(instance, Float.valueOf(1), 2.0f);
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, 2.0f, Float.valueOf(3f));
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, Float.valueOf(3), Float.valueOf(4));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
+ VarHandle varHandle;
+ try {
+ varHandle =
+ MethodHandles.lookup().findVarHandle(InstanceFloatField.class, "field", float.class);
+ } catch (UnsupportedOperationException e) {
+ System.out.println("Got UnsupportedOperationException");
+ return;
+ }
+
+ testSet(varHandle);
+ testCompareAndSet(varHandle);
+ }
+}
diff --git a/src/test/examplesJava9/varhandle/InstanceShortField.java b/src/test/examplesJava9/varhandle/InstanceShortField.java
new file mode 100644
index 0000000..7890cf2
--- /dev/null
+++ b/src/test/examplesJava9/varhandle/InstanceShortField.java
@@ -0,0 +1,57 @@
+// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+package varhandle;
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.VarHandle;
+
+public class InstanceShortField {
+
+ private short field;
+
+ public static void testSet(VarHandle varHandle) {
+ System.out.println("testGet");
+
+ InstanceShortField instance = new InstanceShortField();
+ System.out.println(varHandle.get(instance));
+
+ // short and Short values.
+ varHandle.set(instance, (short) 1);
+ System.out.println((short) varHandle.get(instance));
+ varHandle.set(instance, Short.valueOf((short) 2));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void testCompareAndSet(VarHandle varHandle) {
+ System.out.println("testCompareAndSet");
+
+ InstanceShortField instance = new InstanceShortField();
+
+ // short and Short values.
+ varHandle.compareAndSet(instance, (short) 1, (short) 2);
+ System.out.println((short) varHandle.get(instance));
+ varHandle.compareAndSet(instance, (short) 0, (short) 1);
+ System.out.println((short) varHandle.get(instance));
+ varHandle.compareAndSet(instance, Short.valueOf((short) 1), (short) 2);
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, (short) 2, Short.valueOf((short) 3));
+ System.out.println(varHandle.get(instance));
+ varHandle.compareAndSet(instance, Short.valueOf((short) 3), Short.valueOf((short) 4));
+ System.out.println(varHandle.get(instance));
+ }
+
+ public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException {
+ VarHandle varHandle;
+ try {
+ varHandle =
+ MethodHandles.lookup().findVarHandle(InstanceShortField.class, "field", short.class);
+ } catch (UnsupportedOperationException e) {
+ System.out.println("Got UnsupportedOperationException");
+ return;
+ }
+
+ testSet(varHandle);
+ testCompareAndSet(varHandle);
+ }
+}