1/* 2 * Copyright (c) 2016, 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.BeanInfo; 25import java.beans.BeanProperty; 26import java.beans.IntrospectionException; 27import java.beans.Introspector; 28import java.beans.PropertyChangeListener; 29import java.beans.PropertyDescriptor; 30 31import java.util.Arrays; 32 33 34/** 35 * @test 36 * @bug 8132973 8132732 8155013 8154958 37 * @summary Some check for BeanProperty annotation 38 * @author a.stepanov 39 * @run main AnonymousClassBeanPropertyTest 40 */ 41//TODO in final revision each test should have only one checkInfo/checkAlternate 42public class AnonymousClassBeanPropertyTest { 43 44 private final static String DESCRIPTION = "TEST"; 45 private final static boolean BOUND = true; 46 private final static boolean EXPERT = false; 47 private final static boolean HIDDEN = true; 48 private final static boolean PREFERRED = false; 49 private final static boolean REQUIRED = true; 50 private final static boolean UPDATE = false; 51 52 private final static double X = java.lang.Math.PI; 53 54 private final static String 55 V_NAME = "java.lang.Math.PI", 56 V_SHORT = "PI", 57 V = Double.toString(X); 58 59 private final static String DESCRIPTION_2 = "XYZ"; 60 61 62 // ---------- test cases (interfaces) ---------- 63 64 public interface IPublic { 65 double getX(); 66 } 67 68 private interface IGet { 69 double getX(); 70 } 71 72 private interface ISet { 73 void setX(double v); 74 } 75 76 private interface IGetByIndex { 77 double getX(int i); 78 } 79 80 private interface ISetByIndex { 81 void setX(int i, double v); 82 } 83 84 private interface IGetArray { 85 double[] getX(); 86 } 87 88 private interface ISetArray { 89 void setX(double a[]); 90 } 91 92 private interface IGetBoth { 93 double getX(int i); 94 double[] getX(); 95 } 96 97 private interface ISetBoth { 98 void setX(int i, double v); 99 void setX(double a[]); 100 } 101 102 private interface IGetSet { 103 double getX(); 104 void setX(double v); 105 } 106 107 private interface IGetSetByIndex { 108 double getX(int i); 109 void setX(int i, double v); 110 } 111 112 private interface IGetSetBoth { 113 double getX(int i); 114 double[] getX(); 115 void setX(int i, double v); 116 void setX(double a[]); 117 } 118 119 private interface IIs { 120 boolean isX(); 121 } 122 123 124 // ---------- checks ---------- 125 126 private static boolean check(String what, boolean v, boolean ref) { 127 128 boolean ok = (v == ref); 129 if (!ok) { System.out.println( 130 "invalid " + what + ": " + v + ", expected: " + ref); } 131 return ok; 132 } 133 134 private static boolean checkInfo(Class<?> c, String what, boolean checkVals) { 135 136 BeanInfo i; 137 try { i = Introspector.getBeanInfo(c, Object.class); } 138 catch (IntrospectionException e) { throw new RuntimeException(e); } 139 140 System.out.println("\nchecking info for " + what); 141 142 PropertyDescriptor descriptors[] = i.getPropertyDescriptors(); 143 int nd = descriptors.length; 144 if (nd != 1) { 145 System.out.println("invalid number of descriptors: " + nd); 146 return false; 147 } 148 149 PropertyDescriptor d = descriptors[0]; 150 151 String descr = d.getShortDescription(); 152 boolean ok = descr.equals(DESCRIPTION); 153 if (!ok) { System.out.println("invalid description: " + descr + 154 ", expected: " + DESCRIPTION); } 155 156 ok &= check("isBound", d.isBound(), BOUND); 157 ok &= check("isExpert", d.isExpert(), EXPERT); 158 ok &= check("isHidden", d.isHidden(), HIDDEN); 159 ok &= check("isPreferred", d.isPreferred(), PREFERRED); 160 ok &= check("required", (boolean) d.getValue("required"), REQUIRED); 161 ok &= check("visualUpdate", 162 (boolean) d.getValue("visualUpdate"), UPDATE); 163 164 if (!checkVals) { return ok; } 165 166 Object vals[] = (Object[]) d.getValue("enumerationValues"); 167 if (vals == null) { 168 System.out.println("null enumerationValues"); 169 return false; 170 } 171 172 if (vals.length == 0) { 173 System.out.println("empty enumerationValues"); 174 return false; 175 } 176 177 boolean okVals = ( 178 (vals.length == 3) && 179 vals[0].toString().equals(V_SHORT) && 180 vals[1].toString().equals(V) && 181 vals[2].toString().equals(V_NAME)); 182 183 if (!okVals) { 184 System.out.println("invalid enumerationValues:"); 185 for (Object v: vals) { System.out.println(v.toString()); } 186 } 187 188 return (ok && okVals); 189 } 190 191 private static boolean checkAlternativeInfo(Class<?> c, String what) { 192 193 BeanInfo i; 194 try { i = Introspector.getBeanInfo(c, Object.class); } 195 catch (IntrospectionException e) { throw new RuntimeException(e); } 196 197 System.out.println("checking alternative info for " + what); 198 199 PropertyDescriptor descriptors[] = i.getPropertyDescriptors(); 200 int nd = descriptors.length; 201 if (nd != 1) { 202 System.out.println("invalid number of descriptors: " + nd); 203 return false; 204 } 205 206 PropertyDescriptor d = descriptors[0]; 207 208 String descr = d.getShortDescription(); 209 boolean ok = descr.equals(DESCRIPTION_2); 210 if (!ok) { System.out.println("invalid alternative description: " + 211 descr + ", expected: " + DESCRIPTION_2); } 212 213 ok &= check("isBound", d.isBound(), !BOUND); 214 ok &= check("isExpert", d.isExpert(), !EXPERT); 215 ok &= check("isHidden", d.isHidden(), !HIDDEN); 216 ok &= check("isPreferred", d.isPreferred(), !PREFERRED); 217 ok &= check("required", (boolean) d.getValue("required"), !REQUIRED); 218 ok &= check("visualUpdate", 219 (boolean) d.getValue("visualUpdate"), !UPDATE); 220 221 Object vals[] = (Object[]) d.getValue("enumerationValues"); 222 if (vals != null && vals.length > 0) { 223 System.out.println("non-empty enumerationValues:"); 224 for (Object v: vals) { System.out.print(v.toString()); } 225 System.out.println(); 226 return false; 227 } 228 229 return ok; 230 } 231 232 233 234 // ---------- run tests ---------- 235 236 public static void main(String[] args) { 237 238 boolean passed = true, ok, ok2; 239 240 //---------------------------------------------------------------------- 241 242 // TODO: please uncomment/update after 8154958 fix 243 /* 244 IPublic testPublic = new IPublic() { 245 @BeanProperty( 246 description = DESCRIPTION, 247 bound = BOUND, 248 expert = EXPERT, 249 hidden = HIDDEN, 250 preferred = PREFERRED, 251 required = REQUIRED, 252 visualUpdate = UPDATE, 253 enumerationValues = {V_NAME}) 254 @Override 255 public double getX() { return X; } 256 257 public void addPropertyChangeListener(PropertyChangeListener l) {} 258 public void removePropertyChangeListener(PropertyChangeListener l) {} 259 }; 260 ok = checkInfo(testPublic.getClass(), "IPublic", true); 261 System.out.println("OK = " + ok); 262 passed = passed && ok; 263 */ 264 265 //---------------------------------------------------------------------- 266 267 IGet testGet = new IGet() { 268 @BeanProperty( 269 description = DESCRIPTION, 270 bound = BOUND, 271 expert = EXPERT, 272 hidden = HIDDEN, 273 preferred = PREFERRED, 274 required = REQUIRED, 275 visualUpdate = UPDATE, 276 enumerationValues = {V_NAME}) 277 @Override 278 public double getX() { return X; } 279 280 public void addPropertyChangeListener(PropertyChangeListener l) {} 281 public void removePropertyChangeListener(PropertyChangeListener l) {} 282 }; 283 ok = checkInfo(testGet.getClass(), "IGet", true); 284 System.out.println("OK = " + ok); 285 passed = passed && ok; 286 287 //---------------------------------------------------------------------- 288 289 ISet testSet = new ISet() { 290 291 private double x; 292 293 @BeanProperty( 294 description = DESCRIPTION, 295 bound = BOUND, 296 expert = EXPERT, 297 hidden = HIDDEN, 298 preferred = PREFERRED, 299 required = REQUIRED, 300 visualUpdate = UPDATE, 301 enumerationValues = {V_NAME}) 302 @Override 303 public void setX(double v) { x = v; } 304 305 public void addPropertyChangeListener(PropertyChangeListener l) {} 306 public void removePropertyChangeListener(PropertyChangeListener l) {} 307 }; 308 ok = checkInfo(testSet.getClass(), "ISet", true); 309 System.out.println("OK = " + ok); 310 passed = passed && ok; 311 312 //---------------------------------------------------------------------- 313 314 IGetByIndex testGetByIndex = new IGetByIndex() { 315 316 private final double x[] = {X, X}; 317 318 @BeanProperty( 319 description = DESCRIPTION, 320 bound = BOUND, 321 expert = EXPERT, 322 hidden = HIDDEN, 323 preferred = PREFERRED, 324 required = REQUIRED, 325 visualUpdate = UPDATE, 326 enumerationValues = {V_NAME}) 327 @Override 328 public double getX(int i) { return x[i]; } 329 330 public void addPropertyChangeListener(PropertyChangeListener l) {} 331 public void removePropertyChangeListener(PropertyChangeListener l) {} 332 }; 333 ok = checkInfo(testGetByIndex.getClass(), "IGetByIndex", true); 334 System.out.println("OK = " + ok); 335 passed = passed && ok; 336 337 //---------------------------------------------------------------------- 338 339 ISetByIndex testSetByIndex = new ISetByIndex() { 340 341 private final double x[] = {X, X, X}; 342 343 @BeanProperty( 344 description = DESCRIPTION, 345 bound = BOUND, 346 expert = EXPERT, 347 hidden = HIDDEN, 348 preferred = PREFERRED, 349 required = REQUIRED, 350 visualUpdate = UPDATE, 351 enumerationValues = {V_NAME}) 352 @Override 353 public void setX(int i, double v) { x[i] = v; } 354 355 public void addPropertyChangeListener(PropertyChangeListener l) {} 356 public void removePropertyChangeListener(PropertyChangeListener l) {} 357 }; 358 ok = checkInfo(testSetByIndex.getClass(), "ISetByIndex", true); 359 System.out.println("OK = " + ok); 360 passed = passed && ok; 361 362 //---------------------------------------------------------------------- 363 364 // TODO: please uncomment/update after 8155013 fix 365 /* 366 IGetArray testGetArray = new IGetArray() { 367 368 private final double x[] = {X, X}; 369 370 @BeanProperty( 371 description = DESCRIPTION, 372 bound = BOUND, 373 expert = EXPERT, 374 hidden = HIDDEN, 375 preferred = PREFERRED, 376 required = REQUIRED, 377 visualUpdate = UPDATE, 378 enumerationValues = {V_NAME}) 379 @Override 380 public double[] getX() { return x; } 381 382 public void addPropertyChangeListener(PropertyChangeListener l) {} 383 public void removePropertyChangeListener(PropertyChangeListener l) {} 384 }; 385 ok = checkInfo(testGetArray.getClass(), "IGetArray", true); 386 System.out.println("OK = " + ok); 387 passed = passed && ok; 388 */ 389 390 //---------------------------------------------------------------------- 391 392 // TODO: please uncomment/update after 8155013 fix 393 /* 394 ISetArray testSetArray = new ISetArray() { 395 396 private double x[]; 397 398 @BeanProperty( 399 description = DESCRIPTION, 400 bound = BOUND, 401 expert = EXPERT, 402 hidden = HIDDEN, 403 preferred = PREFERRED, 404 required = REQUIRED, 405 visualUpdate = UPDATE, 406 enumerationValues = {V_NAME}) 407 @Override 408 public void setX(double a[]) { x = Arrays.copyOf(a, a.length); } 409 410 public void addPropertyChangeListener(PropertyChangeListener l) {} 411 public void removePropertyChangeListener(PropertyChangeListener l) {} 412 }; 413 ok = checkInfo(testSetArray.getClass(), "ISetArray", true); 414 System.out.println("OK = " + ok); 415 passed = passed && ok; 416 */ 417 418 //---------------------------------------------------------------------- 419 420 IGetBoth testGetBoth_1 = new IGetBoth() { 421 422 private final double x[] = {X, X}; 423 424 @BeanProperty( 425 description = DESCRIPTION, 426 bound = BOUND, 427 expert = EXPERT, 428 hidden = HIDDEN, 429 preferred = PREFERRED, 430 required = REQUIRED, 431 visualUpdate = UPDATE, 432 enumerationValues = {V_NAME}) 433 @Override 434 public double getX(int i) { return x[i]; } 435 @Override 436 public double[] getX() { return x; } 437 438 public void addPropertyChangeListener(PropertyChangeListener l) {} 439 public void removePropertyChangeListener(PropertyChangeListener l) {} 440 }; 441 ok = checkInfo(testGetBoth_1.getClass(), "IGetBoth-1", true); 442 System.out.println("OK = " + ok); 443 passed = passed && ok; 444 445 // TODO: please uncomment/update after 8155013 fix 446 /* 447 IGetBoth testGetBoth_2 = new IGetBoth() { 448 449 private final double x[] = {X, X}; 450 451 @Override 452 public double getX(int i) { return x[i]; } 453 @BeanProperty( 454 description = DESCRIPTION, 455 bound = BOUND, 456 expert = EXPERT, 457 hidden = HIDDEN, 458 preferred = PREFERRED, 459 required = REQUIRED, 460 visualUpdate = UPDATE, 461 enumerationValues = {V_NAME}) 462 @Override 463 public double[] getX() { return x; } 464 465 public void addPropertyChangeListener(PropertyChangeListener l) {} 466 public void removePropertyChangeListener(PropertyChangeListener l) {} 467 }; 468 ok = checkInfo(testGetBoth_2.getClass(), "IGetBoth-2", true); 469 System.out.println("OK = " + ok); 470 passed = passed && ok; 471 */ 472 473 // TODO: please uncomment/update after 8132732 fix 474 /* 475 IGetBoth testGetBoth_3 = new IGetBoth() { 476 477 private final double x[] = {X, X}; 478 479 @BeanProperty( 480 description = DESCRIPTION, 481 bound = BOUND, 482 expert = EXPERT, 483 hidden = HIDDEN, 484 preferred = PREFERRED, 485 required = REQUIRED, 486 visualUpdate = UPDATE, 487 enumerationValues = {V_NAME}) 488 @Override 489 public double getX(int i) { return x[i]; } 490 @BeanProperty( 491 description = DESCRIPTION_2, 492 bound = !BOUND, 493 expert = !EXPERT, 494 hidden = !HIDDEN, 495 preferred = !PREFERRED, 496 required = !REQUIRED, 497 visualUpdate = !UPDATE) 498 @Override 499 public double[] getX() { return x; } 500 501 public void addPropertyChangeListener(PropertyChangeListener l) {} 502 public void removePropertyChangeListener(PropertyChangeListener l) {} 503 }; 504 ok = checkInfo(testGetBoth_3.getClass(), "IGetBoth-3", true); 505 System.out.println("OK = " + ok); 506 ok2 = checkAlternativeInfo(testGetBoth_3.getClass(), "IGetBoth-3"); 507 System.out.println("OK = " + ok2); 508 passed = passed && (ok || ok2); 509 */ 510 511 //---------------------------------------------------------------------- 512 513 ISetBoth testSetBoth_1 = new ISetBoth() { 514 515 private double x[] = new double[3]; 516 517 @BeanProperty( 518 description = DESCRIPTION, 519 bound = BOUND, 520 expert = EXPERT, 521 hidden = HIDDEN, 522 preferred = PREFERRED, 523 required = REQUIRED, 524 visualUpdate = UPDATE, 525 enumerationValues = {V_NAME}) 526 @Override 527 public void setX(int i, double v) { x[i] = v; } 528 @Override 529 public void setX(double[] a) { x = Arrays.copyOf(a, a.length); } 530 531 public void addPropertyChangeListener(PropertyChangeListener l) {} 532 public void removePropertyChangeListener(PropertyChangeListener l) {} 533 }; 534 ok = checkInfo(testSetBoth_1.getClass(), "ISetBoth-1", true); 535 System.out.println("OK = " + ok); 536 passed = passed && ok; 537 538 // TODO: please uncomment/update after 8155013 fix 539 /* 540 ISetBoth testSetBoth_2 = new ISetBoth() { 541 542 private double x[] = new double[3]; 543 544 @Override 545 public void setX(int i, double v) { x[i] = v; } 546 @BeanProperty( 547 description = DESCRIPTION, 548 bound = BOUND, 549 expert = EXPERT, 550 hidden = HIDDEN, 551 preferred = PREFERRED, 552 required = REQUIRED, 553 visualUpdate = UPDATE, 554 enumerationValues = {V_NAME}) 555 @Override 556 public void setX(double[] a) { x = Arrays.copyOf(a, a.length); } 557 558 public void addPropertyChangeListener(PropertyChangeListener l) {} 559 public void removePropertyChangeListener(PropertyChangeListener l) {} 560 }; 561 ok = checkInfo(testSetBoth_2.getClass(), "ISetBoth-2", true); 562 System.out.println("OK = " + ok); 563 passed = passed && ok; 564 */ 565 566 // TODO: please uncomment/update after 8132732 fix 567 /* 568 ISetBoth testSetBoth_3 = new ISetBoth() { 569 570 private double x[] = {X, X}; 571 572 @BeanProperty( 573 description = DESCRIPTION, 574 bound = BOUND, 575 expert = EXPERT, 576 hidden = HIDDEN, 577 preferred = PREFERRED, 578 required = REQUIRED, 579 visualUpdate = UPDATE, 580 enumerationValues = {V_NAME}) 581 @Override 582 public void setX(int i, double v) { x[i] = v; } 583 @BeanProperty( 584 description = DESCRIPTION_2, 585 bound = !BOUND, 586 expert = !EXPERT, 587 hidden = !HIDDEN, 588 preferred = !PREFERRED, 589 required = !REQUIRED, 590 visualUpdate = !UPDATE) 591 @Override 592 public void setX(double[] a) { x = Arrays.copyOf(a, a.length); } 593 594 public void addPropertyChangeListener(PropertyChangeListener l) {} 595 public void removePropertyChangeListener(PropertyChangeListener l) {} 596 }; 597 ok = checkInfo(testSetBoth_3.getClass(), "ISetBoth-3", true); 598 System.out.println("OK = " + ok); 599 ok2 = checkAlternativeInfo(testSetBoth_3.getClass(), "ISetBoth-3"); 600 System.out.println("OK = " + ok2); 601 passed = passed && (ok || ok2); 602 */ 603 604 //---------------------------------------------------------------------- 605 606 IGetSet testGetSet_1 = new IGetSet() { 607 608 private double x; 609 610 @BeanProperty( 611 description = DESCRIPTION, 612 bound = BOUND, 613 expert = EXPERT, 614 hidden = HIDDEN, 615 preferred = PREFERRED, 616 required = REQUIRED, 617 visualUpdate = UPDATE, 618 enumerationValues = {V_NAME}) 619 @Override 620 public double getX() { return x; } 621 @Override 622 public void setX(double v) { x = v; } 623 624 public void addPropertyChangeListener(PropertyChangeListener l) {} 625 public void removePropertyChangeListener(PropertyChangeListener l) {} 626 }; 627 ok = checkInfo(testGetSet_1.getClass(), "IGetSet-1", true); 628 System.out.println("OK = " + ok); 629 passed = passed && ok; 630 631 632 IGetSet testGetSet_2 = new IGetSet() { 633 634 private double x; 635 636 @Override 637 public double getX() { return x; } 638 @BeanProperty( 639 description = DESCRIPTION, 640 bound = BOUND, 641 expert = EXPERT, 642 hidden = HIDDEN, 643 preferred = PREFERRED, 644 required = REQUIRED, 645 visualUpdate = UPDATE, 646 enumerationValues = {V_NAME}) 647 @Override 648 public void setX(double v) { x = v; } 649 650 public void addPropertyChangeListener(PropertyChangeListener l) {} 651 public void removePropertyChangeListener(PropertyChangeListener l) {} 652 }; 653 ok = checkInfo(testGetSet_2.getClass(), "IGetSet-2", true); 654 System.out.println("OK = " + ok); 655 passed = passed && ok; 656 657 IGetSet testGetSet_3 = new IGetSet() { 658 659 private double x; 660 661 @Override 662 @BeanProperty( 663 description = DESCRIPTION, 664 bound = BOUND, 665 expert = EXPERT, 666 hidden = HIDDEN, 667 preferred = PREFERRED, 668 required = REQUIRED, 669 visualUpdate = UPDATE, 670 enumerationValues = {V_NAME}) 671 public double getX() { return x; } 672 @BeanProperty( 673 description = DESCRIPTION_2, 674 bound = !BOUND, 675 expert = !EXPERT, 676 hidden = !HIDDEN, 677 preferred = !PREFERRED, 678 required = !REQUIRED, 679 visualUpdate = !UPDATE) 680 @Override 681 public void setX(double v) { x = v; } 682 683 public void addPropertyChangeListener(PropertyChangeListener l) {} 684 public void removePropertyChangeListener(PropertyChangeListener l) {} 685 }; 686 ok = checkInfo(testGetSet_3.getClass(), "IGetSet-3", true); 687 System.out.println("OK = " + ok); 688 passed = passed && ok; 689 690 //---------------------------------------------------------------------- 691 692 IGetSetByIndex testGetSetByIndex_1 = new IGetSetByIndex() { 693 694 private final double x[] = {X, X}; 695 696 @BeanProperty( 697 description = DESCRIPTION, 698 bound = BOUND, 699 expert = EXPERT, 700 hidden = HIDDEN, 701 preferred = PREFERRED, 702 required = REQUIRED, 703 visualUpdate = UPDATE, 704 enumerationValues = {V_NAME}) 705 @Override 706 public double getX(int i) { return x[i]; } 707 @Override 708 public void setX(int i, double v) { x[i] = v; } 709 710 public void addPropertyChangeListener(PropertyChangeListener l) {} 711 public void removePropertyChangeListener(PropertyChangeListener l) {} 712 }; 713 ok = checkInfo(testGetSetByIndex_1.getClass(), "IGetSetByIndex-1", true); 714 System.out.println("OK = " + ok); 715 passed = passed && ok; 716 717 718 IGetSetByIndex testGetSetByIndex_2 = new IGetSetByIndex() { 719 720 private final double x[] = {X, X}; 721 722 @Override 723 public double getX(int i) { return x[i]; } 724 @BeanProperty( 725 description = DESCRIPTION, 726 bound = BOUND, 727 expert = EXPERT, 728 hidden = HIDDEN, 729 preferred = PREFERRED, 730 required = REQUIRED, 731 visualUpdate = UPDATE, 732 enumerationValues = {V_NAME}) 733 @Override 734 public void setX(int i, double v) { x[i] = v; } 735 736 public void addPropertyChangeListener(PropertyChangeListener l) {} 737 public void removePropertyChangeListener(PropertyChangeListener l) {} 738 }; 739 ok = checkInfo(testGetSetByIndex_2.getClass(), "IGetSetByIndex-2", true); 740 System.out.println("OK = " + ok); 741 passed = passed && ok; 742 743 IGetSetByIndex testGetSetByIndex_3 = new IGetSetByIndex() { 744 745 private double x[] = {X, X}; 746 747 @BeanProperty( 748 description = DESCRIPTION, 749 bound = BOUND, 750 expert = EXPERT, 751 hidden = HIDDEN, 752 preferred = PREFERRED, 753 required = REQUIRED, 754 visualUpdate = UPDATE, 755 enumerationValues = {V_NAME}) 756 @Override 757 public double getX(int i) { 758 return x[i]; 759 } 760 @BeanProperty( 761 description = DESCRIPTION_2, 762 bound = !BOUND, 763 expert = !EXPERT, 764 hidden = !HIDDEN, 765 preferred = !PREFERRED, 766 required = !REQUIRED, 767 visualUpdate = !UPDATE) 768 @Override 769 public void setX(int i, double v) { 770 x[i] = v; 771 } 772 773 public void addPropertyChangeListener(PropertyChangeListener l) {} 774 public void removePropertyChangeListener(PropertyChangeListener l) {} 775 }; 776 ok = checkInfo(testGetSetByIndex_3.getClass(), "IGetSetByIndex-3", true); 777 System.out.println("OK = " + ok); 778 passed = passed && ok; 779 780 //---------------------------------------------------------------------- 781 782 // TODO: please uncomment/update after 8155013 fix 783 /* 784 IGetSetBoth testGetSetBoth_1 = new IGetSetBoth() { 785 786 private double x[] = {X, X}; 787 788 @Override 789 public double getX(int i) { return x[i]; } 790 @BeanProperty( 791 description = DESCRIPTION, 792 bound = BOUND, 793 expert = EXPERT, 794 hidden = HIDDEN, 795 preferred = PREFERRED, 796 required = REQUIRED, 797 visualUpdate = UPDATE, 798 enumerationValues = {V_NAME}) 799 @Override 800 public double[] getX() { return x; } 801 @Override 802 public void setX(int i, double v) { x[i] = v; } 803 @Override 804 public void setX(double[] a) { x = Arrays.copyOf(a, a.length); } 805 806 public void addPropertyChangeListener(PropertyChangeListener l) {} 807 public void removePropertyChangeListener(PropertyChangeListener l) {} 808 }; 809 ok = checkInfo(testGetSetBoth_1.getClass(), "IGetSetBoth-1", true); 810 System.out.println("OK = " + ok); 811 passed = passed && ok; 812 */ 813 814 // TODO: please uncomment/update after 8155013 fix 815 /* 816 IGetSetBoth testGetSetBoth_2 = new IGetSetBoth() { 817 818 private double x[] = {X, X}; 819 820 @Override 821 public double getX(int i) { return x[i]; } 822 @Override 823 public double[] getX() { return x; } 824 @Override 825 public void setX(int i, double v) { x[i] = v; } 826 @BeanProperty( 827 description = DESCRIPTION, 828 bound = BOUND, 829 expert = EXPERT, 830 hidden = HIDDEN, 831 preferred = PREFERRED, 832 required = REQUIRED, 833 visualUpdate = UPDATE, 834 enumerationValues = {V_NAME}) 835 @Override 836 public void setX(double[] a) { x = Arrays.copyOf(a, a.length); } 837 838 public void addPropertyChangeListener(PropertyChangeListener l) {} 839 public void removePropertyChangeListener(PropertyChangeListener l) {} 840 }; 841 ok = checkInfo(testGetSetBoth_2.getClass(), "IGetSetBoth-2", true); 842 System.out.println("OK = " + ok); 843 passed = passed && ok; 844 */ 845 846 // TODO: please uncomment/update after 8155013 fix 847 /* 848 IGetSetBoth testGetSetBoth_3 = new IGetSetBoth() { 849 850 private double x[] = {X, X}; 851 852 @BeanProperty( 853 description = DESCRIPTION, 854 bound = BOUND, 855 expert = EXPERT, 856 hidden = HIDDEN, 857 preferred = PREFERRED, 858 required = REQUIRED, 859 visualUpdate = UPDATE, 860 enumerationValues = {V_NAME}) 861 @Override 862 public double getX(int i) { return x[i]; } 863 @Override 864 public double[] getX() { return x; } 865 @Override 866 public void setX(int i, double v) { x[i] = v; } 867 @BeanProperty( 868 description = DESCRIPTION_2, 869 bound = !BOUND, 870 expert = !EXPERT, 871 hidden = !HIDDEN, 872 preferred = !PREFERRED, 873 required = !REQUIRED, 874 visualUpdate = !UPDATE) 875 @Override 876 public void setX(double[] a) { x = Arrays.copyOf(a, a.length); } 877 878 public void addPropertyChangeListener(PropertyChangeListener l) {} 879 public void removePropertyChangeListener(PropertyChangeListener l) {} 880 }; 881 ok = checkInfo(testGetSetBoth_3.getClass(), "IGetSetBoth-3", true); 882 System.out.println("OK = " + ok); 883 ok2 = checkAlternativeInfo( 884 testGetSetBoth_3.getClass(), "IGetSetBoth-3"); 885 System.out.println("OK = " + ok2); 886 passed = passed && (ok || ok2); 887 */ 888 889 //---------------------------------------------------------------------- 890 891 IIs testIs_1 = new IIs() { 892 893 @BeanProperty( 894 description = DESCRIPTION, 895 bound = BOUND, 896 expert = EXPERT, 897 hidden = HIDDEN, 898 preferred = PREFERRED, 899 required = REQUIRED, 900 visualUpdate = UPDATE) 901 @Override 902 public boolean isX() { return false; } 903 904 public void addPropertyChangeListener(PropertyChangeListener l) {} 905 public void removePropertyChangeListener(PropertyChangeListener l) {} 906 }; 907 ok = checkInfo(testIs_1.getClass(), "IIs-1", false); 908 System.out.println("OK = " + ok); 909 passed = passed && ok; 910 911 912 IIs testIs_2 = new IIs() { 913 914 private boolean b; 915 916 @Override 917 public boolean isX() { return b; } 918 919 @BeanProperty( 920 description = DESCRIPTION, 921 bound = BOUND, 922 expert = EXPERT, 923 hidden = HIDDEN, 924 preferred = PREFERRED, 925 required = REQUIRED, 926 visualUpdate = UPDATE) 927 public void setX(boolean v) { b = v; } 928 929 public void addPropertyChangeListener(PropertyChangeListener l) {} 930 public void removePropertyChangeListener(PropertyChangeListener l) {} 931 }; 932 ok = checkInfo(testIs_2.getClass(), "IIs-2", false); 933 System.out.println("OK = " + ok); 934 passed = passed && ok; 935 936 937 IIs testIs_3 = new IIs() { 938 939 @BeanProperty( 940 description = DESCRIPTION, 941 bound = BOUND, 942 expert = EXPERT, 943 hidden = HIDDEN, 944 preferred = PREFERRED, 945 required = REQUIRED, 946 visualUpdate = UPDATE) 947 @Override 948 public boolean isX() { return false; } 949 950 @BeanProperty( 951 description = DESCRIPTION_2, 952 bound = !BOUND, 953 expert = !EXPERT, 954 hidden = !HIDDEN, 955 preferred = !PREFERRED, 956 required = !REQUIRED, 957 visualUpdate = !UPDATE) 958 public boolean getX() { return false; } 959 960 public void addPropertyChangeListener(PropertyChangeListener l) {} 961 public void removePropertyChangeListener(PropertyChangeListener l) {} 962 }; 963 ok = checkInfo(testIs_3.getClass(), "IIs-3", false); 964 System.out.println("OK = " + ok); 965 ok2 = checkAlternativeInfo(testIs_3.getClass(), "IIs-3"); 966 System.out.println("OK = " + ok2); 967 passed = passed && (ok || ok2); 968 969 IIs testIs_4 = new IIs() { 970 971 private boolean b; 972 973 @BeanProperty( 974 description = DESCRIPTION, 975 bound = BOUND, 976 expert = EXPERT, 977 hidden = HIDDEN, 978 preferred = PREFERRED, 979 required = REQUIRED, 980 visualUpdate = UPDATE) 981 @Override 982 public boolean isX() { return b; } 983 984 @BeanProperty( 985 description = DESCRIPTION_2, 986 bound = !BOUND, 987 expert = !EXPERT, 988 hidden = !HIDDEN, 989 preferred = !PREFERRED, 990 required = !REQUIRED, 991 visualUpdate = !UPDATE) 992 public void setX(boolean v) { b = v; } 993 994 public void addPropertyChangeListener(PropertyChangeListener l) {} 995 public void removePropertyChangeListener(PropertyChangeListener l) {} 996 }; 997 ok = checkInfo(testIs_4.getClass(), "IIs-4", false); 998 System.out.println("OK = " + ok); 999 passed = passed && ok; 1000 1001 //---------------------------------------------------------------------- 1002 1003 1004 if (!passed) { throw new RuntimeException("test failed"); } 1005 System.out.println("\ntest passed"); 1006 } 1007} 1008