METAGEN-76 Fixing StringUtil#isPropertyName to ignore hashCode as persistent property
This commit is contained in:
parent
4c968d7f7a
commit
802cbcd546
|
@ -23,7 +23,6 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import javax.lang.model.element.Element;
|
import javax.lang.model.element.Element;
|
||||||
import javax.lang.model.element.Modifier;
|
import javax.lang.model.element.Modifier;
|
||||||
import javax.lang.model.element.Name;
|
|
||||||
import javax.lang.model.element.PackageElement;
|
import javax.lang.model.element.PackageElement;
|
||||||
import javax.lang.model.element.TypeElement;
|
import javax.lang.model.element.TypeElement;
|
||||||
import javax.lang.model.util.ElementFilter;
|
import javax.lang.model.util.ElementFilter;
|
||||||
|
|
|
@ -50,9 +50,29 @@ public final class StringUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPropertyName(String name) {
|
public static boolean isPropertyName(String name) {
|
||||||
return name.startsWith( PROPERTY_PREFIX_GET ) || name.startsWith( PROPERTY_PREFIX_IS ) || name.startsWith(
|
if ( name == null ) {
|
||||||
PROPERTY_PREFIX_HAS
|
return false;
|
||||||
);
|
}
|
||||||
|
return checkPropertyName( name, PROPERTY_PREFIX_GET )
|
||||||
|
|| checkPropertyName( name, PROPERTY_PREFIX_IS )
|
||||||
|
|| checkPropertyName( name, PROPERTY_PREFIX_HAS );
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean checkPropertyName(String name, String prefix) {
|
||||||
|
if ( !name.startsWith( prefix ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// the name has to start with the prefix and have at least one more character
|
||||||
|
if ( name.length() < prefix.length() + 1 ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !Character.isUpperCase( name.charAt( prefix.length() ) ) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getPropertyName(String name) {
|
public static String getPropertyName(String name) {
|
||||||
|
@ -70,7 +90,7 @@ public final class StringUtil {
|
||||||
else if ( name.startsWith( PROPERTY_PREFIX_HAS ) ) {
|
else if ( name.startsWith( PROPERTY_PREFIX_HAS ) ) {
|
||||||
tmp = name.replaceFirst( PROPERTY_PREFIX_HAS, "" );
|
tmp = name.replaceFirst( PROPERTY_PREFIX_HAS, "" );
|
||||||
}
|
}
|
||||||
return tmp.substring(0,1).toLowerCase() + tmp.substring(1);
|
return tmp.substring( 0, 1 ).toLowerCase() + tmp.substring( 1 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,17 +14,18 @@
|
||||||
* See the License for the specific language governing permissions and
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test for METAGEN-40
|
|
||||||
*
|
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-40")
|
||||||
public class DefaultPackageTest extends CompilationTest {
|
public class DefaultPackageTest extends CompilationTest {
|
||||||
@Test
|
@Test
|
||||||
public void testMetaModelGeneratedForEntitiesInDefaultPackage() {
|
public void testMetaModelGeneratedForEntitiesInDefaultPackage() {
|
||||||
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* JBoss, Home of Professional Open Source
|
||||||
|
* Copyright 2010, 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;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
import org.hibernate.jpamodelgen.util.StringUtil;
|
||||||
|
|
||||||
|
import static org.testng.Assert.assertFalse;
|
||||||
|
import static org.testng.AssertJUnit.assertTrue;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Hardy Ferentschik
|
||||||
|
*/
|
||||||
|
public class StringUtilTest {
|
||||||
|
@Test
|
||||||
|
public void testIsPropertyName() {
|
||||||
|
assertTrue( StringUtil.isPropertyName( "getFoo" ) );
|
||||||
|
assertTrue( StringUtil.isPropertyName( "isFoo" ) );
|
||||||
|
assertTrue( StringUtil.isPropertyName( "hasFoo" ) );
|
||||||
|
|
||||||
|
assertFalse( StringUtil.isPropertyName( "getfoo" ) );
|
||||||
|
assertFalse( StringUtil.isPropertyName( "isfoo" ) );
|
||||||
|
assertFalse( StringUtil.isPropertyName( "hasfoo" ) );
|
||||||
|
|
||||||
|
assertFalse( StringUtil.isPropertyName( "" ) );
|
||||||
|
assertFalse( StringUtil.isPropertyName( null ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-76")
|
||||||
|
public void testHashCodeNotAProperty() {
|
||||||
|
assertFalse( StringUtil.isPropertyName( "hashCode" ) );
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ package org.hibernate.jpamodelgen.test.arraytype;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
|
||||||
|
|
||||||
|
@ -27,18 +28,14 @@ import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeIn
|
||||||
*/
|
*/
|
||||||
public class ArrayTest extends CompilationTest {
|
public class ArrayTest extends CompilationTest {
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-2
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-2")
|
||||||
public void testPrimitiveArray() {
|
public void testPrimitiveArray() {
|
||||||
assertAttributeTypeInMetaModelFor( Image.class, "data", byte[].class, "Wrong type for field." );
|
assertAttributeTypeInMetaModelFor( Image.class, "data", byte[].class, "Wrong type for field." );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-2
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-2")
|
||||||
public void testIntegerArray() {
|
public void testIntegerArray() {
|
||||||
assertAttributeTypeInMetaModelFor(
|
assertAttributeTypeInMetaModelFor(
|
||||||
TemperatureSamples.class, "samples", Integer[].class, "Wrong type for field."
|
TemperatureSamples.class, "samples", Integer[].class, "Wrong type for field."
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.hibernate.jpamodelgen.test.blob;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor;
|
||||||
|
@ -27,10 +28,9 @@ import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfField
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class BlobTest extends CompilationTest {
|
public class BlobTest extends CompilationTest {
|
||||||
/**
|
|
||||||
* METAGEN-38
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-38")
|
||||||
public void testBlobField() {
|
public void testBlobField() {
|
||||||
assertMetamodelClassGeneratedFor( BlobEntity.class );
|
assertMetamodelClassGeneratedFor( BlobEntity.class );
|
||||||
assertPresenceOfFieldInMetamodelFor( BlobEntity.class, "blob", "the metamodel should have a member 'blob'" );
|
assertPresenceOfFieldInMetamodelFor( BlobEntity.class, "blob", "the metamodel should have a member 'blob'" );
|
||||||
|
|
|
@ -23,6 +23,7 @@ import java.util.List;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
import org.hibernate.jpamodelgen.test.util.TestUtil;
|
import org.hibernate.jpamodelgen.test.util.TestUtil;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMapAttributesInMetaModelFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMapAttributesInMetaModelFor;
|
||||||
|
@ -33,10 +34,9 @@ import static org.hibernate.jpamodelgen.test.util.TestUtil.assertNoSourceFileGen
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class ElementCollectionTest extends CompilationTest {
|
public class ElementCollectionTest extends CompilationTest {
|
||||||
/**
|
|
||||||
* METAGEN-8
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-8")
|
||||||
public void testElementCollectionOnMap() {
|
public void testElementCollectionOnMap() {
|
||||||
assertMetamodelClassGeneratedFor( House.class );
|
assertMetamodelClassGeneratedFor( House.class );
|
||||||
assertMetamodelClassGeneratedFor( Room.class );
|
assertMetamodelClassGeneratedFor( Room.class );
|
||||||
|
@ -44,10 +44,8 @@ public class ElementCollectionTest extends CompilationTest {
|
||||||
assertNoSourceFileGeneratedFor( String.class );
|
assertNoSourceFileGeneratedFor( String.class );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-19
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-19")
|
||||||
public void testMapKeyClass() {
|
public void testMapKeyClass() {
|
||||||
assertMetamodelClassGeneratedFor( Hotel.class );
|
assertMetamodelClassGeneratedFor( Hotel.class );
|
||||||
assertMapAttributesInMetaModelFor(
|
assertMapAttributesInMetaModelFor(
|
||||||
|
@ -59,10 +57,8 @@ public class ElementCollectionTest extends CompilationTest {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-22
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-22")
|
||||||
public void testMapKeyClassXmlConfigured() {
|
public void testMapKeyClassXmlConfigured() {
|
||||||
assertMetamodelClassGeneratedFor( Hostel.class );
|
assertMetamodelClassGeneratedFor( Hostel.class );
|
||||||
assertMapAttributesInMetaModelFor(
|
assertMapAttributesInMetaModelFor(
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.hibernate.jpamodelgen.test.embeddablemappedsuperclass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertNoCompilationError;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertNoCompilationError;
|
||||||
|
@ -29,13 +30,12 @@ import static org.hibernate.jpamodelgen.test.util.TestUtil.assertNoCompilationEr
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class EmbeddableMappedSuperClassTest extends CompilationTest {
|
public class EmbeddableMappedSuperClassTest extends CompilationTest {
|
||||||
/**
|
|
||||||
* METAGEN-36
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-36")
|
||||||
public void testMetaModelsGenerated() {
|
public void testMetaModelsGenerated() {
|
||||||
assertMetamodelClassGeneratedFor( EmbeddableAndMappedSuperClass.class );
|
assertMetamodelClassGeneratedFor( EmbeddableAndMappedSuperClass.class );
|
||||||
assertNoCompilationError(getCompilationDiagnostics());
|
assertNoCompilationError( getCompilationDiagnostics() );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
/*
|
||||||
|
* JBoss, Home of Professional Open Source
|
||||||
|
* Copyright 2010, 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.hashcode;
|
||||||
|
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
|
||||||
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAbsenceOfFieldInMetamodelFor;
|
||||||
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
||||||
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfFieldInMetamodelFor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Hardy Ferentschik
|
||||||
|
*/
|
||||||
|
public class HashCodeTest extends CompilationTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-76")
|
||||||
|
public void testHashCodeDoesNotCreateSingularAttribute() {
|
||||||
|
assertMetamodelClassGeneratedFor( HashEntity.class );
|
||||||
|
|
||||||
|
assertPresenceOfFieldInMetamodelFor( HashEntity.class, "id" );
|
||||||
|
assertAbsenceOfFieldInMetamodelFor( HashEntity.class, "hashCode", "hashCode is not a persistent property" );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getPackageNameOfCurrentTest() {
|
||||||
|
return HashCodeTest.class.getPackage().getName();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* JBoss, Home of Professional Open Source
|
||||||
|
* Copyright 2010, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
// $Id:$
|
||||||
|
package org.hibernate.jpamodelgen.test.hashcode;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Hardy Ferentschik
|
||||||
|
*/
|
||||||
|
@Entity
|
||||||
|
public class HashEntity {
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
@Id
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(long id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if ( this == o ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if ( o == null || getClass() != o.getClass() ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
HashEntity that = (HashEntity) o;
|
||||||
|
|
||||||
|
if ( id != that.id ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return (int) ( id ^ ( id >>> 32 ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.hibernate.jpamodelgen.test.targetannotation;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertMetamodelClassGeneratedFor;
|
||||||
|
@ -30,14 +31,18 @@ import static org.hibernate.jpamodelgen.test.util.TestUtil.assertPresenceOfField
|
||||||
* @author Hardy Ferentschik
|
* @author Hardy Ferentschik
|
||||||
*/
|
*/
|
||||||
public class TargetAnnotationTest extends CompilationTest {
|
public class TargetAnnotationTest extends CompilationTest {
|
||||||
/**
|
|
||||||
* METAGEN-30
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-30")
|
||||||
public void testEmbeddableWithTargetAnnotation() {
|
public void testEmbeddableWithTargetAnnotation() {
|
||||||
assertMetamodelClassGeneratedFor( House.class );
|
assertMetamodelClassGeneratedFor( House.class );
|
||||||
assertPresenceOfFieldInMetamodelFor( House.class, "address", "the metamodel should have a member 'address'" );
|
assertPresenceOfFieldInMetamodelFor( House.class, "address", "the metamodel should have a member 'address'" );
|
||||||
assertAttributeTypeInMetaModelFor( House.class, "address", AddressImpl.class, "The target annotation set the type to AddressImpl");
|
assertAttributeTypeInMetaModelFor(
|
||||||
|
House.class,
|
||||||
|
"address",
|
||||||
|
AddressImpl.class,
|
||||||
|
"The target annotation set the type to AddressImpl"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -35,6 +35,7 @@ import org.testng.Assert;
|
||||||
import static org.testng.Assert.assertEquals;
|
import static org.testng.Assert.assertEquals;
|
||||||
import static org.testng.Assert.assertFalse;
|
import static org.testng.Assert.assertFalse;
|
||||||
import static org.testng.Assert.assertNotNull;
|
import static org.testng.Assert.assertNotNull;
|
||||||
|
import static org.testng.Assert.assertTrue;
|
||||||
import static org.testng.FileAssert.fail;
|
import static org.testng.FileAssert.fail;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -144,6 +145,11 @@ public class TestUtil {
|
||||||
return contents.toString();
|
return contents.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void dumpMetaModelSourceFor(Class<?> clazz) {
|
||||||
|
log.info( "Dumping meta model source for " + clazz.getName() + ":" );
|
||||||
|
log.info( getMetaModelSourceAsString( clazz ) );
|
||||||
|
}
|
||||||
|
|
||||||
public static void assertNoSourceFileGeneratedFor(Class<?> clazz) {
|
public static void assertNoSourceFileGeneratedFor(Class<?> clazz) {
|
||||||
assertNotNull( clazz, "Class parameter cannot be null" );
|
assertNotNull( clazz, "Class parameter cannot be null" );
|
||||||
File sourceFile = getMetaModelSourceFileFor( clazz );
|
File sourceFile = getMetaModelSourceFileFor( clazz );
|
||||||
|
@ -151,15 +157,27 @@ public class TestUtil {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertAbsenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName) {
|
public static void assertAbsenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName) {
|
||||||
assertAbsenceOfFieldInMetamodelFor( clazz, fieldName, "field should not be persistent" );
|
assertAbsenceOfFieldInMetamodelFor(
|
||||||
|
clazz,
|
||||||
|
fieldName,
|
||||||
|
"'" + fieldName + "' should not appear in metamodel class"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertAbsenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName, String errorString) {
|
public static void assertAbsenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName, String errorString) {
|
||||||
Assert.assertFalse( hasFieldInMetamodelFor( clazz, fieldName ), errorString );
|
assertFalse( hasFieldInMetamodelFor( clazz, fieldName ), buildErrorString( errorString, clazz ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void assertPresenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName) {
|
||||||
|
assertPresenceOfFieldInMetamodelFor(
|
||||||
|
clazz,
|
||||||
|
fieldName,
|
||||||
|
"'" + fieldName + "' should appear in metamodel class"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertPresenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName, String errorString) {
|
public static void assertPresenceOfFieldInMetamodelFor(Class<?> clazz, String fieldName, String errorString) {
|
||||||
Assert.assertTrue( hasFieldInMetamodelFor( clazz, fieldName ), errorString );
|
assertTrue( hasFieldInMetamodelFor( clazz, fieldName ), buildErrorString( errorString, clazz ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertAttributeTypeInMetaModelFor(Class<?> clazz, String fieldName, Class<?> expectedType, String errorString) {
|
public static void assertAttributeTypeInMetaModelFor(Class<?> clazz, String fieldName, Class<?> expectedType, String errorString) {
|
||||||
|
@ -174,7 +192,7 @@ public class TestUtil {
|
||||||
assertEquals(
|
assertEquals(
|
||||||
actualType,
|
actualType,
|
||||||
expectedType,
|
expectedType,
|
||||||
"Types do not match: " + errorString
|
"Types do not match: " + buildErrorString( errorString, clazz )
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,10 +201,10 @@ public class TestUtil {
|
||||||
assertNotNull( field );
|
assertNotNull( field );
|
||||||
ParameterizedType type = (ParameterizedType) field.getGenericType();
|
ParameterizedType type = (ParameterizedType) field.getGenericType();
|
||||||
Type actualMapKeyType = type.getActualTypeArguments()[1];
|
Type actualMapKeyType = type.getActualTypeArguments()[1];
|
||||||
assertEquals( actualMapKeyType, expectedMapKey, errorString );
|
assertEquals( actualMapKeyType, expectedMapKey, buildErrorString( errorString, clazz ) );
|
||||||
|
|
||||||
Type actualMapKeyValue = type.getActualTypeArguments()[2];
|
Type actualMapKeyValue = type.getActualTypeArguments()[2];
|
||||||
assertEquals( actualMapKeyValue, expectedMapValue, errorString );
|
assertEquals( actualMapKeyValue, expectedMapValue, buildErrorString( errorString, clazz ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void assertSuperClassRelationShipInMetamodel(Class<?> entityClass, Class<?> superEntityClass) {
|
public static void assertSuperClassRelationShipInMetamodel(Class<?> entityClass, Class<?> superEntityClass) {
|
||||||
|
@ -235,6 +253,18 @@ public class TestUtil {
|
||||||
return getFieldFromMetamodelFor( clazz, fieldName ) != null;
|
return getFieldFromMetamodelFor( clazz, fieldName ) != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String buildErrorString(String baseError, Class<?> clazz) {
|
||||||
|
StringBuilder builder = new StringBuilder();
|
||||||
|
builder.append( baseError );
|
||||||
|
builder.append( "\n" );
|
||||||
|
builder.append( "Source code for " );
|
||||||
|
builder.append( clazz.getName() );
|
||||||
|
builder.append( "_.java:" );
|
||||||
|
builder.append( "\n" );
|
||||||
|
builder.append( getMetaModelSourceAsString( clazz ) );
|
||||||
|
return builder.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private static Type getComponentType(Type actualType) {
|
private static Type getComponentType(Type actualType) {
|
||||||
if ( actualType instanceof Class ) {
|
if ( actualType instanceof Class ) {
|
||||||
Class<?> clazz = (Class<?>) actualType;
|
Class<?> clazz = (Class<?>) actualType;
|
||||||
|
@ -242,14 +272,15 @@ public class TestUtil {
|
||||||
return clazz.getComponentType();
|
return clazz.getComponentType();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
fail("Unexpected component type");
|
fail( "Unexpected component type" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( actualType instanceof GenericArrayType ) {
|
if ( actualType instanceof GenericArrayType ) {
|
||||||
return ( (GenericArrayType) actualType ).getGenericComponentType();
|
return ( (GenericArrayType) actualType ).getGenericComponentType();
|
||||||
} else {
|
}
|
||||||
fail("Unexpected component type");
|
else {
|
||||||
|
fail( "Unexpected component type" );
|
||||||
return null; // making the compiler happy
|
return null; // making the compiler happy
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,11 +26,11 @@ public class Boy {
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
private List nickNames;
|
private List<String> nickNames;
|
||||||
|
|
||||||
private Superhero favoriteSuperhero;
|
private Superhero favoriteSuperhero;
|
||||||
|
|
||||||
private List<Superhero> knowsHeros;
|
private List<Superhero> knowsHeroes;
|
||||||
|
|
||||||
private List<Superhero> savedBy;
|
private List<Superhero> savedBy;
|
||||||
|
|
||||||
|
@ -50,12 +50,12 @@ public class Boy {
|
||||||
this.favoriteSuperhero = favoriteSuperhero;
|
this.favoriteSuperhero = favoriteSuperhero;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Superhero> getKnowsHeros() {
|
public List<Superhero> getKnowsHeroes() {
|
||||||
return knowsHeros;
|
return knowsHeroes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setKnowsHeros(List<Superhero> knowsHeros) {
|
public void setKnowsHeroes(List<Superhero> knowsHeroes) {
|
||||||
this.knowsHeros = knowsHeros;
|
this.knowsHeroes = knowsHeroes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getId() {
|
public long getId() {
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.testng.annotations.Test;
|
||||||
|
|
||||||
import org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor;
|
import org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor;
|
||||||
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
import org.hibernate.jpamodelgen.test.util.CompilationTest;
|
||||||
|
import org.hibernate.jpamodelgen.test.util.TestForIssue;
|
||||||
import org.hibernate.jpamodelgen.test.util.TestUtil;
|
import org.hibernate.jpamodelgen.test.util.TestUtil;
|
||||||
|
|
||||||
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
|
import static org.hibernate.jpamodelgen.test.util.TestUtil.assertAttributeTypeInMetaModelFor;
|
||||||
|
@ -45,10 +46,8 @@ public class XmlMappingTest extends CompilationTest {
|
||||||
assertPresenceOfFieldInMetamodelFor( Building.class, "address", "address field should exist" );
|
assertPresenceOfFieldInMetamodelFor( Building.class, "address", "address field should exist" );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-17
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-17")
|
||||||
public void testTargetEntityOnOneToOne() {
|
public void testTargetEntityOnOneToOne() {
|
||||||
assertMetamodelClassGeneratedFor( Boy.class );
|
assertMetamodelClassGeneratedFor( Boy.class );
|
||||||
assertPresenceOfFieldInMetamodelFor( Boy.class, "favoriteSuperhero", "favoriteSuperhero field should exist" );
|
assertPresenceOfFieldInMetamodelFor( Boy.class, "favoriteSuperhero", "favoriteSuperhero field should exist" );
|
||||||
|
@ -57,22 +56,18 @@ public class XmlMappingTest extends CompilationTest {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-17
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-17")
|
||||||
public void testTargetEntityOnOneToMany() {
|
public void testTargetEntityOnOneToMany() {
|
||||||
assertMetamodelClassGeneratedFor( Boy.class );
|
assertMetamodelClassGeneratedFor( Boy.class );
|
||||||
assertPresenceOfFieldInMetamodelFor( Boy.class, "knowsHeros", "knowsHeros field should exist" );
|
assertPresenceOfFieldInMetamodelFor( Boy.class, "knowsHeroes", "knowsHeroes field should exist" );
|
||||||
assertAttributeTypeInMetaModelFor(
|
assertAttributeTypeInMetaModelFor(
|
||||||
Boy.class, "knowsHeros", FakeHero.class, "target entity overridden in xml"
|
Boy.class, "knowsHeroes", FakeHero.class, "target entity overridden in xml"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* METAGEN-17
|
|
||||||
*/
|
|
||||||
@Test
|
@Test
|
||||||
|
@TestForIssue(jiraKey = "METAGEN-17")
|
||||||
public void testTargetEntityOnManyToMany() {
|
public void testTargetEntityOnManyToMany() {
|
||||||
assertMetamodelClassGeneratedFor( Boy.class );
|
assertMetamodelClassGeneratedFor( Boy.class );
|
||||||
assertPresenceOfFieldInMetamodelFor( Boy.class, "savedBy", "savedBy field should exist" );
|
assertPresenceOfFieldInMetamodelFor( Boy.class, "savedBy", "savedBy field should exist" );
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
<attributes>
|
<attributes>
|
||||||
<id name="id"/>
|
<id name="id"/>
|
||||||
<basic name="name"/>
|
<basic name="name"/>
|
||||||
<one-to-many name="knowsHeros" target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
|
<one-to-many name="knowsHeroes" target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
|
||||||
<one-to-one name="favoriteSuperhero" target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
|
<one-to-one name="favoriteSuperhero" target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
|
||||||
<many-to-many name="savedBy" target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
|
<many-to-many name="savedBy" target-entity="org.hibernate.jpamodelgen.test.xmlmapped.FakeHero"/>
|
||||||
<element-collection name="nickNames" target-class="java.lang.String"/>
|
<element-collection name="nickNames" target-class="java.lang.String"/>
|
||||||
|
|
Loading…
Reference in New Issue