< 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 >