package com.sora.util.akatsuki; import com.google.common.base.Objects; import com.squareup.javapoet.AnnotationSpec; import com.squareup.javapoet.FieldSpec.Builder; public class ArgTestField extends TestField { private boolean skip; private boolean optional; public ArgTestField(Class<?> clazz, Class<?>... parameters) { super(clazz, parameters); } public ArgTestField(Class<?> clazz, String name, Class<?>... parameters) { super(clazz, name, parameters); } public ArgTestField(Class<?> clazz, String name, String initializer, Class<?>... parameters) { super(clazz, name, initializer, parameters); } public boolean skip() { return skip; } public ArgTestField skip(boolean skip) { this.skip = skip; return this; } public boolean optional() { return optional; } public ArgTestField optional(boolean optional) { this.optional = optional; return this; } @Override protected Builder fieldSpecBuilder() { final Builder builder = super.fieldSpecBuilder(); final AnnotationSpec.Builder annotationBuilder = AnnotationSpec.builder(Arg.class); if (skip) { annotationBuilder.addMember("skip", "$L", true); } if (optional) { annotationBuilder.addMember("optional", "$L", true); } builder.addAnnotation(annotationBuilder.build()); return builder; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; ArgTestField argField = (ArgTestField) o; return Objects.equal(skip, argField.skip) && Objects.equal(optional, argField.optional); } @Override public int hashCode() { return Objects.hashCode(super.hashCode(), skip, optional); } }