From a52d9a774dc74c9d4c99d2820300cfde97126457 Mon Sep 17 00:00:00 2001 From: Ruben Dijkstra Date: Thu, 26 Mar 2015 21:24:35 +0100 Subject: [PATCH] Add fix for extending external types --- .../apt/com/mysema/query/ExampleEntity2.java | 9 ++++++ .../com/mysema/query/IntegerExtensions.java | 13 ++++++++ .../query/apt/IntegerExtensionsTest.java | 30 +++++++++++++++++++ .../query/codegen/EntitySerializer.java | 3 +- 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 querydsl-apt/src/test/apt/com/mysema/query/ExampleEntity2.java create mode 100644 querydsl-apt/src/test/apt/com/mysema/query/IntegerExtensions.java create mode 100644 querydsl-apt/src/test/java/com/mysema/query/apt/IntegerExtensionsTest.java diff --git a/querydsl-apt/src/test/apt/com/mysema/query/ExampleEntity2.java b/querydsl-apt/src/test/apt/com/mysema/query/ExampleEntity2.java new file mode 100644 index 000000000..d27bbd770 --- /dev/null +++ b/querydsl-apt/src/test/apt/com/mysema/query/ExampleEntity2.java @@ -0,0 +1,9 @@ +package com.mysema.query; + +import com.mysema.query.annotations.QueryEntity; +import com.mysema.query.domain.AbstractEntity; + +@QueryEntity +public class ExampleEntity2 extends AbstractEntity { +// id inherited +} diff --git a/querydsl-apt/src/test/apt/com/mysema/query/IntegerExtensions.java b/querydsl-apt/src/test/apt/com/mysema/query/IntegerExtensions.java new file mode 100644 index 000000000..58ae3327d --- /dev/null +++ b/querydsl-apt/src/test/apt/com/mysema/query/IntegerExtensions.java @@ -0,0 +1,13 @@ +package com.mysema.query; + +import com.mysema.query.annotations.QueryDelegate; +import com.mysema.query.types.expr.NumberExpression; +import com.mysema.query.types.path.NumberPath; + +public class IntegerExtensions { + + @QueryDelegate(Integer.class) + public static NumberExpression difference(NumberPath left, NumberExpression right) { + return right.subtract(left); + } +} diff --git a/querydsl-apt/src/test/java/com/mysema/query/apt/IntegerExtensionsTest.java b/querydsl-apt/src/test/java/com/mysema/query/apt/IntegerExtensionsTest.java new file mode 100644 index 000000000..ea1519751 --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/apt/IntegerExtensionsTest.java @@ -0,0 +1,30 @@ +package com.mysema.query.apt; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.List; + +import org.junit.Test; + +import com.google.common.base.Charsets; +import com.google.common.io.Files; + +public class IntegerExtensionsTest extends AbstractProcessorTest { + + private static final String packagePath = "src/test/apt/com/mysema/query/"; + + @Test + public void Process() throws IOException { + List sources = Arrays.asList( + new File(packagePath, "IntegerExtensions.java").getPath(), + new File(packagePath, "ExampleEntity2.java").getPath()); + process(QuerydslAnnotationProcessor.class, sources, "integerExtensions"); + String qtypeContent = Files.toString(new File("target/integerExtensions/com/mysema/query/QExampleEntity2.java"), Charsets.UTF_8); + //The superclass' id property is inherited, but can't be assigned to the custom QInteger + assertTrue(qtypeContent.contains("public final ext.java.lang.QInteger id = new ext.java.lang.QInteger(_super.id);")); + } + +} diff --git a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntitySerializer.java b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntitySerializer.java index d30818bf5..dc871ef3f 100644 --- a/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntitySerializer.java +++ b/querydsl-codegen/src/main/java/com/mysema/query/codegen/EntitySerializer.java @@ -652,7 +652,8 @@ public class EntitySerializer implements Serializer { writer.line("// inherited"); Supertype superType = model.getSuperType(); if (!superType.getEntityType().hasEntityFields()) { - writer.publicFinal(queryType, field.getEscapedName(),"_super." + field.getEscapedName()); + String value = NEW + writer.getRawName(queryType) + "(_super." + field.getEscapedName() + ")"; + writer.publicFinal(queryType, field.getEscapedName(), value); } else { writer.publicFinal(queryType, field.getEscapedName()); }