From 11e25e323eea0d1145679fc16ae6a96e2e4fe91a Mon Sep 17 00:00:00 2001 From: Mathieu Boretti Date: Mon, 18 May 2020 23:01:53 +0200 Subject: [PATCH 1/4] Issue #285 - Add generation of METADATA --- ...ersAnnotatedElementFieldMatcherMirror.java | 23 +++++++++++++++++++ ...rovidesMatchersAnnotatedElementMirror.java | 4 +++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java index 0f3849cdb..9d36f3904 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java @@ -32,6 +32,7 @@ import javax.lang.model.element.TypeElement; +import ch.powerunit.extensions.matchers.common.ListJoining; import ch.powerunit.extensions.matchers.provideprocessor.fields.AbstractFieldDescription; import ch.powerunit.extensions.matchers.provideprocessor.fields.FieldDescriptionMetaData; import ch.powerunit.extensions.matchers.provideprocessor.fields.IgoreFieldDescription; @@ -92,4 +93,26 @@ public GeneratedMatcher asXml() { return gm; } + public String generateMetadata() { + // @formatter:off + return "\n\n" + + " // ---------------------------------------------------------------------------\n" + + " // METADATA\n\n" + + " /**\n" + + " * Metadata regarding this matcher.\n" + + " */\n" + + " public static final Metadata METADATA = new Metadata();\n\n" + + " public static final class Metadata {\n\n" + + " private Metadata() {}\n\n" + + " public static final String ANNOTATION_PROCESSOR_VERSION = \"" + getClass().getPackage().getImplementationVersion() + "\";\n\n" + + " public static final String SOURCE_CLASS_NAME = \"" + getFullyQualifiedNameOfClassAnnotatedWithProvideMatcherWithGeneric() + "\";\n\n" + + " public static final Class<"+getFullyQualifiedNameOfClassAnnotated()+"> SOURCE_CLASS = " + getFullyQualifiedNameOfClassAnnotated() + ".class;\n\n" + + " public static final String SOURCE_PARENT_CLASS_NAME = " + fullyQualifiedNameOfSuperClassOfClassAnnotated.map(n->"\""+n+"\"").orElse("null") + ";\n\n" + + " public static final String[] FIELD_NAMES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldName()+"\"", ", ").asString(fields) + " };\n\n" + + " public static final String[] FIELD_TYPES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldType()+"\"", ", ").asString(fields) + " };\n\n" + + " public static final String[] FIELD_ACCESSORS = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldAccessor()+"\"", ", ").asString(fields) + " };\n\n" + + " }\n"; + // @formatter:on + } + } diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java index 75565fb06..10ba73280 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java @@ -81,7 +81,6 @@ public Collection process() { jfo -> new PrintWriter(jfo.openWriter()), wjfo -> { wjfo.println("package " + getPackageNameOfGeneratedClass() + ";"); wjfo.println(); - wjfo.println("// Generated by version " + getClass().getPackage().getImplementationVersion()); wjfo.println(generateMainJavaDoc()); wjfo.println(generateGeneratedAnnotation(ProvidesMatchersAnnotationsProcessor.class, annotation.get().comments())); @@ -97,6 +96,9 @@ public Collection process() { wjfo.println(); Collection tmp = generateDSLStarter(); tmp.stream().map(m -> addPrefix(" ", m.asStaticImplementation())).forEach(wjfo::println); + wjfo.println(); + wjfo.println(); + wjfo.println(generateMetadata()); wjfo.println("}"); return tmp; }, e -> traceErrorAndDump(getMessager(), getFiler(), e, te)); From b7a440c530e91677031e29fe89160396c69e44df Mon Sep 17 00:00:00 2001 From: Mathieu Boretti Date: Tue, 19 May 2020 09:17:09 +0200 Subject: [PATCH 2/4] Issue #285 - Add ignored field detail --- .../ProvidesMatchersAnnotatedElementFieldMatcherMirror.java | 1 + .../extensions/matchers/samples/iterable/PojoWithStringSet.java | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java index 9d36f3904..e3c45c0ee 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java @@ -111,6 +111,7 @@ public String generateMetadata() { + " public static final String[] FIELD_NAMES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldName()+"\"", ", ").asString(fields) + " };\n\n" + " public static final String[] FIELD_TYPES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldType()+"\"", ", ").asString(fields) + " };\n\n" + " public static final String[] FIELD_ACCESSORS = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldAccessor()+"\"", ", ").asString(fields) + " };\n\n" + + " public static final boolean[] FIELD_IGNORED = new boolean[]{ " +ListJoining.joinWithMapperAndDelimiter(f->Boolean.toString(f instanceof IgoreFieldDescription), ", ").asString(fields) + " };\n\n" + " }\n"; // @formatter:on } diff --git a/src/test/java/ch/powerunit/extensions/matchers/samples/iterable/PojoWithStringSet.java b/src/test/java/ch/powerunit/extensions/matchers/samples/iterable/PojoWithStringSet.java index 087405302..3fe25103e 100644 --- a/src/test/java/ch/powerunit/extensions/matchers/samples/iterable/PojoWithStringSet.java +++ b/src/test/java/ch/powerunit/extensions/matchers/samples/iterable/PojoWithStringSet.java @@ -19,7 +19,6 @@ */ package ch.powerunit.extensions.matchers.samples.iterable; -import java.util.List; import java.util.Objects; import java.util.Set; From f836acff35590d372e068481ddd19dac460fc618 Mon Sep 17 00:00:00 2001 From: Mathieu Boretti Date: Tue, 19 May 2020 10:04:54 +0200 Subject: [PATCH 3/4] Issue #285 - Revue --- .../matchers/common/AbstractRoundMirrorSupport.java | 4 ++++ ...desMatchersAnnotatedElementFieldMatcherMirror.java | 11 ++++++----- .../ProvidesMatchersAnnotatedElementMirror.java | 10 +++------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/src/main/java/ch/powerunit/extensions/matchers/common/AbstractRoundMirrorSupport.java b/src/main/java/ch/powerunit/extensions/matchers/common/AbstractRoundMirrorSupport.java index df2894307..163171a39 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/common/AbstractRoundMirrorSupport.java +++ b/src/main/java/ch/powerunit/extensions/matchers/common/AbstractRoundMirrorSupport.java @@ -56,5 +56,9 @@ default boolean isAssignableWithErasure(TypeElement fromField, TypeMirror compar return fromField != null && getProcessingEnv().getTypeUtils().isAssignable(fromField.asType(), getProcessingEnv().getTypeUtils().erasure(compareWith)); } + + default String getAnnotationProcessorVersion() { + return getClass().getPackage().getImplementationVersion(); + } } diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java index e3c45c0ee..503019bf0 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java @@ -32,6 +32,7 @@ import javax.lang.model.element.TypeElement; +import ch.powerunit.extensions.matchers.common.CommonUtils; import ch.powerunit.extensions.matchers.common.ListJoining; import ch.powerunit.extensions.matchers.provideprocessor.fields.AbstractFieldDescription; import ch.powerunit.extensions.matchers.provideprocessor.fields.FieldDescriptionMetaData; @@ -104,13 +105,13 @@ public String generateMetadata() { + " public static final Metadata METADATA = new Metadata();\n\n" + " public static final class Metadata {\n\n" + " private Metadata() {}\n\n" - + " public static final String ANNOTATION_PROCESSOR_VERSION = \"" + getClass().getPackage().getImplementationVersion() + "\";\n\n" + + " public static final String ANNOTATION_PROCESSOR_VERSION = \"" + getAnnotationProcessorVersion() + "\";\n\n" + " public static final String SOURCE_CLASS_NAME = \"" + getFullyQualifiedNameOfClassAnnotatedWithProvideMatcherWithGeneric() + "\";\n\n" + " public static final Class<"+getFullyQualifiedNameOfClassAnnotated()+"> SOURCE_CLASS = " + getFullyQualifiedNameOfClassAnnotated() + ".class;\n\n" - + " public static final String SOURCE_PARENT_CLASS_NAME = " + fullyQualifiedNameOfSuperClassOfClassAnnotated.map(n->"\""+n+"\"").orElse("null") + ";\n\n" - + " public static final String[] FIELD_NAMES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldName()+"\"", ", ").asString(fields) + " };\n\n" - + " public static final String[] FIELD_TYPES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldType()+"\"", ", ").asString(fields) + " };\n\n" - + " public static final String[] FIELD_ACCESSORS = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->"\""+f.getFieldAccessor()+"\"", ", ").asString(fields) + " };\n\n" + + " public static final String SOURCE_PARENT_CLASS_NAME = " + fullyQualifiedNameOfSuperClassOfClassAnnotated.map(CommonUtils::toJavaSyntax).orElse("null") + ";\n\n" + + " public static final String[] FIELD_NAMES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->CommonUtils.toJavaSyntax(f.getFieldName()), ", ").asString(fields) + " };\n\n" + + " public static final String[] FIELD_TYPES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->CommonUtils.toJavaSyntax(f.getFieldType()), ", ").asString(fields) + " };\n\n" + + " public static final String[] FIELD_ACCESSORS = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->CommonUtils.toJavaSyntax(f.getFieldAccessor()), ", ").asString(fields) + " };\n\n" + " public static final boolean[] FIELD_IGNORED = new boolean[]{ " +ListJoining.joinWithMapperAndDelimiter(f->Boolean.toString(f instanceof IgoreFieldDescription), ", ").asString(fields) + " };\n\n" + " }\n"; // @formatter:on diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java index 10ba73280..1a3d7f89a 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java @@ -79,15 +79,12 @@ public Collection process() { return processFileWithIOExceptionAndResult( () -> getFiler().createSourceFile(getFullyQualifiedNameOfGeneratedClass(), te), jfo -> new PrintWriter(jfo.openWriter()), wjfo -> { - wjfo.println("package " + getPackageNameOfGeneratedClass() + ";"); - wjfo.println(); + wjfo.println("package " + getPackageNameOfGeneratedClass() + ";\n"); wjfo.println(generateMainJavaDoc()); wjfo.println(generateGeneratedAnnotation(ProvidesMatchersAnnotationsProcessor.class, annotation.get().comments())); - wjfo.println("public final class " + simpleName + " {"); - wjfo.println(); - wjfo.println(" private " + simpleName + "() {}"); - wjfo.println(); + wjfo.println("public final class " + simpleName + " {\n"); + wjfo.println(" private " + simpleName + "() {}\n"); wjfo.println(generateMatchers()); wjfo.println(); wjfo.println(generatePublicInterface()); @@ -97,7 +94,6 @@ public Collection process() { Collection tmp = generateDSLStarter(); tmp.stream().map(m -> addPrefix(" ", m.asStaticImplementation())).forEach(wjfo::println); wjfo.println(); - wjfo.println(); wjfo.println(generateMetadata()); wjfo.println("}"); return tmp; From 40e0d9e387e1c12e3756223f837243d3d129115b Mon Sep 17 00:00:00 2001 From: Mathieu Boretti Date: Tue, 19 May 2020 10:19:39 +0200 Subject: [PATCH 4/4] Issue #285 - Clear code --- ...MatchersAnnotatedElementFieldMatcherMirror.java | 14 ++++++-------- .../fields/FieldDescriptionMetaData.java | 9 ++++++++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java index 503019bf0..ee176644c 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementFieldMatcherMirror.java @@ -103,16 +103,14 @@ public String generateMetadata() { + " * Metadata regarding this matcher.\n" + " */\n" + " public static final Metadata METADATA = new Metadata();\n\n" + +" public static final class FieldMetadata {\n public final String NAME, TYPE, ACCESSOR;\n public final boolean IGNORED;\n private FieldMetadata(String name, String type, String accessor, boolean ignored) {\n NAME=name; TYPE=type; ACCESSOR=accessor; IGNORED=ignored;\n }\n }\n\n" + " public static final class Metadata {\n\n" + " private Metadata() {}\n\n" - + " public static final String ANNOTATION_PROCESSOR_VERSION = \"" + getAnnotationProcessorVersion() + "\";\n\n" - + " public static final String SOURCE_CLASS_NAME = \"" + getFullyQualifiedNameOfClassAnnotatedWithProvideMatcherWithGeneric() + "\";\n\n" - + " public static final Class<"+getFullyQualifiedNameOfClassAnnotated()+"> SOURCE_CLASS = " + getFullyQualifiedNameOfClassAnnotated() + ".class;\n\n" - + " public static final String SOURCE_PARENT_CLASS_NAME = " + fullyQualifiedNameOfSuperClassOfClassAnnotated.map(CommonUtils::toJavaSyntax).orElse("null") + ";\n\n" - + " public static final String[] FIELD_NAMES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->CommonUtils.toJavaSyntax(f.getFieldName()), ", ").asString(fields) + " };\n\n" - + " public static final String[] FIELD_TYPES = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->CommonUtils.toJavaSyntax(f.getFieldType()), ", ").asString(fields) + " };\n\n" - + " public static final String[] FIELD_ACCESSORS = new String[]{ " +ListJoining.joinWithMapperAndDelimiter(f->CommonUtils.toJavaSyntax(f.getFieldAccessor()), ", ").asString(fields) + " };\n\n" - + " public static final boolean[] FIELD_IGNORED = new boolean[]{ " +ListJoining.joinWithMapperAndDelimiter(f->Boolean.toString(f instanceof IgoreFieldDescription), ", ").asString(fields) + " };\n\n" + + " public final String ANNOTATION_PROCESSOR_VERSION = \"" + getAnnotationProcessorVersion() + "\";\n\n" + + " public final String SOURCE_CLASS_NAME = \"" + getFullyQualifiedNameOfClassAnnotatedWithProvideMatcherWithGeneric() + "\";\n\n" + + " public final Class<"+getFullyQualifiedNameOfClassAnnotated()+"> SOURCE_CLASS = " + getFullyQualifiedNameOfClassAnnotated() + ".class;\n\n" + + " public final String SOURCE_PARENT_CLASS_NAME = " + fullyQualifiedNameOfSuperClassOfClassAnnotated.map(CommonUtils::toJavaSyntax).orElse("null") + ";\n\n" + + " public final FieldMetadata[] FIELDS = new FieldMetadata[]{ " +ListJoining.joinWithMapperAndDelimiter(f->f.generateMetadata("FieldMetadata"), ", ").asString(fields) + " };\n\n" + " }\n"; // @formatter:on } diff --git a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/fields/FieldDescriptionMetaData.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/fields/FieldDescriptionMetaData.java index e9e548f6e..9ec76542a 100644 --- a/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/fields/FieldDescriptionMetaData.java +++ b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/fields/FieldDescriptionMetaData.java @@ -26,6 +26,7 @@ import javax.lang.model.type.DeclaredType; import javax.lang.model.type.TypeMirror; +import ch.powerunit.extensions.matchers.common.CommonUtils; import ch.powerunit.extensions.matchers.provideprocessor.ProvidesMatchersAnnotatedElementData; import ch.powerunit.extensions.matchers.provideprocessor.RoundMirror; import ch.powerunit.extensions.matchers.provideprocessor.xml.GeneratedMatcherField; @@ -35,7 +36,7 @@ public abstract class FieldDescriptionMetaData extends AbstractFieldDescriptionC public static final String SEE_TEXT_FOR_IS_MATCHER = "org.hamcrest.Matchers#is(java.lang.Object)"; public static final String SEE_TEXT_FOR_HAMCREST_MATCHER = "org.hamcrest.Matchers The main class from hamcrest that provides default matchers."; public static final String MATCHERS = "org.hamcrest.Matchers"; - + protected final String generic; protected final String defaultReturnMethod; protected final String fullyQualifiedNameMatcherInSameRound; @@ -151,4 +152,10 @@ public GeneratedMatcherField asGeneratedMatcherField() { return gmf; } + public String generateMetadata(String className) { + return "new " + className + "(" + CommonUtils.toJavaSyntax(getFieldName()) + "," + + CommonUtils.toJavaSyntax(getFieldType()) + "," + CommonUtils.toJavaSyntax(getFieldAccessor()) + "," + + Boolean.toString(this instanceof IgoreFieldDescription) + ")"; + } + }