From 13dec4f063b37a4b8d3acbbc3e6add9b246fbf07 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Fri, 14 Apr 2017 16:29:43 -0700 Subject: [PATCH] Added support for generating koltin source file. --- .../net/thauvin/erik/semver/Constants.java | 20 ++-- .../java/net/thauvin/erik/semver/Version.java | 2 + .../thauvin/erik/semver/VersionProcessor.java | 18 +++- src/main/resources/version.vm | 96 +++++++++++-------- 4 files changed, 79 insertions(+), 57 deletions(-) diff --git a/src/main/java/net/thauvin/erik/semver/Constants.java b/src/main/java/net/thauvin/erik/semver/Constants.java index 25ada5d..a9063dd 100644 --- a/src/main/java/net/thauvin/erik/semver/Constants.java +++ b/src/main/java/net/thauvin/erik/semver/Constants.java @@ -43,62 +43,58 @@ public final class Constants { * The default class name. */ public static final String DEFAULT_CLASS_NAME = "GeneratedVersion"; - + /** + * The default java type. + **/ + public static final String DEFAULT_JAVA_TYPE = "java"; /** * The default major version. */ public static final int DEFAULT_MAJOR = 1; - /** * The default minor version. */ public static final int DEFAULT_MINOR = 0; - /** * The default patch version. */ public static final int DEFAULT_PATCH = 0; - /** * The default Velocity template. */ public static final String DEFAULT_TEMPLATE = "version.vm"; - /** * The empty string. */ public static final String EMPTY = ""; - /** * The build metadata property key. */ public static final String KEY_VERSION_BUILDMETA = "version.buildmeta"; - /** * The major version property key. */ public static final String KEY_VERSION_MAJOR = "version.major"; - /** * The minor version property key. */ public static final String KEY_VERSION_MINOR = "version.minor"; - /** * The patch version property key. */ public static final String KEY_VERSION_PATCH = "version.patch"; - /** * The pre-release version property key. */ public static final String KEY_VERSION_PRERELEASE = "version.prerelease"; - /** * The project property key. */ public static final String KEY_VERSION_PROJECT = "version.project"; - + /** + * The kotlin type. + */ + public static final String KOTLIN_TYPE = "kt"; /** * The velocity properties name. */ diff --git a/src/main/java/net/thauvin/erik/semver/Version.java b/src/main/java/net/thauvin/erik/semver/Version.java index 15c1aa8..178eb4d 100644 --- a/src/main/java/net/thauvin/erik/semver/Version.java +++ b/src/main/java/net/thauvin/erik/semver/Version.java @@ -75,4 +75,6 @@ public @interface Version { String properties() default Constants.EMPTY; String template() default Constants.DEFAULT_TEMPLATE; + + String type() default Constants.DEFAULT_JAVA_TYPE; } \ No newline at end of file diff --git a/src/main/java/net/thauvin/erik/semver/VersionProcessor.java b/src/main/java/net/thauvin/erik/semver/VersionProcessor.java index e62f6e0..b5038db 100644 --- a/src/main/java/net/thauvin/erik/semver/VersionProcessor.java +++ b/src/main/java/net/thauvin/erik/semver/VersionProcessor.java @@ -42,7 +42,8 @@ import javax.lang.model.element.ElementKind; import javax.lang.model.element.PackageElement; import javax.lang.model.element.TypeElement; import javax.tools.Diagnostic; -import javax.tools.JavaFileObject; +import javax.tools.FileObject; +import javax.tools.StandardLocation; import java.io.*; import java.net.URL; import java.util.HashSet; @@ -161,7 +162,8 @@ public class VersionProcessor extends AbstractProcessor { try { final VersionInfo versionInfo = findValues(version); note("Found version: " + versionInfo.getVersion()); - writeTemplate(packageElement.getQualifiedName().toString(), + writeTemplate(version.type(), + packageElement.getQualifiedName().toString(), version.className(), versionInfo, version.template()); @@ -178,7 +180,8 @@ public class VersionProcessor extends AbstractProcessor { log(Diagnostic.Kind.WARNING, s); } - private void writeTemplate(final String packageName, + private void writeTemplate(final String type, + final String packageName, final String className, final VersionInfo versionInfo, final String template) @@ -207,7 +210,14 @@ public class VersionProcessor extends AbstractProcessor { note("Loaded template: " + vt.getName()); - final JavaFileObject jfo = filer.createSourceFile(packageName + '.' + className); + final FileObject jfo; + if (type.equalsIgnoreCase(Constants.KOTLIN_TYPE)) { + jfo = filer.createResource(StandardLocation.SOURCE_OUTPUT, packageName, + className + '.' + type); + } else { + jfo = filer.createSourceFile(packageName + '.' + className); + } + try (final Writer writer = jfo.openWriter()) { vt.merge(vc, writer); } diff --git a/src/main/resources/version.vm b/src/main/resources/version.vm index 7e0f798..80bde66 100644 --- a/src/main/resources/version.vm +++ b/src/main/resources/version.vm @@ -28,6 +28,9 @@ import java.util.Date; * Annotation Processor */ public final class ${className} { + private final static String DEFAULT_PRERELEASE_PREFIX = "-"; + private final static string DEFAULT_BUILDMETA_PREFIX = "+"; + private final static String buildmeta = "${buildmeta}"; private final static Date date = new Date(${epoch}L); private final static int major = ${major}; @@ -86,7 +89,7 @@ public final class ${className} { return Integer.toString(getMajor()) + '.' + Integer.toString(getMinor()) + '.' + Integer.toString(getPatch()) - + getPreRelease(true) + getBuildMetadata(true); + + getPreReleaseWithPrefix + getBuildMetadataWithPrefix; } /** @@ -119,46 +122,10 @@ public final class ${className} { /** * Returns the pre-release version. * - * @param isHyphen Prepend a hyphen, if true. - * @return The pre-release version, if any. + * @return The pre-release version, if any */ - public static String getPreRelease(final boolean isHyphen) { - if (prerelease.length() > 0) { - if (isHyphen) { - return '-' + prerelease; - } else { - return prerelease; - } - } - - return ""; - } - - /** - * Returns the pre-release version. - * - * @return The pre-release version, if any. - */ - public static String getPreRelease() { - return getPreRelease(false); - } - - /** - * Returns the build metadata. - * - * @param isPlus Prepend a plus sign, if true. - * @return The build metadata, if any. - */ - public static String getBuildMetadata(final boolean isPlus) { - if (buildmeta.length() > 0) { - if (isPlus) { - return '+' + buildmeta; - } else { - return buildmeta; - } - } - - return ""; + public static int getPreRelease() { + return prerelease; } /** @@ -167,6 +134,53 @@ public final class ${className} { * @return The build metadata, if any. */ public static String getBuildMetadata() { - return getBuildMetadata(false); + return buildmeta; + } + + /** + * Returns the pre-release version with default prefix. + * + * @return The pre-release version, if any. + */ + public static String getPreReleaseWithPrefix() { + return getPreReleaseWithPrefix(DEFAULT_PRERELEASE_PREFIX); + } + + /** + * Returns the pre-release version. + * + * @param prefix The refix to prepend. + * @return The pre-release version, if any. + */ + public static String getPreReleaseWithPrefix(final String prefix) { + if (prerelease.length() > 0 && prefix.length() > 0) { + return prefix + prerelease; + } else { + return prerelease; + } + } + + /** + * Returns the build metadata with default prefix. + * + * @param prefix The prefix to prepend. + * @return The build metadata, if any. + */ + public static String getBuildMetadataWithPrefix() { + return getBuildMetadataWithPrefix(DEFAULT_PRERELEASE_PREFIX); + } + + /** + * Returns the build metadata. + * + * @param prefix Prefix to prepend. + * @return The build metadata, if any. + */ + public static String getBuildMetadataWithPrefix(final String prefix) { + if (buildmeta.length() > 0 && prefix.length() > 0) { + return prefix + buildmeta; + } else { + return buildmeta; + } } } \ No newline at end of file