Path: blob/master/test/jdk/java/beans/Introspector/InheritanceBeanPropertyTest.java
41149 views
/*1* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation.7*8* This code is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License11* version 2 for more details (a copy is included in the LICENSE file that12* accompanied this code).13*14* You should have received a copy of the GNU General Public License version15* 2 along with this work; if not, write to the Free Software Foundation,16* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.17*18* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA19* or visit www.oracle.com if you need additional information or have any20* questions.21*/2223import java.beans.BeanInfo;24import java.beans.BeanProperty;25import java.beans.IntrospectionException;26import java.beans.Introspector;27import java.beans.PropertyChangeListener;28import java.beans.PropertyDescriptor;2930import java.util.Arrays;313233/**34* @test35* @bug 8132565 815501336* @summary Some inheritance check for BeanProperty annotation37* @author a.stepanov38* @run main InheritanceBeanPropertyTest39*/404142public class InheritanceBeanPropertyTest {4344private final static String DESCRIPTION = "TEST";45private final static boolean BOUND = true;46private final static boolean EXPERT = false;47private final static boolean HIDDEN = true;48private final static boolean PREFERRED = false;49private final static boolean REQUIRED = true;50private final static boolean UPDATE = false;5152private final static double X = java.lang.Math.PI;5354private final static String55V_NAME = "java.lang.Math.PI",56V_SHORT = "PI",57V = Double.toString(X);5859private final static String DESCRIPTION_2 = "XYZ";606162// ---------- test cases ----------6364public static class BaseGet {6566private final static String TESTCASE = "base getter";6768public double getX() { return X; }69}7071public static class OverloadGet extends BaseGet {7273private final static String TESTCASE = "overload getter";7475private final double x[] = {X, X, X};7677@BeanProperty(78description = DESCRIPTION,79bound = BOUND,80expert = EXPERT,81hidden = HIDDEN,82preferred = PREFERRED,83required = REQUIRED,84visualUpdate = UPDATE,85enumerationValues = {V_NAME})86public double getX(int i) { return x[i]; } // indexed8788public void addPropertyChangeListener(PropertyChangeListener l) {}89public void removePropertyChangeListener(PropertyChangeListener l) {}90}9192// ----------9394public static class BaseSet {9596private final static String TESTCASE = "base setter";9798double u;99public void setX(double v) { u = v; }100}101102public static class OverloadSet extends BaseSet {103104private final static String TESTCASE = "overload setter";105106private final double x[] = {X, X, X};107108@BeanProperty(109description = DESCRIPTION,110bound = BOUND,111expert = EXPERT,112hidden = HIDDEN,113preferred = PREFERRED,114required = REQUIRED,115visualUpdate = UPDATE,116enumerationValues = {V_NAME})117public void setX(int i, double v) { x[i] = v; } // indexed118119public void addPropertyChangeListener(PropertyChangeListener l) {}120public void removePropertyChangeListener(PropertyChangeListener l) {}121}122123// ----------124125public static class BaseIGet {126127protected final double x[] = {X, X, X};128public double[] getX() { return x; }129}130131public static class OverloadIGet extends BaseIGet {132133private final static String TESTCASE = "overload indexed getter";134135@BeanProperty(136description = DESCRIPTION,137bound = BOUND,138expert = EXPERT,139hidden = HIDDEN,140preferred = PREFERRED,141required = REQUIRED,142visualUpdate = UPDATE,143enumerationValues = {V_NAME})144public double getX(int i) { return x[i]; }145146public void addPropertyChangeListener(PropertyChangeListener l) {}147public void removePropertyChangeListener(PropertyChangeListener l) {}148}149150// ----------151152public static class BaseISet {153154protected double x[] = {X, X, X};155public void setX(double a[]) { x = Arrays.copyOf(a, a.length); }156}157158public static class OverloadISet extends BaseISet {159160private final static String TESTCASE = "overload indexed setter";161162@BeanProperty(163description = DESCRIPTION,164bound = BOUND,165expert = EXPERT,166hidden = HIDDEN,167preferred = PREFERRED,168required = REQUIRED,169visualUpdate = UPDATE,170enumerationValues = {V_NAME})171public void setX(int i, double v) { x[i] = v; }172173public void addPropertyChangeListener(PropertyChangeListener l) {}174public void removePropertyChangeListener(PropertyChangeListener l) {}175}176177// ----------178179public static class BoolGet {180181@BeanProperty(182description = DESCRIPTION_2,183bound = !BOUND,184expert = !EXPERT,185hidden = !HIDDEN,186preferred = !PREFERRED,187required = !REQUIRED,188visualUpdate = !UPDATE)189public boolean getX() { return false; }190}191192public static class BoolGetIs extends BoolGet {193194private final static String TESTCASE = "base boolean getter + is";195196@BeanProperty(197description = DESCRIPTION,198bound = BOUND,199expert = EXPERT,200hidden = HIDDEN,201preferred = PREFERRED,202required = REQUIRED,203visualUpdate = UPDATE)204public boolean isX() { return false; }205206public void addPropertyChangeListener(PropertyChangeListener l) {}207public void removePropertyChangeListener(PropertyChangeListener l) {}208}209// ----------210211public static class BoolIs {212213@BeanProperty(214description = DESCRIPTION_2,215bound = !BOUND,216expert = !EXPERT,217hidden = !HIDDEN,218preferred = !PREFERRED,219required = !REQUIRED,220visualUpdate = !UPDATE)221public boolean isX() { return false; }222}223224public static class BoolIsGet extends BoolIs {225226private final static String TESTCASE = "base is + boolean getter";227228@BeanProperty(229description = DESCRIPTION,230bound = BOUND,231expert = EXPERT,232hidden = HIDDEN,233preferred = PREFERRED,234required = REQUIRED,235visualUpdate = UPDATE)236public boolean getX() { return false; }237238public void addPropertyChangeListener(PropertyChangeListener l) {}239public void removePropertyChangeListener(PropertyChangeListener l) {}240}241242// ----------243244public static class AnnotatedGet {245246private final static String TESTCASE = "annotated super getter";247248@BeanProperty(249description = DESCRIPTION,250bound = BOUND,251expert = EXPERT,252hidden = HIDDEN,253preferred = PREFERRED,254required = REQUIRED,255visualUpdate = UPDATE,256enumerationValues = {V_NAME})257public double getX() { return 0.; }258259public void addPropertyChangeListener(PropertyChangeListener l) {}260public void removePropertyChangeListener(PropertyChangeListener l) {}261}262263public static class OverrideAnnotatedGet extends AnnotatedGet {264265private final static String TESTCASE = "override annotated getter";266267@Override268public double getX() { return X; }269}270271// ----------272273public static class AnnotatedIs {274275private final static String TESTCASE = "annotated super is";276277@BeanProperty(278description = DESCRIPTION,279bound = BOUND,280expert = EXPERT,281hidden = HIDDEN,282preferred = PREFERRED,283required = REQUIRED,284visualUpdate = UPDATE,285enumerationValues = {V_NAME})286public boolean isX() { return false; }287288public void addPropertyChangeListener(PropertyChangeListener l) {}289public void removePropertyChangeListener(PropertyChangeListener l) {}290}291292public static class OverrideAnnotatedIs extends AnnotatedIs {293294private final static String TESTCASE = "override annotated is";295296@Override297public boolean isX() { return false; }298}299300// ----------301302public static class AnnotatedSet {303304private final static String TESTCASE = "annotated super set";305306protected double x;307308@BeanProperty(309description = DESCRIPTION,310bound = BOUND,311expert = EXPERT,312hidden = HIDDEN,313preferred = PREFERRED,314required = REQUIRED,315visualUpdate = UPDATE,316enumerationValues = {V_NAME})317public void setX(double v) { x = -v; }318319public void addPropertyChangeListener(PropertyChangeListener l) {}320public void removePropertyChangeListener(PropertyChangeListener l) {}321}322323public static class OverrideAnnotatedSet extends AnnotatedSet {324325private final static String TESTCASE = "override annotated setter";326327@Override328public void setX(double v) { x = v; }329}330331// ----------332333public static class AnnotatedGet2 {334335protected double x;336337@BeanProperty(338description = DESCRIPTION_2,339bound = !BOUND,340expert = !EXPERT,341hidden = !HIDDEN,342preferred = !PREFERRED,343required = !REQUIRED,344visualUpdate = !UPDATE)345public double getX() { return 0.; }346}347348public static class OverrideAnnotatedGet2 extends AnnotatedGet2 {349350private final static String TESTCASE = "override annotated getter - 2";351352@BeanProperty(353description = DESCRIPTION,354bound = BOUND,355expert = EXPERT,356hidden = HIDDEN,357preferred = PREFERRED,358required = REQUIRED,359visualUpdate = UPDATE,360enumerationValues = {V_NAME})361@Override362public double getX() { return X; }363364public void addPropertyChangeListener(PropertyChangeListener l) {}365public void removePropertyChangeListener(PropertyChangeListener l) {}366}367368public static class AnnotatedGet2Ext extends AnnotatedGet2 {369370private final static String TESTCASE = "extend annotated getter - 2";371372@BeanProperty(373description = DESCRIPTION,374bound = BOUND,375expert = EXPERT,376hidden = HIDDEN,377preferred = PREFERRED,378required = REQUIRED,379visualUpdate = UPDATE,380enumerationValues = {V_NAME})381public void setX(double v) { x = v; }382383public void addPropertyChangeListener(PropertyChangeListener l) {}384public void removePropertyChangeListener(PropertyChangeListener l) {}385}386387// ----------388389public static class AnnotatedIs2 {390391protected boolean b = false;392393@BeanProperty(394description = DESCRIPTION_2,395bound = !BOUND,396expert = !EXPERT,397hidden = !HIDDEN,398preferred = !PREFERRED,399required = !REQUIRED,400visualUpdate = !UPDATE)401public boolean isX() { return false; }402}403404public static class OverrideAnnotatedIs2 extends AnnotatedIs2 {405406private final static String TESTCASE = "override annotated is - 2";407408@BeanProperty(409description = DESCRIPTION,410bound = BOUND,411expert = EXPERT,412hidden = HIDDEN,413preferred = PREFERRED,414required = REQUIRED,415visualUpdate = UPDATE)416@Override417public boolean isX() { return b; }418419public void addPropertyChangeListener(PropertyChangeListener l) {}420public void removePropertyChangeListener(PropertyChangeListener l) {}421}422423public static class AnnotatedIs2Ext extends AnnotatedIs2 {424425private final static String TESTCASE = "extend annotated is - 2";426427@BeanProperty(428description = DESCRIPTION,429bound = BOUND,430expert = EXPERT,431hidden = HIDDEN,432preferred = PREFERRED,433required = REQUIRED,434visualUpdate = UPDATE)435public void setX(boolean v) { b = v; }436437public void addPropertyChangeListener(PropertyChangeListener l) {}438public void removePropertyChangeListener(PropertyChangeListener l) {}439}440441// ----------442443public static class AnnotatedSet2 {444445protected double x;446447@BeanProperty(448description = DESCRIPTION_2,449bound = !BOUND,450expert = !EXPERT,451hidden = !HIDDEN,452preferred = !PREFERRED,453required = !REQUIRED,454visualUpdate = !UPDATE)455public void setX(double v) { x = -v; }456}457458public static class OverrideAnnotatedSet2 extends AnnotatedSet2 {459460private final static String TESTCASE = "override annotated setter - 2";461462@BeanProperty(463description = DESCRIPTION,464bound = BOUND,465expert = EXPERT,466hidden = HIDDEN,467preferred = PREFERRED,468required = REQUIRED,469visualUpdate = UPDATE,470enumerationValues = {V_NAME})471@Override472public void setX(double v) { x = v; }473474public void addPropertyChangeListener(PropertyChangeListener l) {}475public void removePropertyChangeListener(PropertyChangeListener l) {}476}477478public static class AnnotatedSet2Ext extends AnnotatedSet2 {479480private final static String TESTCASE = "extend annotated setter - 2";481482@BeanProperty(483description = DESCRIPTION,484bound = BOUND,485expert = EXPERT,486hidden = HIDDEN,487preferred = PREFERRED,488required = REQUIRED,489visualUpdate = UPDATE,490enumerationValues = {V_NAME})491public double getX() { return x; }492493public void addPropertyChangeListener(PropertyChangeListener l) {}494public void removePropertyChangeListener(PropertyChangeListener l) {}495}496497// ----------498499public abstract static class AbstractGet {500501@BeanProperty(502description = DESCRIPTION_2,503bound = !BOUND,504expert = !EXPERT,505hidden = !HIDDEN,506preferred = !PREFERRED,507required = !REQUIRED,508visualUpdate = !UPDATE)509public abstract double getX();510}511512public static class OverrideAbstractGet extends AbstractGet {513514private final static String TESTCASE =515"override abstract annotated getter";516517@Override518public double getX() { return X; }519}520521public static class OverrideAbstractGet2 extends AbstractGet {522523private final static String TESTCASE =524"override abstract annotated getter - 2";525526@BeanProperty(527description = DESCRIPTION,528bound = BOUND,529expert = EXPERT,530hidden = HIDDEN,531preferred = PREFERRED,532required = REQUIRED,533visualUpdate = UPDATE,534enumerationValues = {V_NAME})535@Override536public double getX() { return X; }537538public void addPropertyChangeListener(PropertyChangeListener l) {}539public void removePropertyChangeListener(PropertyChangeListener l) {}540}541542public abstract static class AbstractGetExt extends AbstractGet {543544private final static String TESTCASE =545"extend abstract annotated getter";546547@BeanProperty(548description = DESCRIPTION,549bound = BOUND,550expert = EXPERT,551hidden = HIDDEN,552preferred = PREFERRED,553required = REQUIRED,554visualUpdate = UPDATE,555enumerationValues = {V_NAME})556public abstract void setX(double v);557558public void addPropertyChangeListener(PropertyChangeListener l) {}559public void removePropertyChangeListener(PropertyChangeListener l) {}560}561562// ----------563564public abstract static class AbstractIs {565566@BeanProperty(567description = DESCRIPTION_2,568bound = !BOUND,569expert = !EXPERT,570hidden = !HIDDEN,571preferred = !PREFERRED,572required = !REQUIRED,573visualUpdate = !UPDATE)574public abstract boolean isX();575}576577public static class OverrideAbstractIs extends AbstractIs {578579private final static String TESTCASE =580"override abstract annotated is";581582@Override583public boolean isX() { return true; }584}585586public static class OverrideAbstractIs2 extends AbstractIs {587588private final static String TESTCASE =589"override abstract annotated is - 2";590591@BeanProperty(592description = DESCRIPTION,593bound = BOUND,594expert = EXPERT,595hidden = HIDDEN,596preferred = PREFERRED,597required = REQUIRED,598visualUpdate = UPDATE)599@Override600public boolean isX() { return true; }601602public void addPropertyChangeListener(PropertyChangeListener l) {}603public void removePropertyChangeListener(PropertyChangeListener l) {}604}605606607public abstract static class AbstractIsExt extends AbstractIs {608609private final static String TESTCASE =610"extend abstract annotated is";611612@BeanProperty(613description = DESCRIPTION,614bound = BOUND,615expert = EXPERT,616hidden = HIDDEN,617preferred = PREFERRED,618required = REQUIRED,619visualUpdate = UPDATE)620public abstract boolean getX();621622public void addPropertyChangeListener(PropertyChangeListener l) {}623public void removePropertyChangeListener(PropertyChangeListener l) {}624}625626// ----------627628public abstract static class AbstractSet {629630@BeanProperty(631description = DESCRIPTION_2,632bound = !BOUND,633expert = !EXPERT,634hidden = !HIDDEN,635preferred = !PREFERRED,636required = !REQUIRED,637visualUpdate = !UPDATE)638public abstract void setX(double v);639}640641public static class OverrideAbstractSet extends AbstractSet {642643private final static String TESTCASE =644"override abstract annotated setter";645646private double x;647648@Override649public void setX(double v) { x = v; }650}651652public static class OverrideAbstractSet2 extends AbstractSet {653654private final static String TESTCASE =655"override abstract annotated setter - 2";656657private double x;658659@BeanProperty(660description = DESCRIPTION,661bound = BOUND,662expert = EXPERT,663hidden = HIDDEN,664preferred = PREFERRED,665required = REQUIRED,666visualUpdate = UPDATE,667enumerationValues = {V_NAME})668@Override669public void setX(double v) { x = v; }670671public void addPropertyChangeListener(PropertyChangeListener l) {}672public void removePropertyChangeListener(PropertyChangeListener l) {}673}674675public abstract static class AbstractSetExt extends AbstractSet {676677private final static String TESTCASE =678"extend abstract annotated setter";679680@BeanProperty(681description = DESCRIPTION,682bound = BOUND,683expert = EXPERT,684hidden = HIDDEN,685preferred = PREFERRED,686required = REQUIRED,687visualUpdate = UPDATE,688enumerationValues = {V_NAME})689public abstract void setX(double v[]);690691public void addPropertyChangeListener(PropertyChangeListener l) {}692public void removePropertyChangeListener(PropertyChangeListener l) {}693}694695// ----------696697public static abstract class AbstractGet2 {698699private final static String TESTCASE = "abstract super getter";700701@BeanProperty(702description = DESCRIPTION,703bound = BOUND,704expert = EXPERT,705hidden = HIDDEN,706preferred = PREFERRED,707required = REQUIRED,708visualUpdate = UPDATE,709enumerationValues = {V_NAME})710public abstract double getX();711712public void addPropertyChangeListener(PropertyChangeListener l) {}713public void removePropertyChangeListener(PropertyChangeListener l) {}714}715716public static abstract class AbstractGet2Ext extends AbstractGet2 {717718@BeanProperty(719description = DESCRIPTION_2,720bound = !BOUND,721expert = !EXPERT,722hidden = !HIDDEN,723preferred = !PREFERRED,724required = !REQUIRED,725visualUpdate = !UPDATE)726public abstract void setX(double a[]);727}728729// ----------730731public static interface IGet {732733@BeanProperty(734description = DESCRIPTION_2,735bound = !BOUND,736expert = !EXPERT,737hidden = !HIDDEN,738preferred = !PREFERRED,739required = !REQUIRED,740visualUpdate = !UPDATE)741double getX();742}743744public static class IGetImpl implements IGet {745746private final static String TESTCASE = "implement getter interface";747748@Override749public double getX() { return X; }750}751752public static class IGetImpl2 implements IGet {753754private final static String TESTCASE = "implement getter interface - 2";755756@BeanProperty(757description = DESCRIPTION,758bound = BOUND,759expert = EXPERT,760hidden = HIDDEN,761preferred = PREFERRED,762required = REQUIRED,763visualUpdate = UPDATE,764enumerationValues = {V_NAME})765@Override766public double getX() { return X; }767768public void addPropertyChangeListener(PropertyChangeListener l) {}769public void removePropertyChangeListener(PropertyChangeListener l) {}770}771772public abstract static class IGetImpl3 implements IGet {773774private final static String TESTCASE = "implement getter interface - 3";775776@BeanProperty(777description = DESCRIPTION,778bound = BOUND,779expert = EXPERT,780hidden = HIDDEN,781preferred = PREFERRED,782required = REQUIRED,783visualUpdate = UPDATE,784enumerationValues = {V_NAME})785public abstract void setX(double v);786787public void addPropertyChangeListener(PropertyChangeListener l) {}788public void removePropertyChangeListener(PropertyChangeListener l) {}789}790791// ----------792793public static interface IIs {794795@BeanProperty(796description = DESCRIPTION_2,797bound = !BOUND,798expert = !EXPERT,799hidden = !HIDDEN,800preferred = !PREFERRED,801required = !REQUIRED,802visualUpdate = !UPDATE)803public boolean isX();804}805806public static class IIsImpl implements IIs {807808private final static String TESTCASE = "implement is interface";809810@Override811public boolean isX() { return true; }812}813814public static class IIsImpl2 implements IIs {815816private final static String TESTCASE = "implement is interface - 2";817818@BeanProperty(819description = DESCRIPTION,820bound = BOUND,821expert = EXPERT,822hidden = HIDDEN,823preferred = PREFERRED,824required = REQUIRED,825visualUpdate = UPDATE)826@Override827public boolean isX() { return true; }828829public void addPropertyChangeListener(PropertyChangeListener l) {}830public void removePropertyChangeListener(PropertyChangeListener l) {}831}832833public abstract static class IIsImpl3 implements IIs {834835private final static String TESTCASE = "implement is interface - 3";836837@BeanProperty(838description = DESCRIPTION,839bound = BOUND,840expert = EXPERT,841hidden = HIDDEN,842preferred = PREFERRED,843required = REQUIRED,844visualUpdate = UPDATE)845public abstract void setX(boolean v);846847public void addPropertyChangeListener(PropertyChangeListener l) {}848public void removePropertyChangeListener(PropertyChangeListener l) {}849}850851// ----------852853public static interface ISet {854855@BeanProperty(856description = DESCRIPTION_2,857bound = !BOUND,858expert = !EXPERT,859hidden = !HIDDEN,860preferred = !PREFERRED,861required = !REQUIRED,862visualUpdate = !UPDATE)863public void setX(double v);864}865866public static class ISetImpl implements ISet {867868private final static String TESTCASE = "implement getter interface";869870private double x;871872@Override873public void setX(double v) { x = v; }874}875876public static class ISetImpl2 implements ISet {877878private final static String TESTCASE = "implement getter interface - 2";879880private double x;881882@BeanProperty(883description = DESCRIPTION,884bound = BOUND,885expert = EXPERT,886hidden = HIDDEN,887preferred = PREFERRED,888required = REQUIRED,889visualUpdate = UPDATE,890enumerationValues = {V_NAME})891@Override892public void setX(double v) { x = v; }893894public void addPropertyChangeListener(PropertyChangeListener l) {}895public void removePropertyChangeListener(PropertyChangeListener l) {}896}897898public abstract static class ISetImpl3 implements ISet {899900private final static String TESTCASE = "implement getter interface - 3";901902@BeanProperty(903description = DESCRIPTION,904bound = BOUND,905expert = EXPERT,906hidden = HIDDEN,907preferred = PREFERRED,908required = REQUIRED,909visualUpdate = UPDATE,910enumerationValues = {V_NAME})911public abstract double getX();912913public void addPropertyChangeListener(PropertyChangeListener l) {}914public void removePropertyChangeListener(PropertyChangeListener l) {}915}916917// ----------918919public static interface ISet2 {920921final static String TESTCASE = "super interface - setter";922923@BeanProperty(924description = DESCRIPTION,925bound = BOUND,926expert = EXPERT,927hidden = HIDDEN,928preferred = PREFERRED,929required = REQUIRED,930visualUpdate = UPDATE,931enumerationValues = {V_NAME})932public void setX(double v);933934public void addPropertyChangeListener(PropertyChangeListener l);935public void removePropertyChangeListener(PropertyChangeListener l);936}937938public static class ISet2Impl implements ISet2 {939940private double x;941942@BeanProperty(943description = DESCRIPTION_2,944bound = !BOUND,945expert = !EXPERT,946hidden = !HIDDEN,947preferred = !PREFERRED,948required = !REQUIRED,949visualUpdate = !UPDATE)950@Override951public void setX(double v) { x = v; }952953@Override954public void addPropertyChangeListener(PropertyChangeListener l) {}955@Override956public void removePropertyChangeListener(PropertyChangeListener l) {}957}958959// ----------960961public static interface IGet2 {962963final static String TESTCASE = "super interface - indexed getter";964965@BeanProperty(966description = DESCRIPTION,967bound = BOUND,968expert = EXPERT,969hidden = HIDDEN,970preferred = PREFERRED,971required = REQUIRED,972visualUpdate = UPDATE,973enumerationValues = {V_NAME})974public double[] getX();975976public void addPropertyChangeListener(PropertyChangeListener l);977public void removePropertyChangeListener(PropertyChangeListener l);978}979980public static class IGet2Impl implements IGet2 {981982@BeanProperty(983description = DESCRIPTION_2,984bound = !BOUND,985expert = !EXPERT,986hidden = !HIDDEN,987preferred = !PREFERRED,988required = !REQUIRED,989visualUpdate = !UPDATE)990@Override991public double[] getX() { return new double[]{X, X}; }992993@Override994public void addPropertyChangeListener(PropertyChangeListener l) {}995@Override996public void removePropertyChangeListener(PropertyChangeListener l) {}997}998999// ----------10001001public static class ProtectedGet {10021003@BeanProperty(1004description = DESCRIPTION_2,1005bound = !BOUND,1006expert = !EXPERT,1007hidden = !HIDDEN,1008preferred = !PREFERRED,1009required = !REQUIRED,1010visualUpdate = !UPDATE)1011protected double getX() { return 0.; }1012}10131014public static class OverrideProtectedGet extends ProtectedGet {10151016final static String TESTCASE = "override protected getter";10171018@BeanProperty(1019description = DESCRIPTION,1020bound = BOUND,1021expert = EXPERT,1022hidden = HIDDEN,1023preferred = PREFERRED,1024required = REQUIRED,1025visualUpdate = UPDATE,1026enumerationValues = {V_NAME})1027@Override1028public double getX() { return X; }10291030public void addPropertyChangeListener(PropertyChangeListener l) {}1031public void removePropertyChangeListener(PropertyChangeListener l) {}1032}10331034// ----------10351036// static getter - see also JDK-81549381037public static class StaticGet {10381039@BeanProperty(1040description = DESCRIPTION_2,1041bound = !BOUND,1042expert = !EXPERT,1043hidden = !HIDDEN,1044preferred = !PREFERRED,1045required = !REQUIRED,1046visualUpdate = !UPDATE)1047public static double getProp() { return 0.; }1048}10491050public static class HideStaticGet extends StaticGet {10511052final static String TESTCASE = "hide static getter";10531054public double getX() { return X; } // add to get the "default" info1055public static double getProp() { return X; }1056}10571058// TODO: if 8154938 is considered to be a real issue,1059// create one more test case "HideStaticGet2 extends StaticGet" with an1060// annotated getter and check the correctness of the corresponding bean info10611062// ---------- checks ----------10631064private static boolean check(String what, boolean v, boolean ref) {10651066boolean ok = (v == ref);1067if (!ok) { System.out.println(1068"invalid " + what + ": " + v + ", expected: " + ref); }1069return ok;1070}10711072private static boolean checkInfo(BeanInfo i, boolean ignoreValsCheck) {10731074System.out.println("checking info...");10751076PropertyDescriptor descriptors[] = i.getPropertyDescriptors();1077int nd = descriptors.length;1078if (nd != 1) {1079System.out.println("invalid number of descriptors: " + nd);1080return false;1081}10821083PropertyDescriptor d = descriptors[0];10841085String descr = d.getShortDescription();1086boolean ok = descr.equals(DESCRIPTION);1087if (!ok) { System.out.println("invalid description: " + descr +1088", expected: " + DESCRIPTION); }10891090ok &= check("isBound", d.isBound(), BOUND);1091ok &= check("isExpert", d.isExpert(), EXPERT);1092ok &= check("isHidden", d.isHidden(), HIDDEN);1093ok &= check("isPreferred", d.isPreferred(), PREFERRED);1094ok &= check("required", (boolean) d.getValue("required"), REQUIRED);1095ok &= check("visualUpdate",1096(boolean) d.getValue("visualUpdate"), UPDATE);10971098if (ignoreValsCheck) { return ok; }10991100Object vals[] = (Object[]) d.getValue("enumerationValues");1101if (vals == null) {1102System.out.println("null enumerationValues");1103return false;1104}11051106boolean okVals = (1107(vals.length == 3) &&1108vals[0].toString().equals(V_SHORT) &&1109vals[1].toString().equals(V) &&1110vals[2].toString().equals(V_NAME));11111112if (!okVals) { System.out.println("invalid enumerationValues"); }11131114return (ok && okVals);1115}11161117private static boolean checkDefault(BeanInfo i) {11181119System.out.println("checking default info...");11201121PropertyDescriptor descriptors[] = i.getPropertyDescriptors();1122int nd = descriptors.length;1123if (nd != 1) {1124System.out.println("invalid number of descriptors: " + nd);1125return false;1126}11271128PropertyDescriptor d = descriptors[0];11291130String descr = d.getShortDescription();1131boolean ok = descr.equals("x");1132if (!ok) { System.out.println("invalid description: " + descr +1133", expected: x"); }11341135ok &= check("isBound", d.isBound(), false);1136ok &= check("isExpert", d.isExpert(), false);1137ok &= check("isHidden", d.isHidden(), false);1138ok &= check("isPreferred", d.isPreferred(), false);1139ok &= check("required", (boolean) d.getValue("required"), false);1140ok &= check("visualUpdate",1141(boolean) d.getValue("visualUpdate"), false);11421143Object vals[] = (Object[]) d.getValue("enumerationValues");1144if (vals != null && vals.length > 0) {1145System.out.println("non-empty enumerationValues");1146ok = false;1147}11481149return ok;1150}11511152// do not check enumerationValues for these classes1153private static boolean ignoreVals(Class<?> c) {1154return (1155c.equals(BoolGetIs.class) ||1156c.equals(BoolIsGet.class) ||1157c.equals(AnnotatedIs.class) ||1158c.equals(OverrideAnnotatedIs2.class) ||1159c.equals(AnnotatedIs2Ext.class) ||1160c.equals(OverrideAbstractIs.class) ||1161c.equals(OverrideAbstractIs2.class) ||1162c.equals(AbstractIsExt.class) ||1163c.equals(OverrideAbstractIs.class) ||1164c.equals(IIsImpl.class) ||1165c.equals(IIsImpl2.class) ||1166c.equals(IIsImpl3.class)1167);1168}11691170// default property descriptor data are expected for these classes1171private static boolean isDefault(Class<?> c) {1172return (1173c.equals(OverrideAnnotatedGet.class) ||1174c.equals(OverrideAnnotatedIs.class ) ||1175c.equals(OverrideAnnotatedSet.class) ||1176c.equals(OverrideAbstractGet.class) ||1177c.equals(OverrideAbstractIs.class) ||1178c.equals(OverrideAbstractSet.class) ||1179c.equals(IGetImpl.class) ||1180c.equals(IIsImpl.class) ||1181c.equals(ISetImpl.class) ||1182c.equals(BaseGet.class) ||1183c.equals(BaseSet.class) ||1184c.equals(HideStaticGet.class)1185);1186}118711881189// ---------- run test ----------11901191public static void main(String[] args) throws Exception {11921193Class<?>1194ic1 = ISet2Impl.class.getInterfaces()[0],1195ic2 = IGet2Impl.class.getInterfaces()[0];11961197Class<?> cases[] = {11981199OverloadGet.class,1200OverloadGet.class.getSuperclass(),1201OverloadSet.class,1202OverloadSet.class.getSuperclass(),1203OverloadIGet.class,1204OverloadISet.class,12051206// TODO: uncomment/update after 8132565 fix1207//BoolGetIs.class,1208//BoolIsGet.class,1209//OverrideAnnotatedGet.class,1210//OverrideAnnotatedIs.class,1211//OverrideAnnotatedSet.class,1212//OverrideAnnotatedGet2.class,1213//AnnotatedGet2Ext.class,1214//OverrideAnnotatedIs2.class1215//AnnotatedIs2Ext.class,1216//OverrideAnnotatedSet2.class,1217//AnnotatedSet2Ext.class,12181219OverrideAnnotatedGet.class.getSuperclass(),1220OverrideAnnotatedIs.class.getSuperclass(),1221OverrideAnnotatedSet.class.getSuperclass(),12221223// TODO: uncomment/update after 8132565 fix1224//OverrideAbstractGet.class,1225//OverrideAbstractGet2.class,1226//AbstractGetExt.class,1227//OverrideAbstractIs.class,1228//OverrideAbstractIs2.class,1229//AbstractIsExt.class1230//OverrideAbstractSet.class,1231//OverrideAbstractSet2.class,1232//AbstractSetExt.class,12331234AbstractGet2Ext.class.getSuperclass(),1235IGetImpl.class,1236IGetImpl2.class,1237IGetImpl3.class,1238IIsImpl.class,1239IIsImpl2.class,1240IIsImpl3.class,1241ISetImpl.class,1242ISetImpl2.class,1243ISetImpl3.class,1244ic1,1245// ic2, // TODO: uncomment/update after 8155013 fix1246OverrideProtectedGet.class,1247HideStaticGet.class1248};12491250boolean passed = true;12511252for (Class<?> c: cases) {12531254java.lang.reflect.Field f = c.getDeclaredField("TESTCASE");1255f.setAccessible(true);1256String descr = f.get(c).toString();12571258System.out.println("\n" + c.getSimpleName() + " (" + descr + "):");1259BeanInfo i;1260try {1261i = Introspector.getBeanInfo(c,1262(c.equals(ic1) || c.equals(ic2)) ? null : Object.class);1263}1264catch (IntrospectionException e) { throw new RuntimeException(e); }12651266boolean ok;12671268if (isDefault(c)) {1269ok = checkDefault(i);1270} else {1271ok = checkInfo(i, ignoreVals(c));1272}1273System.out.println(ok ? "OK" : "NOK");1274passed = passed && ok;1275}12761277if (!passed) { throw new RuntimeException("test failed"); }1278System.out.println("\ntest passed");1279}1280}128112821283