You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2019/03/01 07:28:09 UTC
[cayenne] branch master updated: CAY-2544 Possible name clash of
ivar and property name in generated class
This is an automated email from the ASF dual-hosted git repository.
ntimofeev pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cayenne.git
The following commit(s) were added to refs/heads/master by this push:
new 653ba7a CAY-2544 Possible name clash of ivar and property name in generated class
653ba7a is described below
commit 653ba7ad454974db3c026d44382ddfc2d3ea42f0
Author: Nikita Timofeev <st...@gmail.com>
AuthorDate: Fri Mar 1 10:28:05 2019 +0300
CAY-2544 Possible name clash of ivar and property name in generated class
---
RELEASE-NOTES.txt | 1 +
.../main/java/org/apache/cayenne/gen/PropertyUtils.java | 17 +++++++++++++++--
2 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt
index f792a72..62aad0a 100644
--- a/RELEASE-NOTES.txt
+++ b/RELEASE-NOTES.txt
@@ -29,6 +29,7 @@ Bug Fixes:
CAY-2332 Property API: unable to use eq() and in() methods for toMany relationships
CAY-2509 Result of resolving lazily faulted relationships can be out-of-date
+CAY-2544 Possible name clash of ivar and property name in generated class
CAY-2547 CayenneDataObject serialization issue
----------------------------------
diff --git a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/PropertyUtils.java b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/PropertyUtils.java
index 624f42f..06e0422 100644
--- a/cayenne-cgen/src/main/java/org/apache/cayenne/gen/PropertyUtils.java
+++ b/cayenne-cgen/src/main/java/org/apache/cayenne/gen/PropertyUtils.java
@@ -48,6 +48,7 @@ import org.apache.cayenne.map.Embeddable;
import org.apache.cayenne.map.EmbeddableAttribute;
import org.apache.cayenne.map.EmbeddedAttribute;
import org.apache.cayenne.map.ObjAttribute;
+import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
/**
@@ -56,6 +57,7 @@ import org.apache.cayenne.map.ObjRelationship;
public class PropertyUtils {
private static final String PK_PROPERTY_SUFFIX = "_PK_PROPERTY";
+ private static final char DUPLICATE_NAME_SUFFIX = '_';
private static final Map<String, String> FACTORY_METHODS = new HashMap<>();
static {
@@ -164,7 +166,7 @@ public class PropertyUtils {
return String.format("public static final %s<%s> %s = PropertyFactory.%s(ExpressionFactory.dbPathExp(\"%s\"), %s.class);",
importUtils.formatJavaType(propertyType),
attributeType,
- utils.capitalizedAsConstant(attribute.getName() + PK_PROPERTY_SUFFIX),
+ utils.capitalizedAsConstant(attribute.getName()) + PK_PROPERTY_SUFFIX,
propertyFactoryMethod,
attribute.getName(),
attributeType
@@ -182,13 +184,24 @@ public class PropertyUtils {
return String.format("public static final %s<%s> %s = %s(\"%s\", %s.class);",
importUtils.formatJavaType(propertyDescriptor.getPropertyType()),
attributeType,
- utils.capitalizedAsConstant(attribute.getName()),
+ generatePropertyName(attribute),
propertyDescriptor.getPropertyFactoryMethod(),
attribute.getName(),
attributeType
);
}
+ protected String generatePropertyName(ObjAttribute attribute) {
+ StringUtils utils = StringUtils.getInstance();
+ ObjEntity entity = attribute.getEntity();
+ String name = utils.capitalizedAsConstant(attribute.getName());
+ // ensure that final name is unique
+ while(entity.getAttribute(name) != null) {
+ name = name + DUPLICATE_NAME_SUFFIX;
+ }
+ return name;
+ }
+
public String propertyDefinition(ObjAttribute attribute) throws ClassNotFoundException {
return propertyDefinition(attribute, false);
}