From 2bfe011efbeab5929cb4bb33194029f208bd043b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20Westk=C3=A4mper?= Date: Thu, 17 Sep 2015 21:31:19 +0300 Subject: [PATCH] Improve property escaping --- .../querydsl/apt/domain/Properties4Test.java | 22 +++++++++++++++++++ .../java/com/querydsl/codegen/Property.java | 12 ++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java diff --git a/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java new file mode 100644 index 000000000..c0ebcc9c3 --- /dev/null +++ b/querydsl-apt/src/test/java/com/querydsl/apt/domain/Properties4Test.java @@ -0,0 +1,22 @@ +package com.querydsl.apt.domain; + +import static org.junit.Assert.assertEquals; + +import javax.persistence.MappedSuperclass; + +import org.junit.Test; + +public class Properties4Test extends AbstractTest { + + @MappedSuperclass + public abstract static class Naming { + + public abstract boolean is8FRecord(); + + } + + @Test + public void test() { + assertEquals("8FRecord", QProperties4Test_Naming.naming._8FRecord.getMetadata().getName()); + } +} diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java index 094e8922e..3334a52e6 100644 --- a/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java +++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/Property.java @@ -51,8 +51,7 @@ public final class Property implements Comparable { public Property(EntityType declaringType, String name, Type type, List inits, boolean inherited) { - this(declaringType, name, JavaSyntaxUtils.isReserved(name) ? (name + "$") : name, type, - inits, inherited); + this(declaringType, name, escapeName(name), type, inits, inherited); } public Property(EntityType declaringType, String name, String escapedName, Type type, @@ -65,6 +64,15 @@ public final class Property implements Comparable { this.inherited = inherited; } + private static String escapeName(String name) { + if (JavaSyntaxUtils.isReserved(name)) { + name = name + "$"; + } else if (!Character.isJavaIdentifierStart(name.charAt(0))) { + name = "_" + name; + } + return name; + } + public void addAnnotation(Annotation annotation) { annotations.put(annotation.annotationType(), annotation); }