1/* 2 * Copyright (c) 2014, 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 24import java.beans.Introspector; 25import java.beans.MethodDescriptor; 26 27/* 28 * @test 29 * @bug 8040656 30 * @summary Tests that a normal method is preferred to a synthetic one 31 * @author Sergey Malenkov 32 */ 33 34public class Test8040656 { 35 public static void main(String[] args) throws Exception { 36 test(String.class, C.class); 37 test(String.class, C1.class); 38 test(String.class, C2.class); 39 test(String.class, C3.class); 40 test(String.class, C4.class); 41 test(String.class, C5.class); 42 test(String.class, C6.class); 43 test(String.class, C7.class); 44 test(String.class, C8.class); 45 test(String.class, C9.class); 46 } 47 48 private static void test(Class<?> type, Class<?> bean) throws Exception { 49 for (MethodDescriptor md : Introspector.getBeanInfo(bean).getMethodDescriptors()) { 50 if (md.getName().equals("getFoo")) { 51 if (type != md.getMethod().getReturnType()) { 52 throw new Error("unexpected type"); 53 } 54 } 55 } 56 } 57 58 public interface A { 59 public Object getFoo(); 60 } 61 62 public class C implements A { 63 @Override 64 public String getFoo() { 65 return null; 66 } 67 } 68 69 public class C1 implements A { 70 @Override 71 public String getFoo() { 72 return null; 73 } 74 75 public String getFoo1() { 76 return null; 77 } 78 } 79 80 public class C2 implements A { 81 @Override 82 public String getFoo() { 83 return null; 84 } 85 86 public String getFoo1() { 87 return null; 88 } 89 90 public String getFoo2() { 91 return null; 92 } 93 } 94 95 public class C3 implements A { 96 @Override 97 public String getFoo() { 98 return null; 99 } 100 101 public String getFoo1() { 102 return null; 103 } 104 105 public String getFoo2() { 106 return null; 107 } 108 109 public String getFoo3() { 110 return null; 111 } 112 } 113 114 public class C4 implements A { 115 @Override 116 public String getFoo() { 117 return null; 118 } 119 120 public String getFoo1() { 121 return null; 122 } 123 124 public String getFoo2() { 125 return null; 126 } 127 128 public String getFoo3() { 129 return null; 130 } 131 132 public String getFoo4() { 133 return null; 134 } 135 } 136 137 public class C5 implements A { 138 @Override 139 public String getFoo() { 140 return null; 141 } 142 143 public String getFoo1() { 144 return null; 145 } 146 147 public String getFoo2() { 148 return null; 149 } 150 151 public String getFoo3() { 152 return null; 153 } 154 155 public String getFoo4() { 156 return null; 157 } 158 159 public String getFoo5() { 160 return null; 161 } 162 } 163 164 public class C6 implements A { 165 @Override 166 public String getFoo() { 167 return null; 168 } 169 170 public String getFoo1() { 171 return null; 172 } 173 174 public String getFoo2() { 175 return null; 176 } 177 178 public String getFoo3() { 179 return null; 180 } 181 182 public String getFoo4() { 183 return null; 184 } 185 186 public String getFoo5() { 187 return null; 188 } 189 190 public String getFoo6() { 191 return null; 192 } 193 } 194 195 public class C7 implements A { 196 @Override 197 public String getFoo() { 198 return null; 199 } 200 201 public String getFoo1() { 202 return null; 203 } 204 205 public String getFoo2() { 206 return null; 207 } 208 209 public String getFoo3() { 210 return null; 211 } 212 213 public String getFoo4() { 214 return null; 215 } 216 217 public String getFoo5() { 218 return null; 219 } 220 221 public String getFoo6() { 222 return null; 223 } 224 225 public String getFoo7() { 226 return null; 227 } 228 } 229 230 public class C8 implements A { 231 @Override 232 public String getFoo() { 233 return null; 234 } 235 236 public String getFoo1() { 237 return null; 238 } 239 240 public String getFoo2() { 241 return null; 242 } 243 244 public String getFoo3() { 245 return null; 246 } 247 248 public String getFoo4() { 249 return null; 250 } 251 252 public String getFoo5() { 253 return null; 254 } 255 256 public String getFoo6() { 257 return null; 258 } 259 260 public String getFoo7() { 261 return null; 262 } 263 264 public String getFoo8() { 265 return null; 266 } 267 } 268 269 public class C9 implements A { 270 @Override 271 public String getFoo() { 272 return null; 273 } 274 275 public String getFoo1() { 276 return null; 277 } 278 279 public String getFoo2() { 280 return null; 281 } 282 283 public String getFoo3() { 284 return null; 285 } 286 287 public String getFoo4() { 288 return null; 289 } 290 291 public String getFoo5() { 292 return null; 293 } 294 295 public String getFoo6() { 296 return null; 297 } 298 299 public String getFoo7() { 300 return null; 301 } 302 303 public String getFoo8() { 304 return null; 305 } 306 307 public String getFoo9() { 308 return null; 309 } 310 } 311} 312