[hibernate-commits] Hibernate SVN: r17910 - in jpamodelgen/trunk/src: main/java/org/hibernate/jpamodelgen/annotation and 5 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Wed Nov 4 11:01:23 EST 2009


Author: hardy.ferentschik
Date: 2009-11-04 11:01:22 -0500 (Wed, 04 Nov 2009)
New Revision: 17910

Added:
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/Image.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java
Removed:
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/Image.java
Modified:
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
   jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java
   jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java
   jpamodelgen/trunk/src/test/suite/unit-tests.xml
Log:
METAGEN-2
Added support for arrays. Arrays are now added to the metamodel as SingularAttribute.
We don't, however, cover the case yet where there is a @*ToMany annotation on the array

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/ClassWriter.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -17,26 +17,26 @@
 */
 package org.hibernate.jpamodelgen;
 
+import java.io.IOException;
 import java.io.OutputStream;
 import java.io.PrintWriter;
-import java.io.IOException;
 import java.io.StringWriter;
 import java.util.List;
-import javax.annotation.processing.ProcessingEnvironment;
 import javax.annotation.processing.FilerException;
-import javax.tools.FileObject;
-import javax.tools.Diagnostic;
-import javax.lang.model.type.TypeMirror;
-import javax.lang.model.type.TypeKind;
-import javax.lang.model.type.DeclaredType;
+import javax.annotation.processing.ProcessingEnvironment;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.TypeElement;
+import javax.lang.model.type.DeclaredType;
+import javax.lang.model.type.TypeKind;
+import javax.lang.model.type.TypeMirror;
+import javax.tools.Diagnostic;
+import javax.tools.FileObject;
 
 /**
  * @author Emmanuel Bernard
  */
 public class ClassWriter {
-	
+
 	public static void writeFile(MetaEntity entity, ProcessingEnvironment processingEnv, Context context) {
 		try {
 			String metaModelPackage = entity.getPackageName();
@@ -89,21 +89,13 @@
 		StringWriter sw = new StringWriter();
 		PrintWriter pw = null;
 		try {
-
 			pw = new PrintWriter( sw );
-
+			// we cannot use add @Generated into the metamodel class since this would not work in a JDK 5 environment
 			//pw.println( "@" + entity.importType( Generated.class.getName() ) + "(\"JPA MetaModel for " + entity.getQualifiedName() + "\")" );
-
 			pw.println( "@" + entity.importType( "javax.persistence.metamodel.StaticMetamodel" ) + "(" + entity.getSimpleName() + ".class)" );
-
-
-
 			printClassDeclaration( entity, pw, context );
-
 			pw.println();
-
 			List<MetaAttribute> members = entity.getMembers();
-
 			for ( MetaAttribute metaMember : members ) {
 				pw.println( "	" + metaMember.getDeclarationString() );
 			}
@@ -124,16 +116,15 @@
 		final TypeMirror superClass = entity.getTypeElement().getSuperclass();
 		//superclass of Object is of NoType which returns some other kind
 		String superclassDeclaration = "";
-		if (superClass.getKind() == TypeKind.DECLARED ) {
+		if ( superClass.getKind() == TypeKind.DECLARED ) {
 			//F..king Ch...t Have those people used their horrible APIs even once?
 			final Element superClassElement = ( ( DeclaredType ) superClass ).asElement();
 			String superClassName = ( ( TypeElement ) superClassElement ).getQualifiedName().toString();
 			if ( context.getMetaEntitiesToProcess().containsKey( superClassName )
 					|| context.getMetaSuperclassAndEmbeddableToProcess().containsKey( superClassName ) ) {
-				pw.print( " extends " + superClassName + "_"  );
+				pw.print( " extends " + superClassName + "_" );
 			}
 		}
-
 		pw.println( " {" );
 	}
 }

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaEntity.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -25,38 +25,37 @@
 import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
+import javax.lang.model.element.Modifier;
 import javax.lang.model.element.Name;
 import javax.lang.model.element.PackageElement;
 import javax.lang.model.element.TypeElement;
-import javax.lang.model.element.Modifier;
+import javax.lang.model.type.ArrayType;
 import javax.lang.model.type.DeclaredType;
 import javax.lang.model.type.ExecutableType;
 import javax.lang.model.type.PrimitiveType;
 import javax.lang.model.type.TypeMirror;
 import javax.lang.model.util.ElementFilter;
 import javax.lang.model.util.SimpleTypeVisitor6;
+import javax.persistence.Access;
+import javax.persistence.AccessType;
+import javax.persistence.ElementCollection;
+import javax.persistence.Embeddable;
+import javax.persistence.Embedded;
 import javax.persistence.EmbeddedId;
+import javax.persistence.Entity;
 import javax.persistence.Id;
-import javax.persistence.AccessType;
-import javax.persistence.Entity;
 import javax.persistence.MappedSuperclass;
 import javax.persistence.Transient;
-import javax.persistence.Embedded;
-import javax.persistence.Embeddable;
-import javax.persistence.Access;
-import javax.persistence.ElementCollection;
-import javax.tools.Diagnostic.Kind;
 import javax.tools.Diagnostic;
 
-import org.hibernate.jpamodelgen.MetaEntity;
-import org.hibernate.jpamodelgen.MetaAttribute;
+import org.hibernate.jpamodelgen.Context;
 import org.hibernate.jpamodelgen.ImportContext;
 import org.hibernate.jpamodelgen.ImportContextImpl;
+import org.hibernate.jpamodelgen.MetaAttribute;
+import org.hibernate.jpamodelgen.MetaEntity;
 import org.hibernate.jpamodelgen.TypeUtils;
-import org.hibernate.jpamodelgen.Context;
 
 /**
- *
  * @author Max Andersen
  * @author Hardy Ferentschik
  * @author Emmanuel Bernard
@@ -80,7 +79,7 @@
 	}
 
 	public AnnotationMetaEntity(ProcessingEnvironment pe, TypeElement element, Context context, AccessType accessType) {
-		this(pe, element, context);
+		this( pe, element, context );
 		this.defaultAccessTypeForHierarchy = accessType;
 	}
 
@@ -88,10 +87,6 @@
 		return element.getSimpleName().toString();
 	}
 
-	public Element getOriginalElement() {
-		return element;
-	}
-
 	public String getQualifiedName() {
 		return element.getQualifiedName().toString();
 	}
@@ -112,9 +107,9 @@
 		addPersistentMembers( membersFound, elementAccessType, methodsOfClass, AccessType.PROPERTY );
 
 		//process superclasses
-		for(TypeElement superclass = TypeUtils.getSuperclass(element) ;
-			superclass != null ;
-			superclass = TypeUtils.getSuperclass( superclass ) ) {
+		for ( TypeElement superclass = TypeUtils.getSuperclass( element );
+			  superclass != null;
+			  superclass = TypeUtils.getSuperclass( superclass ) ) {
 			if ( superclass.getAnnotation( Entity.class ) != null ) {
 				break; //will be handled or has been handled already
 			}
@@ -123,11 +118,6 @@
 				context.processElement( superclass, defaultAccessTypeForHierarchy );
 			}
 		}
-
-		//this is valid to not have properties (ie subentities)
-//		if ( membersFound.size() == 0 ) {
-//			pe.getMessager().printMessage( Kind.WARNING, "No properties found on " + element, element );
-//		}
 		return membersFound;
 	}
 
@@ -136,10 +126,8 @@
 			AccessType elementAccessType,
 			List<? extends Element> membersOfClass,
 			AccessType membersKind) {
-		pe.getMessager()
-					.printMessage( Kind.NOTE, "Scanning " + membersOfClass.size() + " " + membersKind + " for " + element.toString() );
 		AccessType explicitAccessType;
-		if (elementAccessType == membersKind) {
+		if ( elementAccessType == membersKind ) {
 			//all membersKind considered
 			explicitAccessType = null;
 		}
@@ -149,27 +137,22 @@
 		}
 		for ( Element memberOfClass : membersOfClass ) {
 
-			AnnotationMetaAttribute result = memberOfClass.asType().accept( new TypeVisitor( this, explicitAccessType ),
-					memberOfClass
-			);
+			TypeVisitor visitor = new TypeVisitor( this, explicitAccessType );
+			AnnotationMetaAttribute result = memberOfClass.asType().accept( visitor, memberOfClass );
 			if ( result != null ) {
 				membersFound.add( result );
 			}
-//EBE not sure why?
-//			else {
-//				pe.getMessager().printMessage( Kind.WARNING, "Could not find valid info for JPA property", mymember );
-//			}
 		}
 	}
 
 	private AccessType getAccessTypeForElement() {
 
 		//get local strategy
-		AccessType accessType = getAccessTypeForClass(element);
-		if (accessType == null) {
+		AccessType accessType = getAccessTypeForClass( element );
+		if ( accessType == null ) {
 			accessType = this.defaultAccessTypeForHierarchy;
 		}
-		if (accessType == null) {
+		if ( accessType == null ) {
 			//we dont' know
 			//if an enity go up
 			//
@@ -179,13 +162,13 @@
 			TypeElement superClass = element;
 			do {
 				superClass = TypeUtils.getSuperclass( superClass );
-				if (superClass != null) {
+				if ( superClass != null ) {
 					if ( superClass.getAnnotation( Entity.class ) != null
 							|| superClass.getAnnotation( MappedSuperclass.class ) != null ) {
 						//FIXME make it work for XML
-						AccessType superClassAccessType = getAccessTypeForClass(superClass);
+						AccessType superClassAccessType = getAccessTypeForClass( superClass );
 						//we've reach the root entity and resolved Ids
-						if ( superClassAccessType != null && defaultAccessTypeForHierarchy != null) {
+						if ( superClassAccessType != null && defaultAccessTypeForHierarchy != null ) {
 							break; //we've found it
 						}
 					}
@@ -212,11 +195,12 @@
 		pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "check class" + searchedElement );
 		AccessType accessType = context.getAccessType( searchedElement );
 
-		if (defaultAccessTypeForHierarchy == null) {
+		if ( defaultAccessTypeForHierarchy == null ) {
 			this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
 		}
 		if ( accessType != null ) {
-			pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "Found in cache" + searchedElement + ":" + accessType );
+			pe.getMessager()
+					.printMessage( Diagnostic.Kind.NOTE, "Found in cache" + searchedElement + ":" + accessType );
 			return accessType;
 		}
 
@@ -226,14 +210,15 @@
 		 */
 		final Access accessAnn = searchedElement.getAnnotation( Access.class );
 		AccessType forcedAccessType = accessAnn != null ? accessAnn.value() : null;
-		if ( forcedAccessType != null) {
-			pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + forcedAccessType );
+		if ( forcedAccessType != null ) {
+			pe.getMessager()
+					.printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + forcedAccessType );
 			context.addAccessType( searchedElement, forcedAccessType );
 		}
 
 		//continue nevertheless to check if we are root and if defaultAccessTypeForHierarchy
 		//should be overridden
-		if ( forcedAccessType == null || defaultAccessTypeForHierarchy == null) {
+		if ( forcedAccessType == null || defaultAccessTypeForHierarchy == null ) {
 			List<? extends Element> myMembers = searchedElement.getEnclosedElements();
 			for ( Element subElement : myMembers ) {
 				List<? extends AnnotationMirror> entityAnnotations =
@@ -252,8 +237,10 @@
 						if ( kind == ElementKind.FIELD || kind == ElementKind.METHOD ) {
 							accessType = kind == ElementKind.FIELD ? AccessType.FIELD : AccessType.PROPERTY;
 							//FIXME enlever in niveau
-							if (defaultAccessTypeForHierarchy == null) {
-								this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy( searchedElement );
+							if ( defaultAccessTypeForHierarchy == null ) {
+								this.defaultAccessTypeForHierarchy = context.getDefaultAccessTypeForHerarchy(
+										searchedElement
+								);
 								//we've discovered the class hierarchy, let's cache it
 								if ( defaultAccessTypeForHierarchy == null ) {
 									this.defaultAccessTypeForHierarchy = accessType;
@@ -262,9 +249,11 @@
 									//context.addAccessTypeForHierarchy( element, defaultAccessTypeForHierarchy );
 								}
 							}
-							if ( forcedAccessType == null) {
+							if ( forcedAccessType == null ) {
 								context.addAccessType( searchedElement, accessType );
-								pe.getMessager().printMessage( Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + accessType );
+								pe.getMessager().printMessage(
+										Diagnostic.Kind.NOTE, "access type " + searchedElement + ":" + accessType
+								);
 								return accessType;
 							}
 							else {
@@ -323,10 +312,20 @@
 			}
 		}
 
+		@Override
+		public AnnotationMetaAttribute visitArray(ArrayType t, Element element) {
+			if ( isPersistent( element ) ) {
+				return new AnnotationMetaSingleAttribute( parent, element, TypeUtils.toTypeString( t ) );
+			}
+			else {
+				return null;
+			}
+		}
+
 		private boolean isPersistent(Element element) {
 			//FIXME consider XML
 			boolean correctAccessType = false;
-			if (this.explicitAccessType == null) {
+			if ( this.explicitAccessType == null ) {
 				correctAccessType = true;
 			}
 			else {
@@ -342,7 +341,6 @@
 
 		}
 
-
 		@Override
 		public AnnotationMetaAttribute visitDeclared(DeclaredType t, Element element) {
 			//FIXME consider XML
@@ -354,12 +352,17 @@
 					//collection of element
 					if ( element.getAnnotation( ElementCollection.class ) != null ) {
 						final TypeMirror collectionType = t.getTypeArguments().get( 0 );
-						final TypeElement collectionElement = ( TypeElement ) pe.getTypeUtils().asElement( collectionType );
-						this.parent.context.processElement( collectionElement,
-								this.parent.defaultAccessTypeForElement );
+						final TypeElement collectionElement = ( TypeElement ) pe.getTypeUtils()
+								.asElement( collectionType );
+						this.parent.context.processElement(
+								collectionElement,
+								this.parent.defaultAccessTypeForElement
+						);
 					}
 					if ( collection.equals( "javax.persistence.metamodel.MapAttribute" ) ) {
-						return new AnnotationMetaMap( parent, element, collection, getKeyType( t ), getElementType( t ) );
+						return new AnnotationMetaMap(
+								parent, element, collection, getKeyType( t ), getElementType( t )
+						);
 					}
 					else {
 						return new AnnotationMetaCollection( parent, element, collection, getElementType( t ) );
@@ -369,10 +372,14 @@
 					//FIXME Consider XML
 					if ( element.getAnnotation( Embedded.class ) != null
 							|| returnedElement.getAnnotation( Embeddable.class ) != null ) {
-						this.parent.context.processElement( returnedElement, 
-								this.parent.defaultAccessTypeForElement );
+						this.parent.context.processElement(
+								returnedElement,
+								this.parent.defaultAccessTypeForElement
+						);
 					}
-					return new AnnotationMetaSingleAttribute( parent, element, returnedElement.getQualifiedName().toString() );
+					return new AnnotationMetaSingleAttribute(
+							parent, element, returnedElement.getQualifiedName().toString()
+					);
 				}
 			}
 			else {
@@ -380,7 +387,6 @@
 			}
 		}
 
-
 		@Override
 		public AnnotationMetaAttribute visitExecutable(ExecutableType t, Element p) {
 			String string = p.getSimpleName().toString();
@@ -421,7 +427,6 @@
 		return t.getTypeArguments().get( 0 ).toString();
 	}
 
-
 	private String getElementType(DeclaredType declaredType) {
 		if ( declaredType.getTypeArguments().size() == 1 ) {
 			return declaredType.getTypeArguments().get( 0 ).toString();

Modified: jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java
===================================================================
--- jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/main/java/org/hibernate/jpamodelgen/annotation/AnnotationMetaSingleAttribute.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -17,12 +17,11 @@
 */
 package org.hibernate.jpamodelgen.annotation;
 
-import org.hibernate.jpamodelgen.MetaSingleAttribute;
-
 import javax.lang.model.element.Element;
 
+import org.hibernate.jpamodelgen.MetaSingleAttribute;
+
 /**
- *
  * @author Max Andersen
  * @author Hardy Ferentschik
  * @author Emmanuel Bernard
@@ -30,12 +29,11 @@
 public class AnnotationMetaSingleAttribute extends AnnotationMetaAttribute implements MetaSingleAttribute {
 
 	public AnnotationMetaSingleAttribute(AnnotationMetaEntity parent, Element element, String type) {
-		super(parent, element, type);
+		super( parent, element, type );
 	}
 
 	@Override
 	public String getMetaType() {
 		return "javax.persistence.metamodel.SingularAttribute";
 	}
-
 }

Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/AccessTypeTest.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -21,6 +21,7 @@
 
 import org.hibernate.jpamodelgen.test.util.CompilationTest;
 import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAbsenceOfField;
+import static org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldType;
 import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfField;
 
 /**
@@ -81,6 +82,7 @@
 	@Test
 	public void testMemberAccessType() throws Exception {
 		assertPresenceOfField( Customer.class.getName() + "_", "goodPayer", "access type overriding" );
+		assertFieldType( Customer.class.getName() + "_", "goodPayer", Boolean.class, "access type overriding" );
 	}
 
 	@Override

Deleted: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/Image.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/Image.java	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/Image.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -1,46 +0,0 @@
-// $Id$
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2008, Red Hat Middleware LLC, and individual contributors
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* Licensed 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.hibernate.jpamodelgen.test.accesstype;
-
-import javax.persistence.Entity;
-
-/**
- * @author Emmanuel Bernard
- */
- at Entity
-public class Image {
-	private String name;
-
-	private byte[] data;
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public byte[] getData() {
-		return data;
-	}
-
-	public void setData(byte[] data) {
-		this.data = data;
-	}
-}
\ No newline at end of file

Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java (from rev 17903, jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/inheritance/InheritanceTest.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java	                        (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/ArrayTest.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -0,0 +1,51 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.hibernate.jpamodelgen.test.arraytype;
+
+import org.testng.annotations.Test;
+
+import org.hibernate.jpamodelgen.test.util.CompilationTest;
+import static org.hibernate.jpamodelgen.test.util.TestUtil.assertFieldType;
+
+/**
+ * @author Hardy Ferentschik
+ */
+public class ArrayTest extends CompilationTest {
+	/**
+	 * METAGEN-2
+	 */
+	@Test
+	public void testPrimitiveArray() throws Exception {
+		assertFieldType( Image.class.getName() + "_", "data", byte[].class, "Wrong type for field." );
+	}
+
+	/**
+	 * METAGEN-2
+	 */
+	@Test
+	public void testIntegerArray() throws Exception {
+		assertFieldType(
+				TemperatureSamples.class.getName() + "_", "samples", Integer[].class, "Wrong type for field."
+		);
+	}
+
+	@Override
+	protected String getTestPackage() {
+		return Image.class.getPackage().getName();
+	}
+}
\ No newline at end of file

Copied: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/Image.java (from rev 17903, jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/accesstype/Image.java)
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/Image.java	                        (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/Image.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -0,0 +1,46 @@
+// $Id$
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.hibernate.jpamodelgen.test.arraytype;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Emmanuel Bernard
+ */
+ at Entity
+public class Image {
+	private String name;
+
+	private byte[] data;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public byte[] getData() {
+		return data;
+	}
+
+	public void setData(byte[] data) {
+		this.data = data;
+	}
+}
\ No newline at end of file


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/Image.java
___________________________________________________________________
Name: svn:keywords
   + Id

Added: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java	                        (rev 0)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/arraytype/TemperatureSamples.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -0,0 +1,36 @@
+// $Id: Image.java 17903 2009-11-04 13:22:37Z hardy.ferentschik $
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2008, Red Hat Middleware LLC, and individual contributors
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* Licensed 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.hibernate.jpamodelgen.test.arraytype;
+
+import javax.persistence.Entity;
+
+/**
+ * @author Hardy Feretnschik
+ */
+ at Entity
+public class TemperatureSamples {
+	private Integer[] samples;
+
+	public Integer[] getSamples() {
+		return samples;
+	}
+
+	public void setSamples(Integer[] samples) {
+		this.samples = samples;
+	}
+}
\ No newline at end of file

Modified: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java
===================================================================
--- jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java	2009-11-04 16:01:22 UTC (rev 17910)
@@ -17,7 +17,13 @@
 */
 package org.hibernate.jpamodelgen.test.util;
 
+import java.lang.reflect.Field;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
 import org.testng.Assert;
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertNotNull;
 import static org.testng.FileAssert.fail;
 
@@ -52,6 +58,19 @@
 		Assert.assertTrue( isFieldHere( className, fieldName ), errorString );
 	}
 
+	public static void assertFieldType(String className, String fieldName, Class expectedType, String errorString)
+			throws ClassNotFoundException {
+		Field field = getField( className, fieldName );
+		assertNotNull( field );
+		ParameterizedType type = ( ParameterizedType ) field.getGenericType();
+		Type actualType = type.getActualTypeArguments()[1];
+		if ( expectedType.isArray() ) {
+			expectedType = expectedType.getComponentType();
+			actualType = ( ( GenericArrayType ) actualType ).getGenericComponentType();
+		}
+		assertEquals( actualType, expectedType, errorString );
+	}
+
 	public static void assertSuperClass(String className, String superClassName) {
 		Class<?> clazz;
 		Class<?> superClazz;
@@ -69,13 +88,16 @@
 	}
 
 	private static boolean isFieldHere(String className, String fieldName) throws ClassNotFoundException {
+		return getField( className, fieldName ) != null;
+	}
+
+	private static Field getField(String className, String fieldName) throws ClassNotFoundException {
 		Class<?> clazz = Class.forName( className );
 		try {
-			clazz.getField( fieldName );
-			return true;
+			return clazz.getField( fieldName );
 		}
 		catch ( NoSuchFieldException e ) {
-			return false;
+			return null;
 		}
 	}
 }


Property changes on: jpamodelgen/trunk/src/test/java/org/hibernate/jpamodelgen/test/util/TestUtil.java
___________________________________________________________________
Name: svn:keywords
   + Id

Modified: jpamodelgen/trunk/src/test/suite/unit-tests.xml
===================================================================
--- jpamodelgen/trunk/src/test/suite/unit-tests.xml	2009-11-04 15:59:20 UTC (rev 17909)
+++ jpamodelgen/trunk/src/test/suite/unit-tests.xml	2009-11-04 16:01:22 UTC (rev 17910)
@@ -4,6 +4,7 @@
     <test name="Unit tests">
         <packages>
             <package name="org.hibernate.jpamodelgen.test.accesstype"/>
+            <package name="org.hibernate.jpamodelgen.test.arraytype"/>
             <package name="org.hibernate.jpamodelgen.test.inheritance"/>
             <package name="org.hibernate.jpamodelgen.test.xmlmapped"/>
         </packages>



More information about the hibernate-commits mailing list