From: <hib...@li...> - 2006-02-28 16:44:41
|
Author: nusco Date: 2006-02-28 11:44:32 -0500 (Tue, 28 Feb 2006) New Revision: 9516 Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXMethod.java trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXProperty.java Log: removed duplication in XMembers/XFactory Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java 2006-02-28 15:34:58 UTC (rev 9515) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXFactory.java 2006-02-28 16:44:32 UTC (rev 9516) @@ -114,62 +114,17 @@ PropertyKey key = new PropertyKey( member, owner ); JavaXProperty xProperty = xProperties.get( key ); if ( ! xProperties.containsKey( key ) ) { - final TypeEnvironment context = owner.getTypeEnvironment(); - final Type propType = Util.typeOf( member, context ); - - //that's really yukky, this mechanic should be held by JavaXMamber itself - if ( JavaXProperty.isArrayType( propType ) ) { - xProperty = new JavaXProperty( - member, propType, context, this, buildArrayTypeExtractor( context, propType ) - ); - } - else if ( JavaXProperty.isCollectionType( propType ) ) { - xProperty = new JavaXProperty( - member, propType, context, JavaXFactory.this, buildCollectionTypeExtractor( context, propType ) - ); - } - else if ( JavaXProperty.isBaseType( propType ) ) { - xProperty = new JavaXProperty( - member, propType, context, this, buildSimpleTypeExtractor( context, propType ) - ); - } - else { - xProperty = null; - } - + xProperty = JavaXProperty.create( member, owner.getTypeEnvironment(), this ); xProperties.put( key, xProperty ); } return xProperty; } XMethod getXMethod(Member member, JavaXClass owner) { - //TODO code copy/pastle from getXProperty PropertyKey key = new PropertyKey( member, owner ); JavaXMethod xMethod = xMethods.get( key ); if ( ! xMethods.containsKey( key ) ) { - final TypeEnvironment context = owner.getTypeEnvironment(); - final Type propType = Util.typeOf( member, context ); - - - if ( JavaXProperty.isArrayType( propType ) ) { - xMethod = new JavaXMethod( - member, propType, context, this, buildArrayTypeExtractor( context, propType ) - ); - } - else if ( JavaXProperty.isCollectionType( propType ) ) { - xMethod = new JavaXMethod( - member, propType, context, JavaXFactory.this, buildCollectionTypeExtractor( context, propType ) - ); - } - else if ( JavaXProperty.isBaseType( propType ) ) { - xMethod = new JavaXMethod( - member, propType, context, this, buildSimpleTypeExtractor( context, propType ) - ); - } - else { - xMethod = null; - } - + xMethod = JavaXMethod.create( member, owner.getTypeEnvironment(), this ); xMethods.put( key, xMethod ); } return xMethod; @@ -228,10 +183,6 @@ private Class<? extends Object> arrayTypeOf(Class componentType) { return Array.newInstance( componentType, 0 ).getClass(); } - - private Type getJavaType() { - return context.bind( propType ); - } }; } @@ -333,6 +284,16 @@ }.doSwitch( t ); } + public PropertyTypeExtractor buildTypeExtractor(TypeEnvironment context, Type propType) { + if ( JavaXMember.isArrayType( propType ) ) + return buildArrayTypeExtractor( context, propType ); + if ( JavaXMember.isCollectionType( propType ) ) + return buildCollectionTypeExtractor( context, propType ); + if ( JavaXMember.isBaseType( propType ) ) + return buildSimpleTypeExtractor( context, propType ); + return null; + } + public boolean equals(XClass class1, Class class2) { if ( class1 == null ) { return class2 == null; Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXMethod.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXMethod.java 2006-02-28 15:34:58 UTC (rev 9515) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXMethod.java 2006-02-28 16:44:32 UTC (rev 9516) @@ -13,7 +13,15 @@ */ public class JavaXMethod extends JavaXMember implements XMethod { - protected JavaXMethod(Member member, Type type, TypeEnvironment env, JavaXFactory factory, PropertyTypeExtractor propertyTypeExtractor) { + static JavaXMethod create(Member member, TypeEnvironment context, JavaXFactory factory) { + final Type propType = Util.typeOf( member, context ); + PropertyTypeExtractor typeExtractor = factory.buildTypeExtractor( context, propType ); + if( typeExtractor == null ) + return null; + return new JavaXMethod( member, propType, context, factory, typeExtractor); + } + + private JavaXMethod(Member member, Type type, TypeEnvironment env, JavaXFactory factory, PropertyTypeExtractor propertyTypeExtractor) { super(member, type, env, factory, propertyTypeExtractor); assert member instanceof Method; } Modified: trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXProperty.java =================================================================== --- trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXProperty.java 2006-02-28 15:34:58 UTC (rev 9515) +++ trunk/HibernateExt/metadata/src/java/org/hibernate/reflection/java/JavaXProperty.java 2006-02-28 16:44:32 UTC (rev 9516) @@ -17,7 +17,6 @@ */ class JavaXProperty extends JavaXMember implements XProperty { - static boolean isProperty(Field f, Type boundType, Filter filter) { return isPropertyType( boundType ) && !f.isSynthetic() @@ -39,7 +38,15 @@ // TODO should we use stronger checking on the naming of getters/setters, or just leave this to the validator? } - protected JavaXProperty(Member member, Type type, TypeEnvironment env, JavaXFactory factory, PropertyTypeExtractor propertyTypeExtractor) { + static JavaXProperty create(Member member, final TypeEnvironment context, final JavaXFactory factory) { + final Type propType = Util.typeOf( member, context ); + PropertyTypeExtractor typeExtractor = factory.buildTypeExtractor( context, propType ); + if( typeExtractor == null ) + return null; + return new JavaXProperty( member, propType, context, factory, typeExtractor ); + } + + private JavaXProperty(Member member, Type type, TypeEnvironment env, JavaXFactory factory, PropertyTypeExtractor propertyTypeExtractor) { super(member, type, env, factory, propertyTypeExtractor); assert member instanceof Field || member instanceof Method; } |