1 /* 2 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. 8 * 9 * This code is distributed in the hope that it will be useful, but WITHOUT 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 12 * version 2 for more details (a copy is included in the LICENSE file that 13 * accompanied this code). 14 * 15 * You should have received a copy of the GNU General Public License version 16 * 2 along with this work; if not, write to the Free Software Foundation, 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 * 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 20 * or visit www.oracle.com if you need additional information or have any 21 * questions. 22 * 23 */ 24 /** 25 * @test 26 * @bug 8140650 27 * @summary Method::is_accessor should cover getters and setters for all types 28 * @modules java.base/jdk.internal.misc 29 * @library /testlibrary 30 * @run main/othervm InlineAccessors 31 */ 32 import java.lang.invoke.*; 33 import jdk.test.lib.*; 34 import static jdk.test.lib.Asserts.*; 35 36 public class InlineAccessors { 37 public static void main(String[] args) throws Exception { 38 // try some sanity checks first 39 doTest(); 40 41 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( 42 "-XX:+IgnoreUnrecognizedVMOptions", "-showversion", 43 "-server", "-XX:-TieredCompilation", "-Xbatch", "-Xcomp", 44 "-XX:+PrintCompilation", "-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining", 45 "InlineAccessors$Launcher"); 46 47 OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); 48 49 analyzer.shouldHaveExitValue(0); 50 51 // The test is applicable only to C2 (present in Server VM). 52 if (analyzer.getStderr().contains("Server VM")) { 53 analyzer.shouldContain("InlineAccessors::setBool (6 bytes) accessor"); 54 analyzer.shouldContain("InlineAccessors::setByte (6 bytes) accessor"); 55 analyzer.shouldContain("InlineAccessors::setChar (6 bytes) accessor"); 56 analyzer.shouldContain("InlineAccessors::setShort (6 bytes) accessor"); 57 analyzer.shouldContain("InlineAccessors::setInt (6 bytes) accessor"); 58 analyzer.shouldContain("InlineAccessors::setFloat (6 bytes) accessor"); 59 analyzer.shouldContain("InlineAccessors::setLong (6 bytes) accessor"); 60 analyzer.shouldContain("InlineAccessors::setDouble (6 bytes) accessor"); 61 analyzer.shouldContain("InlineAccessors::setObject (6 bytes) accessor"); 62 analyzer.shouldContain("InlineAccessors::setArray (6 bytes) accessor"); 63 64 analyzer.shouldContain("InlineAccessors::getBool (5 bytes) accessor"); 65 analyzer.shouldContain("InlineAccessors::getByte (5 bytes) accessor"); 66 analyzer.shouldContain("InlineAccessors::getChar (5 bytes) accessor"); 67 analyzer.shouldContain("InlineAccessors::getShort (5 bytes) accessor"); 68 analyzer.shouldContain("InlineAccessors::getInt (5 bytes) accessor"); 69 analyzer.shouldContain("InlineAccessors::getFloat (5 bytes) accessor"); 70 analyzer.shouldContain("InlineAccessors::getLong (5 bytes) accessor"); 71 analyzer.shouldContain("InlineAccessors::getDouble (5 bytes) accessor"); 72 analyzer.shouldContain("InlineAccessors::getObject (5 bytes) accessor"); 73 analyzer.shouldContain("InlineAccessors::getArray (5 bytes) accessor"); 74 } 75 } 76 77 boolean bool; 78 byte b; 79 char c; 80 short s; 81 int i; 82 float f; 83 long l; 84 double d; 85 Object o; 86 Object[] a; 87 88 public void setBool(boolean v) { bool = v; } 89 public void setByte(byte v) { b = v; } 90 public void setChar(char v) { c = v; } 91 public void setShort(short v) { s = v; } 92 public void setInt(int v) { i = v; } 93 public void setFloat(float v) { f = v; } 94 public void setLong(long v) { l = v; } 95 public void setDouble(double v) { d = v; } 96 public void setObject(Object v) { o = v; } 97 public void setArray(Object[] v) { a = v; } 98 99 public boolean getBool() { return bool; } 100 public byte getByte() { return b; } 101 public char getChar() { return c; } 102 public short getShort() { return s; } 103 public int getInt() { return i; } 104 public float getFloat() { return f; } 105 public long getLong() { return l; } 106 public double getDouble() { return d; } 107 public Object getObject() { return o; } 108 public Object[] getArray() { return a; } 109 110 static void doTest() { 111 InlineAccessors o = new InlineAccessors(); 112 o.setBool(false); 113 o.setByte((byte)0); 114 o.setChar('a'); 115 o.setShort((short)0); 116 o.setInt(0); 117 o.setFloat(0F); 118 o.setLong(0L); 119 o.setDouble(0D); 120 o.setObject(new Object()); 121 o.setArray(new Object[1]); 122 123 o.getBool(); 124 o.getByte(); 125 o.getChar(); 126 o.getShort(); 127 o.getInt(); 128 o.getFloat(); 129 o.getLong(); 130 o.getDouble(); 131 o.getObject(); 132 o.getArray(); 133 } 134 135 static class Launcher { 136 public static void main(String[] args) throws Exception { 137 for (int c = 0; c < 20_000; c++) { 138 doTest(); 139 } 140 } 141 } 142 }