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 0f3849cdb..ee176644c 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,8 @@ 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; import ch.powerunit.extensions.matchers.provideprocessor.fields.IgoreFieldDescription; @@ -92,4 +94,25 @@ 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 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 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/ProvidesMatchersAnnotatedElementMirror.java b/src/main/java/ch/powerunit/extensions/matchers/provideprocessor/ProvidesMatchersAnnotatedElementMirror.java index 75565fb06..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,16 +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("// Generated by version " + getClass().getPackage().getImplementationVersion()); + 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,6 +93,8 @@ public Collection process() { wjfo.println(); Collection tmp = generateDSLStarter(); tmp.stream().map(m -> addPrefix(" ", m.asStaticImplementation())).forEach(wjfo::println); + wjfo.println(); + wjfo.println(generateMetadata()); wjfo.println("}"); return tmp; }, e -> traceErrorAndDump(getMessager(), getFiler(), e, te)); 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) + ")"; + } + } 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;