juneau-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jamesbog...@apache.org
Subject [juneau] branch master updated: Remove deprecated code.
Date Tue, 13 Oct 2020 16:42:44 GMT
This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 280b0f4  Remove deprecated code.
280b0f4 is described below

commit 280b0f42524b503d7d19b7fdc1ac22e27c44de1a
Author: JamesBognar <james.bognar@salesforce.com>
AuthorDate: Tue Oct 13 12:42:39 2020 -0400

    Remove deprecated code.
---
 .../main/java/org/apache/juneau/BeanContext.java   |  32 +-
 .../src/main/java/org/apache/juneau/BeanMeta.java  |  49 +--
 .../java/org/apache/juneau/BeanPropertyMeta.java   |  36 +--
 .../apache/juneau/annotation/BeanConstructor.java  | 109 -------
 .../org/apache/juneau/annotation/BeanProperty.java | 338 ---------------------
 5 files changed, 12 insertions(+), 552 deletions(-)

diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index 49ad117..d1a9488 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -2991,7 +2991,6 @@ public class BeanContext extends Context implements MetaProvider {
 	 * Used for determining the class type on a method or field where a {@code @Beanp} annotation
may be present.
 	 *
 	 * @param <T> The class type we're wrapping.
-	 * @param px The property annotation on the type if there is one.
 	 * @param p The property annotation on the type if there is one.
 	 * @param t The type.
 	 * @param typeVarImpls
@@ -3000,38 +2999,9 @@ public class BeanContext extends Context implements MetaProvider {
 	 * 	Can be <jk>null</jk> if the information is not known.
 	 * @return The new {@code ClassMeta} object wrapped around the {@code Type} object.
 	 */
-	@SuppressWarnings("deprecation")
-	protected final <T> ClassMeta<T> resolveClassMeta(BeanProperty px, Beanp p,
Type t, Map<Class<?>,Class<?>[]> typeVarImpls) {
+	protected final <T> ClassMeta<T> resolveClassMeta(Beanp p, Type t, Map<Class<?>,Class<?>[]>
typeVarImpls) {
 		ClassMeta<T> cm = resolveClassMeta(t, typeVarImpls);
 		ClassMeta<T> cm2 = cm;
-		if (px != null) {
-
-			if (px.type() != Object.class)
-				cm2 = resolveClassMeta(px.type(), typeVarImpls);
-
-			if (cm2.isMap()) {
-				Class<?>[] pParams = (px.params().length == 0 ? new Class[]{Object.class, Object.class}
: px.params());
-				if (pParams.length != 2)
-					throw new BasicRuntimeException("Invalid number of parameters specified for Map (must
be 2): {0}", pParams.length);
-				ClassMeta<?> keyType = resolveType(pParams[0], cm2.getKeyType(), cm.getKeyType());
-				ClassMeta<?> valueType = resolveType(pParams[1], cm2.getValueType(), cm.getValueType());
-				if (keyType.isObject() && valueType.isObject())
-					return cm2;
-				return new ClassMeta<>(cm2, keyType, valueType, null);
-			}
-
-			if (cm2.isCollection() || cm2.isOptional()) {
-				Class<?>[] pParams = (px.params().length == 0 ? new Class[]{Object.class} : px.params());
-				if (pParams.length != 1)
-					throw new BasicRuntimeException("Invalid number of parameters specified for "+(cm2.isCollection()
? "Collection" : cm2.isOptional() ? "Optional" : "Array")+" (must be 1): {0}", pParams.length);
-				ClassMeta<?> elementType = resolveType(pParams[0], cm2.getElementType(), cm.getElementType());
-				if (elementType.isObject())
-					return cm2;
-				return new ClassMeta<>(cm2, null, null, elementType);
-			}
-
-			return cm2;
-		}
 
 		if (p != null) {
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index 350978c..2e4d9a1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -164,7 +164,6 @@ public class BeanMeta<T> {
 			this.pNames = pNames;
 		}
 
-		@SuppressWarnings("deprecation")
 		String init(BeanMeta<T> beanMeta) {
 			Class<?> c = classMeta.getInnerClass();
 			ClassInfo ci = classMeta.getInfo();
@@ -226,25 +225,6 @@ public class BeanMeta<T> {
 
 				// Look for @Beanc constructor on public constructors.
 				for (ConstructorInfo x : ci.getPublicConstructors()) {
-					if (x.hasAnnotation(BeanConstructor.class)) {
-						if (constructor != null)
-							throw new BeanRuntimeException(c, "Multiple instances of '@BeanConstructor' found.");
-						constructor = x;
-						constructorArgs = split(x.getAnnotation(BeanConstructor.class).properties());
-						if (constructorArgs.length != x.getParamCount()) {
-							if (constructorArgs.length != 0)
-								throw new BeanRuntimeException(c, "Number of properties defined in '@BeanConstructor'
annotation does not match number of parameters in constructor.");
-							constructorArgs = new String[x.getParamCount()];
-							int i = 0;
-							for (ParamInfo pi : x.getParams()) {
-								String pn = pi.getName();
-								if (pn == null)
-									throw new BeanRuntimeException(c, "Could not find name for parameter #{0} of constructor
''{1}''", i, x.getFullName());
-								constructorArgs[i++] = pn;
-							}
-						}
-						constructor.setAccessible();
-					}
 					if (ctx.hasAnnotation(Beanc.class, x)) {
 						if (constructor != null)
 							throw new BeanRuntimeException(c, "Multiple instances of '@Beanc' found.");
@@ -386,10 +366,7 @@ public class BeanMeta<T> {
 							// Two getters.  Pick the best.
 							if (bpm.getter != null) {
 
-								if (m.getAnnotation(BeanProperty.class) == null && bpm.getter.getAnnotation(BeanProperty.class)
!= null)
-									m = bpm.getter;  // @BeanProperty annotated method takes precedence.
-
-								else if (! ctx.hasAnnotation(Beanp.class, m) && ctx.hasAnnotation(Beanp.class,
bpm.getter))
+								if (! ctx.hasAnnotation(Beanp.class, m) && ctx.hasAnnotation(Beanp.class,
bpm.getter))
 									m = bpm.getter;  // @Beanp annotated method takes precedence.
 
 								else if (m.getName().startsWith("is") && bpm.getter.getName().startsWith("get"))
@@ -565,11 +542,9 @@ public class BeanMeta<T> {
 		 * Returns null if the field isn't a valid property.
 		 */
 		private String findPropertyName(Field f) {
-			@SuppressWarnings("deprecation")
-			BeanProperty px = f.getAnnotation(BeanProperty.class);
 			List<Beanp> lp = ctx.getAnnotations(Beanp.class, f);
 			List<Name> ln = ctx.getAnnotations(Name.class, f);
-			String name = bpName(px, lp, ln);
+			String name = bpName(lp, ln);
 			if (isNotEmpty(name))
 				return name;
 			return propertyNamer.getPropertyName(f.getName());
@@ -703,11 +678,9 @@ public class BeanMeta<T> {
 				if (t != null && t.value())
 					continue;
 
-				@SuppressWarnings("deprecation")
-				BeanProperty px = m.getLastAnnotation(BeanProperty.class);
 				List<Beanp> lp = ctx.getAnnotations(Beanp.class, m);
 				List<Name> ln = ctx.getAnnotations(Name.class, m);
-				if (! (m.isVisible(v) || px != null || lp.size() > 0 || ln.size() > 0))
+				if (! (m.isVisible(v) || lp.size() > 0 || ln.size() > 0))
 					continue;
 
 				String n = m.getSimpleName();
@@ -715,7 +688,7 @@ public class BeanMeta<T> {
 				List<ClassInfo> pt = m.getParamTypes();
 				ClassInfo rt = m.getReturnType();
 				MethodType methodType = UNKNOWN;
-				String bpName = bpName(px, lp, ln);
+				String bpName = bpName(lp, ln);
 
 				if (pt.size() == 0) {
 					if ("*".equals(bpName)) {
@@ -807,11 +780,9 @@ public class BeanMeta<T> {
 				if (ctx.hasAnnotation(BeanIgnore.class, f))
 					continue;
 
-				@SuppressWarnings("deprecation")
-				BeanProperty px = f.getAnnotation(BeanProperty.class);
 				List<Beanp> lp = ctx.getAnnotations(Beanp.class, f);
 
-				if (! (v.isVisible(f.inner()) || px != null || lp.size() > 0))
+				if (! (v.isVisible(f.inner()) || lp.size() > 0))
 					continue;
 
 				l.add(f.inner());
@@ -1006,9 +977,8 @@ public class BeanMeta<T> {
 		return beanFilter == null ? value : beanFilter.writeProperty(bean, name, value);
 	}
 
-	@SuppressWarnings("deprecation")
-	static final String bpName(BeanProperty px, List<Beanp> p, List<Name> n) {
-		if (px == null && p.isEmpty() && n.isEmpty())
+	static final String bpName(List<Beanp> p, List<Name> n) {
+		if (p.isEmpty() && n.isEmpty())
 			return null;
 		if (! n.isEmpty())
 			return last(n).value();
@@ -1023,11 +993,6 @@ public class BeanMeta<T> {
 		if (name != null)
 			return name;
 
-		if (px != null) {
-			if (! px.name().isEmpty())
-				return px.name();
-			return px.value();
-		}
 		return null;
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 8c9dea1..338d3ac 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -161,7 +161,6 @@ public final class BeanPropertyMeta {
 			return this;
 		}
 
-		@SuppressWarnings("deprecation")
 		boolean validate(BeanContext bc, BeanRegistry parentBeanRegistry, Map<Class<?>,Class<?>[]>
typeVarImpls, Set<String> bpro, Set<String> bpwo) throws Exception {
 
 			AList<Class<?>> bdClasses = AList.of();
@@ -176,19 +175,13 @@ public final class BeanPropertyMeta {
 			canWrite |= (field != null || setter != null);
 
 			if (innerField != null) {
-				BeanProperty px = innerField.getAnnotation(BeanProperty.class);
 				List<Beanp> lp = bc.getAnnotations(Beanp.class, innerField);
-				if (field != null || px != null || lp.size() > 0) {
+				if (field != null || lp.size() > 0) {
 					// Only use field type if it's a bean property or has @Beanp annotation.
 					// Otherwise, we want to infer the type from the getter or setter.
-					rawTypeMeta = bc.resolveClassMeta(px, last(lp), innerField.getGenericType(), typeVarImpls);
+					rawTypeMeta = bc.resolveClassMeta(last(lp), innerField.getGenericType(), typeVarImpls);
 					isUri |= (rawTypeMeta.isUri());
 				}
-				if (px != null) {
-					if (! px.properties().isEmpty())
-						properties = split(px.properties());
-					bdClasses.a(px.beanDictionary());
-				}
 				for (Beanp p : lp) {
 					if (! p.properties().isEmpty())
 						properties = split(p.properties());
@@ -204,16 +197,10 @@ public final class BeanPropertyMeta {
 			}
 
 			if (getter != null) {
-				BeanProperty px = MethodInfo.of(getter).getLastAnnotation(BeanProperty.class);
 				List<Beanp> lp = bc.getAnnotations(Beanp.class, getter);
 				if (rawTypeMeta == null)
-					rawTypeMeta = bc.resolveClassMeta(px, last(lp), getter.getGenericReturnType(), typeVarImpls);
+					rawTypeMeta = bc.resolveClassMeta(last(lp), getter.getGenericReturnType(), typeVarImpls);
 				isUri |= (rawTypeMeta.isUri() || bc.hasAnnotation(org.apache.juneau.annotation.URI.class,
getter));
-				if (px != null) {
-					if (properties != null && ! px.properties().isEmpty())
-						properties = split(px.properties());
-					bdClasses.a(px.beanDictionary());
-				}
 				for (Beanp p : lp) {
 					if (properties != null && ! p.properties().isEmpty())
 						properties = split(p.properties());
@@ -228,18 +215,10 @@ public final class BeanPropertyMeta {
 			}
 
 			if (setter != null) {
-				BeanProperty px = MethodInfo.of(setter).getLastAnnotation(BeanProperty.class);
 				List<Beanp> lp = bc.getAnnotations(Beanp.class, setter);
 				if (rawTypeMeta == null)
-					rawTypeMeta = bc.resolveClassMeta(px, last(lp), setter.getGenericParameterTypes()[0],
typeVarImpls);
+					rawTypeMeta = bc.resolveClassMeta(last(lp), setter.getGenericParameterTypes()[0], typeVarImpls);
 				isUri |= (rawTypeMeta.isUri() || bc.hasAnnotation(org.apache.juneau.annotation.URI.class,
setter));
-				if (px != null) {
-					if (swap == null)
-						swap = getPropertyPojoSwap(px);
-					if (properties != null && ! px.properties().isEmpty())
-						properties = split(px.properties());
-					bdClasses.a(px.beanDictionary());
-				}
 				for (Beanp p : lp) {
 					if (swap == null)
 						swap = getPropertyPojoSwap(p);
@@ -332,13 +311,6 @@ public final class BeanPropertyMeta {
 			return new BeanPropertyMeta(this);
 		}
 
-		@SuppressWarnings("deprecation")
-		private PojoSwap getPropertyPojoSwap(BeanProperty p) throws Exception {
-			if (! p.format().isEmpty())
-				return castOrCreate(PojoSwap.class, StringFormatSwap.class, false, p.format());
-			return null;
-		}
-
 		private PojoSwap getPropertyPojoSwap(Beanp p) throws Exception {
 			if (! p.format().isEmpty())
 				return castOrCreate(PojoSwap.class, StringFormatSwap.class, false, p.format());
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConstructor.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConstructor.java
deleted file mode 100644
index 85c5269..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanConstructor.java
+++ /dev/null
@@ -1,109 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.
 The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file
except in compliance            *
-// * with the License.  You may obtain a copy of the License at                         
                                    *
-// *                                                                                    
                                    *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                        
                                    *
-// *                                                                                    
                                    *
-// * Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the        *
-// * specific language governing permissions and limitations under the License.         
                                    *
-// ***************************************************************************************************************************
-package org.apache.juneau.annotation;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-import java.lang.annotation.*;
-
-import org.apache.juneau.*;
-
-/**
- * Maps constructor arguments to property names on beans with read-only properties.
- *
- * <p>
- * This annotation can be used in the case of beans with properties whose values can only
be set by passing them in
- * through a constructor on the class.
- * <br>Since method parameter names are lost during compilation, this annotation essentially
redefines them so that they
- * are available at runtime.
- *
- * <p>
- * This annotation can only be applied to constructors and can only be applied to one constructor
per class.
- *
- * <p>
- * When present, bean instantiation is delayed until the call to {@link BeanMap#getBean()}.
- * Until then, bean property values are stored in a local cache until <c>getBean()</c>
is called.
- * Because of this additional caching step, parsing into read-only beans tends to be slower
and use more memory than
- * parsing into beans with writable properties.
- *
- * <p>
- * Attempting to call {@link BeanMap#put(String,Object)} on a read-only property after calling
{@link BeanMap#getBean()}
- * will result in a {@link BeanRuntimeException} being thrown.
- * Multiple calls to {@link BeanMap#getBean()} will return the same bean instance.
- *
- * <ul class='seealso'>
- * 	<li class='link'>{@doc BeancAnnotation}
- * </ul>
- *
- * <div class='warn'>
- * 	<b>Deprecated</b> - {@link Beanc}.
- * </div>
- */
-@Documented
-@Target(CONSTRUCTOR)
-@Retention(RUNTIME)
-@Inherited
-@Deprecated
-public @interface BeanConstructor {
-
-	/**
-	 * The names of the properties of the constructor arguments.
-	 * <p>
-	 *	The {@link org.apache.juneau.annotation.BeanConstructor @BeanConstructor} annotation
is used to
-	 *	map constructor arguments to property names on bean with read-only properties.
-	 * 	<br>Since method parameter names are lost during compilation, this annotation
essentially redefines
-	 *	them so that they are available at runtime.
-	 *	</p>
-	 * 	<p>
-	 *	The definition of a read-only bean is a bean with properties with only getters, like
shown below:
-	 *	</p>
-	 *	<p class='bpcode w800'>
-	 *		<jc>// Our read-only bean.</jc>
-	 *		<jk>public class</jk> Person {
-	 *			<jk>private final</jk> String <jf>name</jf>;
-	 *			<jk>private final int</jk> <jf>age</jf>;
-	 *
-	 *			<ja>@BeanConstructor</ja>(properties=<js>"name,age"</js>)
-	 *			<jk>public</jk> Person(String name, <jk>int</jk> age) {
-	 *				<jk>this</jk>.<jf>name</jf> = name;
-	 *				<jk>this</jk>.<jf>age</jf> = age;
-	 *			}
-	 *
-	 *			<jc>// Read only properties.</jc>
-	 *			<jc>// Getters, but no setters.</jc>
-	 *
-	 *			<jk>public</jk> String getName() {
-	 *				<jk>return</jk> <jf>name</jf>;
-	 *			}
-	 *
-	 *			<jk>public int</jk> getAge() {
-	 *				<jk>return</jk> <jf>age</jf>;
-	 *			}
-	 *		}
-	 *	</p>
-	 *	<p class='bpcode w800'>
-	 *		<jc>// Parsing into a read-only bean.</jc>
-	 *		String json = <js>"{name:'John Smith',age:45}"</js>;
-	 *		Person p = JsonParser.<jsf>DEFAULT</jsf>.parse(json);
-	 *		String name = p.getName();  <jc>// "John Smith"</jc>
-	 *		<jk>int</jk> age = p.getAge();   <jc>// 45</jc>
-	 *	</p>
-	 * <p>
-	 * 	Note that the {@link Name @Name} annotation can also be used to identify bean property
names on constructor
-	 * 	arguments.  If neither this annotation or {@link Name @Name} is used, then we try to
get the property names
-	 * 	from the parameter names if they are available in the bytecode.
-	 * </p>
-	 */
-	String properties() default "";
-}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanProperty.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanProperty.java
deleted file mode 100644
index e29de36..0000000
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/annotation/BeanProperty.java
+++ /dev/null
@@ -1,338 +0,0 @@
-// ***************************************************************************************************************************
-// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
agreements.  See the NOTICE file *
-// * distributed with this work for additional information regarding copyright ownership.
 The ASF licenses this file        *
-// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file
except in compliance            *
-// * with the License.  You may obtain a copy of the License at                         
                                    *
-// *                                                                                    
                                    *
-// *  http://www.apache.org/licenses/LICENSE-2.0                                        
                                    *
-// *                                                                                    
                                    *
-// * Unless required by applicable law or agreed to in writing, software distributed under
the License is distributed on an  *
-// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the        *
-// * specific language governing permissions and limitations under the License.         
                                    *
-// ***************************************************************************************************************************
-package org.apache.juneau.annotation;
-
-import static java.lang.annotation.ElementType.*;
-import static java.lang.annotation.RetentionPolicy.*;
-
-import java.lang.annotation.*;
-
-import org.apache.juneau.*;
-
-/**
- * Used tailor how bean properties get interpreted by the framework.
- *
- * <p>
- * This annotation is applied to public fields and public getter/setter methods of beans.
- *
- * <ul class='seealso'>
- * 	<li class='link'>{@doc BeanpAnnotation}
- * </ul>
- *
- * <div class='warn'>
- * 	<b>Deprecated</b> - {@link Beanp}.
- * </div>
- */
-@Documented
-@Target({FIELD,METHOD,PARAMETER})
-@Retention(RUNTIME)
-@Inherited
-@Deprecated
-public @interface BeanProperty {
-
-	/**
-	 * Identifies the name of the property.
-	 *
-	 * <p>
-	 * Normally, this is automatically inferred from the field name or getter method name of
the property.
-	 * However, this property can be used to assign a different property name from the automatically
inferred value.
-	 *
-	 * <p>
-	 * If the {@link BeanContext#BEAN_beanFieldVisibility} setting on the bean context excludes
this field (e.g. the
-	 * visibility is set to PUBLIC, but the field is PROTECTED), this annotation can be used
to force the field to be
-	 * identified as a property.
-	 *
-	 * <h5 class='topic'>Dynamic beans</h5>
-	 * <p>
-	 * The bean property named <js>"*"</js> is the designated "dynamic property"
which allows for "extra" bean
-	 * properties not otherwise defined.
-	 * This is similar in concept to the Jackson <ja>@JsonGetterAll</ja> and <ja>@JsonSetterAll</ja>
annotations.
-	 * The primary purpose is for backwards compatibility in parsing newer streams with addition
information into older
-	 * beans.
-	 *
-	 * <p>
-	 * The following examples show how to define dynamic bean properties.
-	 * <p class='bcode w800'>
-	 * 	<jc>// Option #1 - A simple public Map field.
-	 * 	// The field name can be anything.</jc>
-	 * 	<jk>public class</jk> BeanWithDynaField {
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public</jk> Map&lt;String,Object&gt; extraStuff = <jk>new</jk>
LinkedHashMap&lt;String,Object&gt;();
-	 * 	}
-	 *
-	 * 	<jc>// Option #2 - Getters and setters.
-	 * 	// Method names can be anything.
-	 * 	// Getter must return a Map with String keys.
-	 * 	// Setter must take in two arguments.</jc>
-	 * 	<jk>public class</jk> BeanWithDynaMethods {
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public</jk> Map&lt;String,Object&gt; getMyExtraStuff() {
-	 * 			...
-	 * 		}
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public void</jk> setAnExtraField(String name, Object value) {
-	 * 			...
-	 * 		}
-	 * 	}
-	 *
-	 * 	<jc>// Option #3 - Getter only.
-	 * 	// Properties will be added through the getter.</jc>
-	 * 	<jk>public class</jk> BeanWithDynaGetterOnly {
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public</jk> Map&lt;String,Object&gt; getMyExtraStuff() {
-	 * 			...
-	 * 		}
-	 * 	}
-	 *
-	 * 	<jc>// Option #4 - Getter, setter, and extra-keys method .
-	 * 	// Define a method that returns a Collection&lt;String&gt; with currently-set
property names.</jc>
-	 * 	<jk>public class</jk> BeanWithDynaExtraKeys {
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public</jk> Object get(String name) {
-	 * 			...
-	 * 		}
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public void</jk> set(String name, Object value) {
-	 * 			...
-	 * 		}
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public</jk> Collection&lt;String&gt; extraKeys() {
-	 * 			...
-	 * 		}
-	 * 	}
-	 * </p>
-	 *
-	 *<p>
-	 * Similar rules apply for value types and swaps.
-	 * The property values optionally can be any serializable type or use swaps.
-	 * <p class='bcode w800'>
-	 * 	<jc>// A serializable type other than Object.</jc>
-	 * 	<jk>public class</jk> BeanWithDynaFieldWithListValues {
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>)
-	 * 		<jk>public</jk> Map&lt;String,List&lt;String&gt;&gt; getMyExtraStuff()
{
-	 * 			...
-	 * 		}
-	 * 	}
-	 *
-	 * 	<jc>// A swapped value.</jc>
-	 * 	<jk>public class</jk> BeanWithDynaFieldWithSwappedValues {
-	 *
-	 * 		<ja>@BeanProperty</ja>(name=<js>"*"</js>, swap=TemporalCalendarSwap.IsoLocalDateTime.<jk>class</jk>)
-	 * 		<jk>public</jk> Map&lt;String,Calendar&gt; getMyExtraStuff() {
-	 * 			...
-	 * 		}
-	 * 	}
-	 * </p>
-	 *
-	 * <div class='info'>
-	 * 	Note that if you're not interested in these additional properties, you can also use
the
-	 * 	{@link BeanContext#BEAN_ignoreUnknownBeanProperties} setting to ignore values that don't
fit into existing
-	 * 	properties.
-	 * </div>
-	 * <div class='info'>
-	 * 		Note that the {@link Name @Name} annotation can also be used for identifying a property
name.
-	 * </div>
-	 */
-	String name() default "";
-
-	/**
-	 * A synonym for {@link #name()}.
-	 *
-	 * <p>
-	 * The following annotations are equivalent:
-	 *
-	 * <p class='bcode w800'>
-	 * 	<ja>@BeanProperty</ja>(name=<js>"foo"</js>)
-	 *
-	 * 	<ja>@BeanProperty</ja>(<js>"foo"</js>)
-	 * </p>
-	 */
-	String value() default "";
-
-	/**
-	 * Identifies a specialized class type for the property.
-	 *
-	 * <p>
-	 * Normally this can be inferred through reflection of the field type or getter return type.
-	 * However, you'll want to specify this value if you're parsing beans where the bean property
class is an interface
-	 * or abstract class to identify the bean type to instantiate.
-	 * Otherwise, you may cause an {@link InstantiationException} when trying to set these fields.
-	 *
-	 * <p>
-	 * This property must denote a concrete bean class with a no-arg constructor.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyBean {
-	 *
-	 * 		<jc>// Identify concrete map type.</jc>
-	 * 		<ja>@BeanProperty</ja>(type=HashMap.<jk>class</jk>)
-	 * 		<jk>public</jk> Map <jf>p1</jf>;
-	 * 	}
-	 * </p>
-	 *
-	 * <p>
-	 * This annotation can also be used on private fields of a property like so:
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyBean {
-	 *
-	 * 		<ja>@BeanProperty</ja>(type=HashMap.<jk>class</jk>)
-	 * 		<jk>private</jk> Map <jf>p1</jf>;
-	 *
-	 * 		<jk>public</jk> Map getP1() {
-	 * 			<jk>return</jk> <jf>p1</jf>;
-	 * 		}
-	 * 	}
-	 * </p>
-	 */
-	Class<?> type() default Object.class;
-
-	/**
-	 * For bean properties of maps and collections, this annotation can be used to identify
the class types of the
-	 * contents of the bean property object when the generic parameter types are interfaces
or abstract classes.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyBean {
-	 *
-	 * 		<jc>// Identify concrete map type with String keys and Integer values.</jc>
-	 * 		<ja>@BeanProperty</ja>(type=HashMap.<jk>class</jk>, params={String.<jk>class</jk>,Integer.<jk>class</jk>})
-	 * 		<jk>public</jk> Map <jf>p1</jf>;
-	 * 	}
-	 * </p>
-	 *
-	 * <p>
-	 * This annotation can also be used on private fields of a property like so:
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyBean {
-	 *
-	 * 		<ja>@BeanProperty</ja>(type=HashMap.<jk>class</jk>, params={String.<jk>class</jk>,Integer.<jk>class</jk>})
-	 * 		<jk>private</jk> Map <jf>p1</jf>;
-	 *
-	 * 		<jk>public</jk> Map getP1() {
-	 * 			<jk>return</jk> <jf>p1</jf>;
-	 * 		}
-	 * 	}
-	 * </p>
-	 */
-	Class<?>[] params() default {};
-
-	/**
-	 * Used to limit which child properties are rendered by the serializers.
-	 *
-	 * <p>
-	 * Can be used on any of the following bean property types:
-	 * <ul class='spaced-list'>
-	 * 	<li>Beans - Only render the specified properties of the bean.
-	 * 	<li>Maps - Only render the specified entries in the map.
-	 * 	<li>Bean/Map arrays - Same, but applied to each element in the array.
-	 * 	<li>Bean/Map collections - Same, but applied to each element in the collection.
-	 * </ul>
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyClass {
-	 *
-	 * 		<jc>// Only render 'f1' when serializing this bean property.</jc>
-	 * 		<ja>@BeanProperty</ja>(bpi=<js>"f1"</js>)
-	 * 		<jk>public</jk> MyChildClass x1 = <jk>new</jk> MyChildClass();
-	 * 	}
-	 *
-	 * 	<jk>public class</jk> MyChildClass {
-	 * 		<jk>public int</jk> f1 = 1;
-	 * 		<jk>public int</jk> f2 = 2;
-	 * 	}
-	 *
-	 * 	<jc>// Renders "{x1:{f1:1}}"</jc>
-	 * 	String json = JsonSerializer.<jsf>DEFAULT</jsf>.serialize(<jk>new</jk>
MyClass());
-	 * </p>
-	 *
-	 * <p>
-	 * This annotation can also be used on private fields of a property like so:
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyBean {
-	 *
-	 * 		<ja>@BeanProperty</ja>(properties=<js>"f1"</js>)
-	 * 		<jk>private</jk> MyChildClass <jf>x1</jf>;
-	 *
-	 * 		<jk>public</jk> MyChildClass getX1() {
-	 * 			<jk>return</jk> <jf>x1</jf>;
-	 * 		}
-	 * 	}
-	 * </p>
-	 */
-	String properties() default "";
-
-	/**
-	 * Bean dictionary.
-	 *
-	 * <p>
-	 * The list of classes that make up the bean dictionary this bean property.
-	 *
-	 * <ul class='seealso'>
-	 * 	<li class='jf'>{@link BeanContext#BEAN_beanDictionary}
-	 * </ul>
-	 *
-	 * <p>
-	 * This annotation can also be used on private fields of a property.
-	 */
-	Class<?>[] beanDictionary() default {};
-
-	/**
-	 * Specifies a String format for converting the bean property value to a formatted string.
-	 *
-	 * <p>
-	 * Note that this is usually a one-way conversion during serialization.
-	 *
-	 * <p>
-	 * During parsing, we will attempt to convert the value to the original form by using the
-	 * {@link BeanSession#convertToType(Object, Class)} but there is no guarantee that this
will succeed.
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<ja>@BeanProperty</ja>(format=<js>"$%.2f"</js>)
-	 * 	<jk>public float</jk> <jf>price</jf>;
-	 * </p>
-	 *
-	 * <p>
-	 * This annotation can also be used on private fields of a property like so:
-	 *
-	 * <h5 class='section'>Example:</h5>
-	 * <p class='bcode w800'>
-	 * 	<jk>public class</jk> MyBean {
-	 *
-	 * 		<ja>@BeanProperty</ja>(format=<js>"$%.2f"</js>)
-	 * 		<jk>private float</jk> <jf>price</jf>;
-	 *
-	 * 		<jk>public float</jk> gePrice() {
-	 * 			<jk>return</jk> <jf>price</jf>;
-	 * 		}
-	 * 	}
-	 * </p>
-	 */
-	String format() default "";
-}


Mime
View raw message