< prev index next >
test/compiler/jvmci/common/testcases/MultipleAbstractImplementer.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
@@ -21,15 +21,95 @@
* questions.
*/
package compiler.jvmci.common.testcases;
+import java.util.HashMap;
+import java.util.Map;
+
public abstract class MultipleAbstractImplementer
implements MultipleImplementersInterface {
+ // Different access levels on the fields of this class are used on purpose.
+ // It is needed to verify jdk.vm.ci.CompilerToVM constant pool related
+ // methods, e.g. resolveFieldInPool.
+
+ private static int intStaticField = INT_CONSTANT;
+ final static long longStaticField = LONG_CONSTANT;
+ volatile static float floatStaticField = FLOAT_CONSTANT;
+ static double doubleStaticField = DOUBLE_CONSTANT;
+ public static String stringStaticField = STRING_CONSTANT;
+ protected static Object objectStaticField = OBJECT_CONSTANT;
+
+ public int intField = INT_CONSTANT;
+ private long longField = LONG_CONSTANT;
+ protected float floatField = FLOAT_CONSTANT;
+ transient double doubleField = DOUBLE_CONSTANT;
+ volatile String stringField = STRING_CONSTANT;
+ String stringFieldEmpty = "";
+ final Object objectField;
+
+ public MultipleAbstractImplementer() {
+ intField = Integer.MAX_VALUE;
+ longField = Long.MAX_VALUE;
+ floatField = Float.MAX_VALUE;
+ doubleField = Double.MAX_VALUE;
+ stringField = "Message";
+ objectField = new Object();
+ }
+
public abstract void abstractMethod();
@Override
public void finalize() throws Throwable {
super.finalize();
}
+
+ public void lambdaUsingMethod2() {
+ Thread t = new Thread(this::testMethod);
+ t.start();
+ }
+
+ /**
+ * This method is needed to have "getstatic" and "getfield" instructions
+ * in the class. These instructions are needed to test
+ * resolveFieldInPool method, because it needs a bytecode as one of its arguments.
+ */
+ public void printFileds() {
+ System.out.println(intStaticField);
+ System.out.println(longStaticField);
+ System.out.println(floatStaticField);
+ System.out.println(doubleStaticField);
+ System.out.println(stringStaticField);
+ System.out.println(objectStaticField);
+ System.out.println(intField);
+ System.out.println(longField);
+ System.out.println(floatField);
+ System.out.println(doubleField);
+ System.out.println(stringField);
+ System.out.println(stringFieldEmpty);
+ System.out.println(objectField);
+ }
+
+ public static void staticMethod() {
+ System.getProperties(); // calling some static method
+ Map map = new HashMap(); // calling some constructor
+ map.put(OBJECT_CONSTANT, OBJECT_CONSTANT); // calling some interface method
+ map.remove(OBJECT_CONSTANT); // calling some default interface method
+ }
+
+ @Override
+ public void instanceMethod() {
+ toString(); // calling some virtual method
+ super.toString(); // calling some special method
+ }
+
+ @Override
+ public void anonClassMethod() {
+ new Runnable() {
+ @Override
+ public void run() {
+ System.out.println("Running");
+ }
+ }.run();
+ }
}
< prev index next >