Added separator, pre-release and metada prefixes.

This commit is contained in:
Erik C. Thauvin 2019-04-01 01:51:18 -07:00
parent e8c00828f3
commit 45a90d1353
7 changed files with 207 additions and 35 deletions

View file

@ -39,6 +39,10 @@ package net.thauvin.erik.semver;
* @since 1.0 * @since 1.0
*/ */
public final class Constants { public final class Constants {
/**
* The default metadata prefix.
*/
public static final String DEFAULT_BUILDMETA_PREFIX = "+";
/** /**
* The default class name. * The default class name.
*/ */
@ -54,7 +58,7 @@ public final class Constants {
/** /**
* The default keys prefix. * The default keys prefix.
*/ */
public static final String DEFAULT_KEYS_PREFIX = "version." ; public static final String DEFAULT_KEYS_PREFIX = "version.";
/** /**
* The default Kotlin mustache template. * The default Kotlin mustache template.
*/ */
@ -71,6 +75,14 @@ public final class Constants {
* The default patch version. * The default patch version.
*/ */
public static final int DEFAULT_PATCH = 0; public static final int DEFAULT_PATCH = 0;
/**
* The default prerelease prefix.
*/
public static final String DEFAULT_PRERELEASE_PREFIX = "-";
/**
* The default version separator.
*/
public static final String DEFAULT_SEPARATOR = ".";
/** /**
* The default mustache template. * The default mustache template.
*/ */
@ -87,6 +99,10 @@ public final class Constants {
* The build metadata property key. * The build metadata property key.
*/ */
public static final String KEY_VERSION_BUILDMETA = "buildmeta"; public static final String KEY_VERSION_BUILDMETA = "buildmeta";
/**
* The build metadata prefix property key.
*/
public static final String KEY_VERSION_BUILDMETA_PREFIX = "buildmeta.prefix";
/** /**
* The major version property key. * The major version property key.
*/ */
@ -103,10 +119,18 @@ public final class Constants {
* The pre-release version property key. * The pre-release version property key.
*/ */
public static final String KEY_VERSION_PRERELEASE = "prerelease"; public static final String KEY_VERSION_PRERELEASE = "prerelease";
/**
* The pre-release prefix property key.
*/
public static final String KEY_VERSION_PRERELEASE_PREFIX = "prerelease.prefix";
/** /**
* The project property key. * The project property key.
*/ */
public static final String KEY_VERSION_PROJECT = "project"; public static final String KEY_VERSION_PROJECT = "project";
/**
* The version separator property key.
*/
public static final String KEY_VERSION_SEPARATOR = "separator";
/** /**
* The kotlin type. * The kotlin type.
*/ */
@ -119,7 +143,7 @@ public final class Constants {
* @throws UnsupportedOperationException if the constructor is called. * @throws UnsupportedOperationException if the constructor is called.
*/ */
private Constants() private Constants()
throws UnsupportedOperationException { throws UnsupportedOperationException {
throw new UnsupportedOperationException("Illegal constructor call."); throw new UnsupportedOperationException("Illegal constructor call.");
} }
} }

View file

@ -50,8 +50,14 @@ public @interface Version {
String buildMetaKey() default Constants.KEY_VERSION_BUILDMETA; String buildMetaKey() default Constants.KEY_VERSION_BUILDMETA;
String buildMetaPrefix() default Constants.DEFAULT_BUILDMETA_PREFIX;
String buildMetaPrefixKey() default Constants.KEY_VERSION_BUILDMETA_PREFIX;
String className() default Constants.DEFAULT_CLASS_NAME; String className() default Constants.DEFAULT_CLASS_NAME;
String keysPrefix() default Constants.DEFAULT_KEYS_PREFIX;
int major() default Constants.DEFAULT_MAJOR; int major() default Constants.DEFAULT_MAJOR;
String majorKey() default Constants.KEY_VERSION_MAJOR; String majorKey() default Constants.KEY_VERSION_MAJOR;
@ -60,25 +66,31 @@ public @interface Version {
String minorKey() default Constants.KEY_VERSION_MINOR; String minorKey() default Constants.KEY_VERSION_MINOR;
int patch() default Constants.DEFAULT_PATCH;
String packageName() default Constants.EMPTY; String packageName() default Constants.EMPTY;
int patch() default Constants.DEFAULT_PATCH;
String patchKey() default Constants.KEY_VERSION_PATCH; String patchKey() default Constants.KEY_VERSION_PATCH;
String preRelease() default Constants.EMPTY; String preRelease() default Constants.EMPTY;
String preReleaseKey() default Constants.KEY_VERSION_PRERELEASE; String preReleaseKey() default Constants.KEY_VERSION_PRERELEASE;
String preReleasePrefix() default Constants.DEFAULT_PRERELEASE_PREFIX;
String preReleasePrefixKey() default Constants.KEY_VERSION_PRERELEASE_PREFIX;
String project() default Constants.EMPTY; String project() default Constants.EMPTY;
String projectKey() default Constants.KEY_VERSION_PROJECT; String projectKey() default Constants.KEY_VERSION_PROJECT;
String properties() default Constants.EMPTY; String properties() default Constants.EMPTY;
String separator() default Constants.DEFAULT_SEPARATOR;
String separatorKey() default Constants.KEY_VERSION_SEPARATOR;
String template() default Constants.DEFAULT_JAVA_TEMPLATE; String template() default Constants.DEFAULT_JAVA_TEMPLATE;
String type() default Constants.DEFAULT_JAVA_TYPE; String type() default Constants.DEFAULT_JAVA_TYPE;
String keysPrefix() default Constants.DEFAULT_KEYS_PREFIX;
} }

View file

@ -42,13 +42,16 @@ public class VersionInfo {
private final long epoch = System.currentTimeMillis(); private final long epoch = System.currentTimeMillis();
private String buildMeta; private String buildMeta;
private String buildMetaPrefix;
private String className; private String className;
private int major; private int major;
private int minor; private int minor;
private String packageName; private String packageName;
private int patch; private int patch;
private String preRelease; private String preRelease;
private String preReleasePrefix;
private String project; private String project;
private String separator;
/** /**
@ -59,7 +62,10 @@ public class VersionInfo {
minor = Constants.DEFAULT_MINOR; minor = Constants.DEFAULT_MINOR;
patch = Constants.DEFAULT_PATCH; patch = Constants.DEFAULT_PATCH;
buildMeta = Constants.EMPTY; buildMeta = Constants.EMPTY;
buildMetaPrefix = Constants.DEFAULT_BUILDMETA_PREFIX;
preRelease = Constants.EMPTY; preRelease = Constants.EMPTY;
preReleasePrefix = Constants.DEFAULT_PRERELEASE_PREFIX;
separator = Constants.DEFAULT_SEPARATOR;
project = Constants.EMPTY; project = Constants.EMPTY;
className = Constants.DEFAULT_CLASS_NAME; className = Constants.DEFAULT_CLASS_NAME;
packageName = Constants.EMPTY; packageName = Constants.EMPTY;
@ -75,7 +81,10 @@ public class VersionInfo {
minor = version.minor(); minor = version.minor();
patch = version.patch(); patch = version.patch();
buildMeta = version.buildMeta(); buildMeta = version.buildMeta();
buildMetaPrefix = version.buildMetaPrefix();
preRelease = version.preRelease(); preRelease = version.preRelease();
preReleasePrefix = version.preReleasePrefix();
separator = version.separator();
project = version.project(); project = version.project();
className = version.className(); className = version.className();
packageName = version.packageName(); packageName = version.packageName();
@ -99,6 +108,24 @@ public class VersionInfo {
this.buildMeta = buildMeta; this.buildMeta = buildMeta;
} }
/**
* Returns the meta-data prefix.
*
* @return The meta-data prefix.
*/
public String getBuildMetaPrefix() {
return buildMetaPrefix;
}
/**
* Sets the meta-data prefix.
*
* @param buildMetaPrefix The meta-data prefix.
*/
public void setBuildMetaPrefix(String buildMetaPrefix) {
this.buildMetaPrefix = buildMetaPrefix;
}
/** /**
* Returns the class name. * Returns the class name.
* *
@ -216,6 +243,24 @@ public class VersionInfo {
this.preRelease = preRelease; this.preRelease = preRelease;
} }
/**
* Returns the pre-release prefix.
*
* @return The pre-release prefix.
*/
public String getPreReleasePrefix() {
return preReleasePrefix;
}
/**
* Sets the pre-release prefix.
*
* @param preReleasePrefix The new pre-release prefix.
*/
public void setPreReleasePrefix(String preReleasePrefix) {
this.preReleasePrefix = preReleasePrefix;
}
/** /**
* Returns the project name. * Returns the project name.
* *
@ -234,11 +279,29 @@ public class VersionInfo {
this.project = project; this.project = project;
} }
/**
* Returns the version separator.
*
* @return The version separator.
*/
public String getSeparator() {
return separator;
}
/**
* Setsthe version separtor.
*
* @param separator The new version separator.
*/
public void setSeparator(String separator) {
this.separator = separator;
}
/** /**
* Returns the full version string. * Returns the full version string.
* <p> * <p>
* Formatted as: * Formatted as:
* <blockquote><code>MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]</code></blockquote> * <blockquote><code>[MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE-PREFIX][PRERELEASE]][[BUILDMETA-PREFIX][BUILDMETA]]</code></blockquote>
* <p> * <p>
* For example: * For example:
* <ul> * <ul>
@ -251,12 +314,12 @@ public class VersionInfo {
* @return The version string. * @return The version string.
*/ */
public String getVersion() { public String getVersion() {
return Integer.toString(major) return major
+ '.' + separator
+ minor + minor
+ '.' + separator
+ patch + patch
+ (preRelease.length() > 0 ? '-' + preRelease : "") + (preRelease.length() > 0 ? preReleasePrefix + preRelease : "")
+ (buildMeta.length() > 0 ? '+' + buildMeta : ""); + (buildMeta.length() > 0 ? buildMetaPrefix + buildMeta : "");
} }
} }

View file

@ -94,8 +94,14 @@ public class VersionProcessor extends AbstractProcessor {
parseIntProperty(p, version.keysPrefix() + version.patchKey(), version.patch())); parseIntProperty(p, version.keysPrefix() + version.patchKey(), version.patch()));
versionInfo.setBuildMeta( versionInfo.setBuildMeta(
p.getProperty(version.keysPrefix() + version.buildMetaKey(), version.buildMeta())); p.getProperty(version.keysPrefix() + version.buildMetaKey(), version.buildMeta()));
versionInfo.setBuildMetaPrefix(
p.getProperty(version.keysPrefix() + version.buildMetaPrefixKey(), version.buildMetaPrefix()));
versionInfo.setPreRelease( versionInfo.setPreRelease(
p.getProperty(version.keysPrefix() + version.preReleaseKey(), version.preRelease())); p.getProperty(version.keysPrefix() + version.preReleaseKey(), version.preRelease()));
versionInfo.setPreReleasePrefix(
p.getProperty(version.keysPrefix() + version.preReleasePrefixKey(), version.preReleasePrefix()));
versionInfo.setSeparator(
p.getProperty(version.keysPrefix() + version.separatorKey(), version.separator()));
} }
} else { } else {
final String findOrRead; final String findOrRead;

View file

@ -12,11 +12,6 @@ import java.util.Date
* @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a> * @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a>
*/ */
object {{className}} { object {{className}} {
@JvmField
val PRERELEASE_PREFIX = "-"
@JvmField
val BUILDMEATA_PREFIX = "+"
@JvmField @JvmField
val PROJECT = "{{project}}" val PROJECT = "{{project}}"
@JvmField @JvmField
@ -30,13 +25,19 @@ object {{className}} {
@JvmField @JvmField
val PRERELEASE = "{{preRelease}}" val PRERELEASE = "{{preRelease}}"
@JvmField @JvmField
val PRERELEASE_PREFIX = "{{preReleasePrefix}}"
@JvmField
val BUILDMETA = "{{buildMeta}}" val BUILDMETA = "{{buildMeta}}"
@JvmField
val BUILDMEATA_PREFIX = "{{buildMetaPrefix}}"
@JvmField
val SEPARATOR = "{{separator}}"
/** /**
* The full version string formatted as [MAJOR].[MINOR].[PATCH]-[PRERELEASE]+[BUILDMETA] * The full version string formatted as [MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE_PREFIX][PRERELEASE]][[BUILDMETA_PREFIX][BUILDMETA]]
*/ */
@JvmField @JvmField
val VERSION = "$MAJOR.$MINOR.$PATCH" + preReleaseWithPrefix() + buildMetaWithPrefix() val VERSION = "$MAJOR$SEPARATOR$MINOR$SEPARATOR$PATCH" + preReleaseWithPrefix() + buildMetaWithPrefix()
/** /**
* Returns the pre-release version with prefix. * Returns the pre-release version with prefix.
@ -47,7 +48,7 @@ object {{className}} {
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun preReleaseWithPrefix(prefix: String = PRERELEASE_PREFIX): String { fun preReleaseWithPrefix(prefix: String = PRERELEASE_PREFIX): String {
return if (PRERELEASE.isNotEmpty() && prefix.isNotEmpty()) { return if (PRERELEASE.isNotEmpty()) {
"$prefix$PRERELEASE" "$prefix$PRERELEASE"
} else { } else {
PRERELEASE PRERELEASE
@ -63,10 +64,10 @@ object {{className}} {
@JvmStatic @JvmStatic
@JvmOverloads @JvmOverloads
fun buildMetaWithPrefix(prefix: String = BUILDMEATA_PREFIX): String { fun buildMetaWithPrefix(prefix: String = BUILDMEATA_PREFIX): String {
return if (BUILDMETA.isNotEmpty() && prefix.isNotEmpty()) { return if (BUILDMETA.isNotEmpty()) {
"$prefix$BUILDMETA" "$prefix$BUILDMETA"
} else { } else {
BUILDMETA BUILDMETA
} }
} }
} }

View file

@ -12,23 +12,23 @@ import java.util.Date;
* @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a> * @author <a href="https://github.com/ethauvin/semver">Semantic Version Annotation Processor</a>
*/ */
public final class {{className}} { public final class {{className}} {
public final static String PRERELEASE_PREFIX = "-";
public final static String BUILDMETA_PREFIX = "+";
public final static String PROJECT = "{{project}}"; public final static String PROJECT = "{{project}}";
public final static Date BUILDDATE = new Date({{epoch}}L); public final static Date BUILDDATE = new Date({{epoch}}L);
public final static int MAJOR = {{major}}; public final static int MAJOR = {{major}};
public final static int MINOR = {{minor}}; public final static int MINOR = {{minor}};
public final static int PATCH = {{patch}}; public final static int PATCH = {{patch}};
public final static String PRERELEASE = "{{preRelease}}"; public final static String PRERELEASE = "{{preRelease}}";
public final static String PRERELEASE_PREFIX = "{{preReleasePrefix}}";
public final static String BUILDMETA = "{{buildMeta}}"; public final static String BUILDMETA = "{{buildMeta}}";
public final static String BUILDMETA_PREFIX = "{{buildMetaPrefix}}";
public final static String SEPARATOR = "{{separator}}";
/** /**
* The full version string. * The full version string.
* <p> * <p>
* Formatted as: * Formatted as:
* <blockquote> * <blockquote>
* <code>MAJOR.MINOR.PATCH[-PRERELEASE][+BUILDMETADATA]</code> * <code>[MAJOR][SEPARATOR][MINOR][SEPARATOR][PATCH][[PRERELEASE_PREFIX][PRERELEASE]][[BUILDMETA_PREFIX][BUILDMETA]]</code>
* </blockquote> * </blockquote>
* <p> * <p>
* For example: * For example:
@ -39,10 +39,8 @@ public final class {{className}} {
* <li><code>1.0.0-alpha+001</code></li> * <li><code>1.0.0-alpha+001</code></li>
* </ul> * </ul>
*/ */
public final static String VERSION = Integer.toString(MAJOR) + '.' public final static String VERSION = Integer.toString(MAJOR) + SEPARATOR + Integer.toString(MINOR) + SEPARATOR
+ Integer.toString(MINOR) + '.' + Integer.toString(PATCH) + preReleaseWithPrefix() + buildMetaWithPrefix();
+ Integer.toString(PATCH)
+ preReleaseWithPrefix() + buildMetaWithPrefix();
/** /**
* Disables the default constructor. * Disables the default constructor.
@ -70,7 +68,7 @@ public final class {{className}} {
* @return The build metadata, if any. * @return The build metadata, if any.
*/ */
public static String buildMetaWithPrefix(final String prefix) { public static String buildMetaWithPrefix(final String prefix) {
if (BUILDMETA.length() > 0 && prefix.length() > 0) { if (BUILDMETA.length() > 0) {
return prefix + BUILDMETA; return prefix + BUILDMETA;
} else { } else {
return BUILDMETA; return BUILDMETA;
@ -93,10 +91,10 @@ public final class {{className}} {
* @return The pre-release version, if any. * @return The pre-release version, if any.
*/ */
public static String preReleaseWithPrefix(final String prefix) { public static String preReleaseWithPrefix(final String prefix) {
if (PRERELEASE.length() > 0 && prefix.length() > 0) { if (PRERELEASE.length() > 0) {
return prefix + PRERELEASE; return prefix + PRERELEASE;
} else { } else {
return PRERELEASE; return PRERELEASE;
} }
} }
} }

View file

@ -73,9 +73,28 @@ public class VersionInfoTest {
Assert.assertEquals(versionInfo.getVersion(), "3.2.1-beta+001", "getVersion(3.2.1-beta+001)"); Assert.assertEquals(versionInfo.getVersion(), "3.2.1-beta+001", "getVersion(3.2.1-beta+001)");
versionInfo.setPreReleasePrefix("+");
Assert.assertEquals(versionInfo.getVersion(), "3.2.1+beta+001", "getVersion(3.2.1+beta+001)");
versionInfo.setPreReleasePrefix("-");
versionInfo.setPreRelease(""); versionInfo.setPreRelease("");
Assert.assertEquals(versionInfo.getVersion(), "3.2.1+001", "getVersion(3.2.1+001)"); Assert.assertEquals(versionInfo.getVersion(), "3.2.1+001", "getVersion(3.2.1+001)");
versionInfo.setBuildMetaPrefix(".");
Assert.assertEquals(versionInfo.getVersion(), "3.2.1.001", "getVersion(3.2.1.001)");
versionInfo.setBuildMetaPrefix("+");
versionInfo.setSeparator("-");
Assert.assertEquals(versionInfo.getVersion(), "3-2-1+001", "getVersion(3-2-1+001)");
versionInfo.setSeparator(".");
} }
@Test @Test
@ -107,6 +126,19 @@ public class VersionInfoTest {
Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha+001", "getVersion(1.2.3-alpha+001)"); Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha+001", "getVersion(1.2.3-alpha+001)");
versionInfo.setBuildMeta("1");
versionInfo.setBuildMetaPrefix("");
Assert.assertEquals(versionInfo.getBuildMetaPrefix(), "", "getBuildMetaPrefix( )");
Assert.assertEquals(versionInfo.getVersion(), "1.2.3-alpha1", "getVersion(1.2.3-alpha1)");
versionInfo.setPreReleasePrefix(".");
Assert.assertEquals(versionInfo.getPreReleasePrefix(), ".", "getPreReleasePrefix(.)");
Assert.assertEquals(versionInfo.getVersion(), "1.2.3.alpha1", "getVersion(1.2.3.alpha1)");
versionInfo.setProject("My Example"); versionInfo.setProject("My Example");
Assert.assertEquals(versionInfo.getProject(), "My Example", "getProject(My Example)"); Assert.assertEquals(versionInfo.getProject(), "My Example", "getProject(My Example)");
@ -133,8 +165,14 @@ public class VersionInfoTest {
Assert.assertEquals(versionInfo.getPreRelease(), version.preRelease(), "getPreRelease(preRelease)"); Assert.assertEquals(versionInfo.getPreRelease(), version.preRelease(), "getPreRelease(preRelease)");
Assert.assertEquals(versionInfo.getPreReleasePrefix(), version.preReleasePrefix(),
"getPreReleasePrefix(preReleasePrefix)");
Assert.assertEquals(versionInfo.getBuildMeta(), version.buildMeta(), "getBuildMeta(buildMeta)"); Assert.assertEquals(versionInfo.getBuildMeta(), version.buildMeta(), "getBuildMeta(buildMeta)");
Assert.assertEquals(versionInfo.getBuildMetaPrefix(), version.buildMetaPrefix(),
"getBuildMetaPrefix(buildMetaPrefix)");
Assert.assertEquals(versionInfo.getPackageName(), version.packageName(), Assert.assertEquals(versionInfo.getPackageName(), version.packageName(),
"getPackageName(packageName)"); "getPackageName(packageName)");
@ -173,6 +211,16 @@ class VersionTest implements Version {
return "build.meta"; return "build.meta";
} }
@Override
public String buildMetaPrefix() {
return "+";
}
@Override
public String buildMetaPrefixKey() {
return "build.meta.prefix";
}
@Override @Override
public String className() { public String className() {
return "MyTest"; return "MyTest";
@ -228,6 +276,16 @@ class VersionTest implements Version {
return "build.prerelease"; return "build.prerelease";
} }
@Override
public String preReleasePrefix() {
return "-";
}
@Override
public String preReleasePrefixKey() {
return "build.prerelase.prefix";
}
@Override @Override
public String project() { public String project() {
return "My Test Project"; return "My Test Project";
@ -243,6 +301,16 @@ class VersionTest implements Version {
return "test.properties"; return "test.properties";
} }
@Override
public String separator() {
return ".";
}
@Override
public String separatorKey() {
return "build.separator";
}
@Override @Override
public String template() { public String template() {
return "myversion.mustache"; return "myversion.mustache";