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 * @library /testlibrary 29 * @run main/othervm InlineAccessors 30 */ 31 import java.lang.invoke.*; 32 import jdk.test.lib.*; 33 import static jdk.test.lib.Asserts.*; 34 35 public class InlineAccessors { 36 public static void main(String[] args) throws Exception { 37 // try some sanity checks first 38 doTest(); 39 40 ProcessBuilder pb = ProcessTools.createJavaProcessBuilder( 41 "-XX:+IgnoreUnrecognizedVMOptions", "-showversion", 42 "-server", "-XX:-TieredCompilation", "-Xbatch", "-Xcomp", 43 "-XX:+PrintCompilation", "-XX:+UnlockDiagnosticVMOptions", "-XX:+PrintInlining", 44 "InlineAccessors$Launcher"); 45 46 OutputAnalyzer analyzer = new OutputAnalyzer(pb.start()); 47 48 analyzer.shouldHaveExitValue(0); 49 50 // The test is applicable only to C2 (present in Server VM). 51 if (analyzer.getStderr().contains("Server VM")) { 52 analyzer.shouldContain("InlineAccessors::setBool (6 bytes) accessor"); 53 analyzer.shouldContain("InlineAccessors::setByte (6 bytes) accessor"); 54 analyzer.shouldContain("InlineAccessors::setChar (6 bytes) accessor"); 55 analyzer.shouldContain("InlineAccessors::setShort (6 bytes) accessor"); 56 analyzer.shouldContain("InlineAccessors::setInt (6 bytes) accessor"); 57 analyzer.shouldContain("InlineAccessors::setFloat (6 bytes) accessor"); 58 analyzer.shouldContain("InlineAccessors::setLong (6 bytes) accessor"); 59 analyzer.shouldContain("InlineAccessors::setDouble (6 bytes) accessor"); 60 analyzer.shouldContain("InlineAccessors::setObject (6 bytes) accessor"); 61 analyzer.shouldContain("InlineAccessors::setArray (6 bytes) accessor"); 62 63 analyzer.shouldContain("InlineAccessors::getBool (5 bytes) accessor"); 64 analyzer.shouldContain("InlineAccessors::getByte (5 bytes) accessor"); 65 analyzer.shouldContain("InlineAccessors::getChar (5 bytes) accessor"); 66 analyzer.shouldContain("InlineAccessors::getShort (5 bytes) accessor"); 67 analyzer.shouldContain("InlineAccessors::getInt (5 bytes) accessor"); 68 analyzer.shouldContain("InlineAccessors::getFloat (5 bytes) accessor"); 69 analyzer.shouldContain("InlineAccessors::getLong (5 bytes) accessor"); 70 analyzer.shouldContain("InlineAccessors::getDouble (5 bytes) accessor"); 71 analyzer.shouldContain("InlineAccessors::getObject (5 bytes) accessor"); 72 analyzer.shouldContain("InlineAccessors::getArray (5 bytes) accessor"); 73 } 74 } 75 76 boolean bool; 77 byte b; 78 char c; 79 short s; 80 int i; 81 float f; 82 long l; 83 double d; 84 Object o; 85 Object[] a; 86 87 public void setBool(boolean v) { bool = v; } 88 public void setByte(byte v) { b = v; } 89 public void setChar(char v) { c = v; } 90 public void setShort(short v) { s = v; } 91 public void setInt(int v) { i = v; } 92 public void setFloat(float v) { f = v; } 93 public void setLong(long v) { l = v; } 94 public void setDouble(double v) { d = v; } 95 public void setObject(Object v) { o = v; } 96 public void setArray(Object[] v) { a = v; } 97 98 public boolean getBool() { return bool; } 99 public byte getByte() { return b; } 100 public char getChar() { return c; } 101 public short getShort() { return s; } 102 public int getInt() { return i; } 103 public float getFloat() { return f; } 104 public long getLong() { return l; } 105 public double getDouble() { return d; } 106 public Object getObject() { return o; } 107 public Object[] getArray() { return a; } 108 109 static void doTest() { 110 InlineAccessors o = new InlineAccessors(); 111 o.setBool(false); 112 o.setByte((byte)0); 113 o.setChar('a'); 114 o.setShort((short)0); 115 o.setInt(0); 116 o.setFloat(0F); 117 o.setLong(0L); 118 o.setDouble(0D); 119 o.setObject(new Object()); 120 o.setArray(new Object[1]); 121 122 o.getBool(); 123 o.getByte(); 124 o.getChar(); 125 o.getShort(); 126 o.getInt(); 127 o.getFloat(); 128 o.getLong(); 129 o.getDouble(); 130 o.getObject(); 131 o.getArray(); 132 } 133 134 static class Launcher { 135 public static void main(String[] args) throws Exception { 136 for (int c = 0; c < 20_000; c++) { 137 doTest(); 138 } 139 } 140 } 141 }