bval-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Matt Benson <gudnabr...@gmail.com>
Subject Re: svn commit: r992148 - in /incubator/bval/sandbox/lang3-work: ./ bval-core/ bval-core/src/main/java/org/apache/bval/ bval-core/src/main/java/org/apache/bval/model/ bval-json/src/main/resources/org/apache/bval/json/ bval-jsr303/ bval-jsr303/src/main/java...
Date Thu, 02 Sep 2010 23:13:52 GMT
Guys,
  I wanted to draw everyone's attention to this change:  A MetaBean only knows its raw type,
but I can't see any reason a MetaProperty shouldn't know its generic type, and the class is
defined such that it has a Type, rather than just a Class.  All things considered, I think
this change is fine:  The json freemarker template was the only thing that broke as a result
of this.  Since I'm the new guy to the project, I wanted to make sure there is every opportunity
to do the R part of CTR.  My next change, which includes a bugfix, depends on this one.

Thanks,
Matt

On Sep 2, 2010, at 6:03 PM, mbenson@apache.org wrote:

> Author: mbenson
> Date: Thu Sep  2 23:03:55 2010
> New Revision: 992148
> 
> URL: http://svn.apache.org/viewvc?rev=992148&view=rev
> Log:
> MetaProperty.type is a type; typeClass still returns a class
> 
> Modified:
>    incubator/bval/sandbox/lang3-work/   (props changed)
>    incubator/bval/sandbox/lang3-work/bval-core/pom.xml
>    incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
>    incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
>    incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
>    incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml
>    incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
>    incubator/bval/sandbox/lang3-work/pom.xml
> 
> Propchange: incubator/bval/sandbox/lang3-work/
> ------------------------------------------------------------------------------
>    svn:mergeinfo = /incubator/bval/trunk:992143
> 
> Modified: incubator/bval/sandbox/lang3-work/bval-core/pom.xml
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-core/pom.xml?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/bval-core/pom.xml (original)
> +++ incubator/bval/sandbox/lang3-work/bval-core/pom.xml Thu Sep  2 23:03:55 2010
> @@ -42,6 +42,10 @@
>             <artifactId>commons-lang</artifactId>
>         </dependency>
>         <dependency>
> +            <groupId>org.apache.commons</groupId>
> +            <artifactId>commons-lang3</artifactId>
> +        </dependency>
> +        <dependency>
>             <groupId>commons-logging</groupId>
>             <artifactId>commons-logging</artifactId>
>         </dependency>
> 
> Modified: incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
(original)
> +++ incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/IntrospectorMetaBeanFactory.java
Thu Sep  2 23:03:55 2010
> @@ -22,6 +22,8 @@ import org.apache.bval.model.MetaPropert
> import java.beans.BeanInfo;
> import java.beans.Introspector;
> import java.beans.PropertyDescriptor;
> +import java.lang.reflect.Method;
> +import java.lang.reflect.Type;
> import java.util.Enumeration;
> 
> import static org.apache.bval.model.Features.Property.*;
> @@ -61,7 +63,7 @@ public final class IntrospectorMetaBeanF
>     protected MetaProperty buildMetaProperty(PropertyDescriptor pd) {
>         MetaProperty meta = new MetaProperty();
>         meta.setName(pd.getName());
> -        meta.setType(pd.getPropertyType());
> +        meta.setType(determineGenericPropertyType(pd));
>         if (pd.isHidden()) meta.putFeature(HIDDEN, Boolean.TRUE);
>         if (pd.isPreferred()) meta.putFeature(PREFERRED, Boolean.TRUE);
>         if (pd.isConstrained()) meta.putFeature(READONLY, Boolean.TRUE);
> @@ -74,4 +76,16 @@ public final class IntrospectorMetaBeanF
>         }
>         return meta;
>     }
> +
> +    private Type determineGenericPropertyType(PropertyDescriptor pd) {
> +        Method m = pd.getReadMethod();
> +        if (m != null) {
> +            return m.getGenericReturnType();
> +        }
> +        m = pd.getWriteMethod();
> +        if (m != null && m.getParameterTypes().length == 1) {
> +            return m.getGenericParameterTypes()[0];
> +        }
> +        return pd.getPropertyType();
> +    }
> }
> 
> Modified: incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
(original)
> +++ incubator/bval/sandbox/lang3-work/bval-core/src/main/java/org/apache/bval/model/MetaProperty.java
Thu Sep  2 23:03:55 2010
> @@ -16,9 +16,10 @@
>  */
> package org.apache.bval.model;
> 
> -import java.lang.reflect.ParameterizedType;
> import java.lang.reflect.Type;
> 
> +import org.apache.commons.lang3.reflect.TypeUtils;
> +
> /**
>  * Description: the meta description of a property of a bean. It supports a map
>  * of features and multiple validations.<br/>
> @@ -104,20 +105,14 @@ public class MetaProperty extends Featur
>      * @return Class, <code>null</code> if cannot be determined
>      */
>     public Class<?> getTypeClass() {
> -        return getTypeClass(type);
> -    }
> -
> -    //TODO can this handle variables?  Perhaps move TypeUtils up from bval-jsr303
> -    private static Class<?> getTypeClass(Type rawType) {
> -        if (rawType instanceof Class<?>) {
> -            return (Class<?>) rawType;
> -        } else if (rawType instanceof ParameterizedType) {
> -            return getTypeClass(((ParameterizedType) rawType).getRawType()); // recursion!
> -        } else if(rawType instanceof DynaType) {
> -            return getTypeClass(((DynaType)rawType).getRawType()); // recursion
> -        } else {
> -            return null; // class cannot be determined!
> +        Type targetType = type instanceof DynaType ? ((DynaType) type)
> +                .getRawType() : type;
> +        if (targetType == null) {
> +            return null;
>         }
> +        Type assigningType = getParentMetaBean() == null ? null
> +                : getParentMetaBean().getBeanClass();
> +        return TypeUtils.getRawType(targetType, assigningType);
>     }
> 
>     /**
> @@ -177,4 +172,5 @@ public class MetaProperty extends Featur
>     public String toString() {
>         return "MetaProperty{" + "name='" + name + '\'' + ", type=" + type + '}';
>     }
> +
> }
> 
> Modified: incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
(original)
> +++ incubator/bval/sandbox/lang3-work/bval-json/src/main/resources/org/apache/bval/json/bean-infos-json.ftl
Thu Sep  2 23:03:55 2010
> @@ -48,9 +48,10 @@ var metaBean${var} = {
>    <#list metaBean.properties as property>
>      "${property.name}":{
>        "name" : "${property.name}",
> -       <#if property.type??>"type" : "${property.type.name}",</#if>
> +       <#if property.type??>"type" : "${property.type}",</#if>
> +       <#if property.typeClass??>"typeClass" : "${property.typeClass.name}",</#if>
>        "features" : {<#if property.type?? &&
> -       property.type.enum>"enum" : {<#list property.type.enumConstants as enum>"${enum.name()}":
"${enum.name()}"<#if enum_has_next>, </#if></#list>}<#if property.features?size
&gt; 0>,</#if></#if><#list
> +       property.type.enum!false>"enum" : {<#list property.type.enumConstants as
enum>"${enum.name()}": "${enum.name()}"<#if enum_has_next>, </#if></#list>}<#if
property.features?size &gt; 0>,</#if></#if><#list
>        property.features?keys as featureKey>
>        <#assign value = property.features[featureKey]>
>        "${featureKey}" : <#rt/><#if
> 
> Modified: incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml (original)
> +++ incubator/bval/sandbox/lang3-work/bval-jsr303/pom.xml Thu Sep  2 23:03:55 2010
> @@ -108,6 +108,10 @@
>             <artifactId>commons-logging</artifactId>
>         </dependency>
>         <dependency>
> +            <groupId>org.apache.commons</groupId>
> +            <artifactId>commons-lang3</artifactId>
> +        </dependency>
> +        <dependency>
>             <groupId>junit</groupId>
>             <artifactId>junit</artifactId>
>             <scope>test</scope>
> 
> Modified: incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
(original)
> +++ incubator/bval/sandbox/lang3-work/bval-jsr303/src/main/java/org/apache/bval/jsr303/Jsr303MetaBeanFactory.java
Thu Sep  2 23:03:55 2010
> @@ -129,7 +129,7 @@ public class Jsr303MetaBeanFactory imple
>             if (!factoryContext.getFactory().getAnnotationIgnores()
>                   .isIgnoreAnnotations(field)) {
>                 if (metaProperty == null) {
> -                    metaProperty = addMetaProperty(metabean, field.getName(), field.getType());
> +                    metaProperty = addMetaProperty(metabean, field.getName(), field.getGenericType());
>                     processAnnotations(metaProperty, beanClass, field,
>                           new FieldAccess(field),
>                           new AppendValidationToMeta(metaProperty));//) {
> @@ -154,7 +154,7 @@ public class Jsr303MetaBeanFactory imple
>                     // create a property for those methods for which there is not yet
a MetaProperty
>                     if (metaProperty == null) {
>                         metaProperty =
> -                              addMetaProperty(metabean, propName, method.getReturnType());
> +                              addMetaProperty(metabean, propName, method.getGenericReturnType());
>                         processAnnotations(metaProperty, beanClass, method,
>                               new MethodAccess(propName, method),
>                               new AppendValidationToMeta(metaProperty));//) {
> 
> Modified: incubator/bval/sandbox/lang3-work/pom.xml
> URL: http://svn.apache.org/viewvc/incubator/bval/sandbox/lang3-work/pom.xml?rev=992148&r1=992147&r2=992148&view=diff
> ==============================================================================
> --- incubator/bval/sandbox/lang3-work/pom.xml (original)
> +++ incubator/bval/sandbox/lang3-work/pom.xml Thu Sep  2 23:03:55 2010
> @@ -308,6 +308,11 @@
>                 <version>2.4</version>
>             </dependency>
>             <dependency>
> +                <groupId>org.apache.commons</groupId>
> +                <artifactId>commons-lang3</artifactId>
> +                <version>3.0-SNAPSHOT</version>
> +            </dependency>
> +            <dependency>
>                 <groupId>commons-logging</groupId>
>                 <artifactId>commons-logging</artifactId>
>                 <version>1.1.1</version>
> 
> 


Mime
View raw message