From 7fb6ff52bb20363a2684be64e845753f909e1b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Mart=C3=ADn=20Sotuyo=20Dodero?= Date: Wed, 30 Nov 2016 12:38:37 -0300 Subject: [PATCH] Load version from Manifest (#43) - Simplify the code, get rid of a bunch of version flags that had no real value --- .../de/tobject/findbugs/FindbugsPlugin.java | 2 +- .../properties/WorkspaceSettingsTab.java | 2 +- findbugs/build.gradle | 1 + .../edu/umd/cs/findbugs/gui2/AboutDialog.java | 4 +- .../gui/edu/umd/cs/findbugs/gui2/Driver.java | 2 +- .../src/java/edu/umd/cs/findbugs/Plugin.java | 3 +- .../edu/umd/cs/findbugs/PluginLoader.java | 7 +- .../java/edu/umd/cs/findbugs/ShowHelp.java | 3 +- .../umd/cs/findbugs/SortedBugCollection.java | 2 +- .../src/java/edu/umd/cs/findbugs/Version.java | 206 ++---------------- .../cs/findbugs/updates/UpdateChecker.java | 2 +- 11 files changed, 32 insertions(+), 202 deletions(-) diff --git a/eclipsePlugin/src/de/tobject/findbugs/FindbugsPlugin.java b/eclipsePlugin/src/de/tobject/findbugs/FindbugsPlugin.java index 3f1cd929870..eb5739a6cb7 100644 --- a/eclipsePlugin/src/de/tobject/findbugs/FindbugsPlugin.java +++ b/eclipsePlugin/src/de/tobject/findbugs/FindbugsPlugin.java @@ -210,7 +210,7 @@ public FindbugsPlugin() { public void start(BundleContext context) throws Exception { super.start(context); - Version.registerApplication("FindBugs-Eclipse", Version.RELEASE); + Version.registerApplication("FindBugs-Eclipse", Version.VERSION_STRING); // configure debugging configurePluginDebugOptions(); diff --git a/eclipsePlugin/src/de/tobject/findbugs/properties/WorkspaceSettingsTab.java b/eclipsePlugin/src/de/tobject/findbugs/properties/WorkspaceSettingsTab.java index e4fce9db072..b4345f58c8c 100644 --- a/eclipsePlugin/src/de/tobject/findbugs/properties/WorkspaceSettingsTab.java +++ b/eclipsePlugin/src/de/tobject/findbugs/properties/WorkspaceSettingsTab.java @@ -68,7 +68,7 @@ public WorkspaceSettingsTab(TabFolder tabFolder, final FindbugsPropertyPage page tabDetector.setControl(this); Label versionLabel = new Label(this, SWT.NONE); - versionLabel.setText("FindBugs version: " + Version.RELEASE); + versionLabel.setText("SpotBugs version: " + Version.VERSION_STRING); runAsExtraJob = new Button(this, SWT.CHECK); runAsExtraJob.setSelection(store.getBoolean(FindBugsConstants.KEY_RUN_ANALYSIS_AS_EXTRA_JOB)); diff --git a/findbugs/build.gradle b/findbugs/build.gradle index ea3a5f3ab19..f38af707c8c 100644 --- a/findbugs/build.gradle +++ b/findbugs/build.gradle @@ -56,6 +56,7 @@ jar { manifest { attributes 'Main-Class': 'edu.umd.cs.findbugs.LaunchAppropriateUI', + 'Bundle-Version': project.version, 'Class-Path': 'bcel.jar dom4j-1.6.1.jar jaxen-1.1.6.jar asm-debug-all-6.0_ALPHA jsr305.jar jFormatString.jar commons-lang-2.6.jar' } } diff --git a/findbugs/src/gui/edu/umd/cs/findbugs/gui2/AboutDialog.java b/findbugs/src/gui/edu/umd/cs/findbugs/gui2/AboutDialog.java index 4ab9351e28c..426f02e12f3 100644 --- a/findbugs/src/gui/edu/umd/cs/findbugs/gui2/AboutDialog.java +++ b/findbugs/src/gui/edu/umd/cs/findbugs/gui2/AboutDialog.java @@ -64,8 +64,8 @@ public AboutDialog(JFrame parent, Logger l, boolean modal) { l.logMessage(Logger.ERROR, e.toString()); } - setTitle(MessageFormat.format(edu.umd.cs.findbugs.L10N.getLocalString("dlg.aboutfindbugs_ttl", "About FindBugs {0}"), - new Object[] { Version.RELEASE })); + setTitle(MessageFormat.format(edu.umd.cs.findbugs.L10N.getLocalString("dlg.aboutfindbugs_ttl", "About SpotBugs {0}"), + new Object[] { Version.VERSION_STRING })); } static Pattern pattern = Pattern.compile("@VERSION@"); diff --git a/findbugs/src/gui/edu/umd/cs/findbugs/gui2/Driver.java b/findbugs/src/gui/edu/umd/cs/findbugs/gui2/Driver.java index 2efd7108a2e..d3e80408125 100644 --- a/findbugs/src/gui/edu/umd/cs/findbugs/gui2/Driver.java +++ b/findbugs/src/gui/edu/umd/cs/findbugs/gui2/Driver.java @@ -55,7 +55,7 @@ public static void main(String[] args) throws Exception { if (JavaWebStart.isRunningViaJavaWebstart()) { name = "SpotBugs webstart GUI"; } - Version.registerApplication(name, Version.RELEASE); + Version.registerApplication(name, Version.VERSION_STRING); if (SystemProperties.getProperty("os.name").startsWith("Mac")) { System.setProperty("apple.laf.useScreenMenuBar", "true"); diff --git a/findbugs/src/java/edu/umd/cs/findbugs/Plugin.java b/findbugs/src/java/edu/umd/cs/findbugs/Plugin.java index 2a8d66b34c1..e0067e4f9c3 100644 --- a/findbugs/src/java/edu/umd/cs/findbugs/Plugin.java +++ b/findbugs/src/java/edu/umd/cs/findbugs/Plugin.java @@ -118,8 +118,7 @@ public Plugin(String pluginId, String version, Date releaseDate, @Nonnull Plugin if (version == null) { version = ""; } else if (USE_FINDBUGS_VERSION.equals(version)) { - version = Version.COMPUTED_RELEASE; - releaseDate = Version.getReleaseDate(); + version = Version.VERSION_STRING; } assert enabled || !cannotDisable; myGlobalOptions = new HashMap(); diff --git a/findbugs/src/java/edu/umd/cs/findbugs/PluginLoader.java b/findbugs/src/java/edu/umd/cs/findbugs/PluginLoader.java index e02c48d2528..5ea8aea4813 100644 --- a/findbugs/src/java/edu/umd/cs/findbugs/PluginLoader.java +++ b/findbugs/src/java/edu/umd/cs/findbugs/PluginLoader.java @@ -150,8 +150,8 @@ public class PluginLoader { static HashSet loadedPluginIds = new HashSet(); static { if (DEBUG) { - System.out.println("Debugging plugin loading. FindBugs version " - + Version.getReleaseWithDateIfDev()); + System.out.println("Debugging plugin loading. SpotBugs version " + + Version.VERSION_STRING); } loadInitialPlugins(); } @@ -1155,9 +1155,6 @@ private Plugin constructMinimalPlugin(Document pluginDescriptor, List String version = pluginDescriptor.valueOf("/FindbugsPlugin/@version"); String releaseDate = pluginDescriptor.valueOf("/FindbugsPlugin/@releaseDate"); - if ((releaseDate == null || releaseDate.length() == 0) && isCorePlugin()) { - releaseDate = Version.CORE_PLUGIN_RELEASE_DATE; - } // Create the Plugin object (but don't assign to the plugin field yet, // since we're still not sure if everything will load correctly) Date parsedDate = parseDate(releaseDate); diff --git a/findbugs/src/java/edu/umd/cs/findbugs/ShowHelp.java b/findbugs/src/java/edu/umd/cs/findbugs/ShowHelp.java index 888ef013097..e2769fb245f 100644 --- a/findbugs/src/java/edu/umd/cs/findbugs/ShowHelp.java +++ b/findbugs/src/java/edu/umd/cs/findbugs/ShowHelp.java @@ -28,8 +28,7 @@ public class ShowHelp { public static void main(String[] args) { - - System.out.println("SpotBugs version " + Version.RELEASE + ", " + Version.WEBSITE); + System.out.println("SpotBugs version " + Version.VERSION_STRING + ", " + Version.WEBSITE); DetectorFactoryCollection.instance(); System.out.println("Command line options"); diff --git a/findbugs/src/java/edu/umd/cs/findbugs/SortedBugCollection.java b/findbugs/src/java/edu/umd/cs/findbugs/SortedBugCollection.java index 7474d951f57..44059d037de 100644 --- a/findbugs/src/java/edu/umd/cs/findbugs/SortedBugCollection.java +++ b/findbugs/src/java/edu/umd/cs/findbugs/SortedBugCollection.java @@ -97,7 +97,7 @@ public class SortedBugCollection implements BugCollection { long analysisTimestamp = System.currentTimeMillis(); - String analysisVersion = Version.RELEASE; + String analysisVersion = Version.VERSION_STRING; boolean earlyStats = SystemProperties.getBoolean("findbugs.report.summaryFirst"); diff --git a/findbugs/src/java/edu/umd/cs/findbugs/Version.java b/findbugs/src/java/edu/umd/cs/findbugs/Version.java index 0d3541e7867..9022606a68e 100644 --- a/findbugs/src/java/edu/umd/cs/findbugs/Version.java +++ b/findbugs/src/java/edu/umd/cs/findbugs/Version.java @@ -21,189 +21,50 @@ import java.io.InputStream; import java.net.URL; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.Collection; -import java.util.Date; -import java.util.Locale; -import java.util.Properties; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.jar.Manifest; import javax.annotation.CheckForNull; import edu.umd.cs.findbugs.cloud.CloudPlugin; import edu.umd.cs.findbugs.updates.UpdateChecker; import edu.umd.cs.findbugs.util.FutureValue; -import edu.umd.cs.findbugs.util.Util; /** * Version number and release date information. */ public class Version { /** - * Major version number. + * SpotBugs website. */ - public static final int MAJOR = 3; - - /** - * Minor version number. - */ - public static final int MINOR = 1; - - /** - * Patch level. - */ - public static final int PATCHLEVEL = 0; - - /** - * Development version or release candidate? - */ - public static final boolean IS_DEVELOPMENT = true; - - /** - * Release candidate number. "0" indicates that the version is not a release - * candidate. - */ - public static final int RELEASE_CANDIDATE = 0; - - - public static final String GIT_REVISION = System.getProperty("git.revision", "UNKNOWN"); - - /** - * Release date. - */ - private static final String COMPUTED_DATE; - - public static final String DATE; - - public static final String CORE_PLUGIN_RELEASE_DATE; - - private static final String COMPUTED_ECLIPSE_DATE; - - private static final String COMPUTED_PLUGIN_RELEASE_DATE; - + public static final String WEBSITE = "https://spotbugs.github.io/"; + + public final static String VERSION_STRING; + private static String applicationName = ""; - private static String applicationVersion = ""; static { - SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss z, dd MMMM, yyyy", Locale.ENGLISH); - SimpleDateFormat eclipseDateFormat = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH); - SimpleDateFormat releaseDateFormat = new SimpleDateFormat(UpdateChecker.PLUGIN_RELEASE_DATE_FMT, Locale.ENGLISH); - Date now = new Date(); - COMPUTED_DATE = dateFormat.format(now); - COMPUTED_ECLIPSE_DATE = eclipseDateFormat.format(now); - String tmp = releaseDateFormat.format(now); - COMPUTED_PLUGIN_RELEASE_DATE = tmp; - } - - /** - * Preview release number. "0" indicates that the version is not a preview - * release. - */ - public static final int PREVIEW = 0; - - private static final String RELEASE_SUFFIX_WORD; - static { - String suffix; - if (RELEASE_CANDIDATE > 0) { - suffix = "rc" + RELEASE_CANDIDATE; - } else if (PREVIEW > 0) { - suffix = "preview" + PREVIEW; - } else { - suffix = "dev-" + COMPUTED_ECLIPSE_DATE; - if (!"Unknown".equals(GIT_REVISION)) { - suffix += "-" + GIT_REVISION; - } - } - RELEASE_SUFFIX_WORD = suffix; - } - - public static final String RELEASE_BASE = MAJOR + "." + MINOR + "." + PATCHLEVEL; - - /** - * Release version string. - */ - public static final String COMPUTED_RELEASE = RELEASE_BASE + (IS_DEVELOPMENT ? "-" + RELEASE_SUFFIX_WORD : ""); - - /** - * Release version string. - */ - public static final String RELEASE; - - /** - * Version of Eclipse plugin. - */ - private static final String COMPUTED_ECLIPSE_UI_VERSION = RELEASE_BASE + "." + COMPUTED_ECLIPSE_DATE; - - static { - Class c = Version.class; - URL u = c.getResource(c.getSimpleName() + ".class"); - boolean fromFile = "file".equals(u.getProtocol()); - InputStream in = null; - String release = null; - String date = null; - String plugin_release_date = null; + final URL u = Version.class.getResource(Version.class.getSimpleName() + ".class"); + final boolean fromFile = "file".equals(u.getProtocol()); + + String version = "(Unknown)"; if (!fromFile) { - try { - Properties versionProperties = new Properties(); - in = Version.class.getResourceAsStream("version.properties"); - if (in != null) { - versionProperties.load(in); - release = (String) versionProperties.get("release.number"); - date = (String) versionProperties.get("release.date"); - plugin_release_date = (String) versionProperties.get("plugin.release.date"); - } + try (final InputStream in = Version.class.getResourceAsStream("META-INF/MANIFEST.MF")) { + final Manifest manifest = new Manifest(in); + version = manifest.getMainAttributes().getValue("Bundle-Version"); } catch (Exception e) { - assert true; // ignore - } finally { - Util.closeSilently(in); - } - } - if (release == null) { - release = COMPUTED_RELEASE; - } - if (date == null) { - date = COMPUTED_DATE; - } - if (plugin_release_date == null) { - plugin_release_date = COMPUTED_PLUGIN_RELEASE_DATE; - } - - RELEASE = release; - DATE = date; - CORE_PLUGIN_RELEASE_DATE = plugin_release_date; - Date parsedDate; - try { - SimpleDateFormat fmt = new SimpleDateFormat(UpdateChecker.PLUGIN_RELEASE_DATE_FMT, Locale.ENGLISH); - - parsedDate = fmt.parse(CORE_PLUGIN_RELEASE_DATE); - } catch (ParseException e) { - if (SystemProperties.ASSERTIONS_ENABLED) { - e.printStackTrace(); + // ignore it } - parsedDate = null; + } else { + version = "Development"; } - releaseDate = parsedDate; + + VERSION_STRING = version; } - /** - * FindBugs website. - */ - public static final String WEBSITE = "http://findbugs.sourceforge.net"; - - /** - * Downloads website. - */ - public static final String DOWNLOADS_WEBSITE = "http://prdownloads.sourceforge.net/findbugs"; - - /** - * Support email. - */ - public static final String SUPPORT_EMAIL = "http://findbugs.sourceforge.net/reportingBugs.html"; - private static Date releaseDate; - public static void registerApplication(String name, String version) { applicationName = name; applicationVersion = version; @@ -218,10 +79,6 @@ public static void registerApplication(String name, String version) { } public static void main(String[] argv) throws InterruptedException { - - if (!IS_DEVELOPMENT && RELEASE_CANDIDATE != 0) { - throw new IllegalStateException("Non developmental version, but is release candidate " + RELEASE_CANDIDATE); - } if (argv.length == 0) { printVersion(false); return; @@ -230,18 +87,7 @@ public static void main(String[] argv) throws InterruptedException { String arg = argv[0]; if ("-release".equals(arg)) { - System.out.println(RELEASE); - } else if ("-date".equals(arg)) { - System.out.println(DATE); - } else if ("-props".equals(arg)) { - System.out.println("release.base=" + RELEASE_BASE); - System.out.println("release.number=" + COMPUTED_RELEASE); - System.out.println("release.date=" + COMPUTED_DATE); - System.out.println("plugin.release.date=" + COMPUTED_PLUGIN_RELEASE_DATE); - System.out.println("eclipse.ui.version=" + COMPUTED_ECLIPSE_UI_VERSION); - System.out.println("findbugs.website=" + WEBSITE); - System.out.println("findbugs.downloads.website=" + DOWNLOADS_WEBSITE); - System.out.println("findbugs.git.revision=" + GIT_REVISION); + System.out.println(VERSION_STRING); } else if ("-plugins".equals(arg)) { DetectorFactoryCollection.instance(); for(Plugin p : Plugin.getAllPlugins()) { @@ -261,7 +107,6 @@ public static void main(String[] argv) throws InterruptedException { } else if ("-configuration".equals(arg)){ printVersion(true); } else { - usage(); System.exit(1); } @@ -271,23 +116,12 @@ private static void usage() { System.err.println("Usage: " + Version.class.getName() + " [(-release|-date|-props|-configuration)]"); } - public static String getReleaseWithDateIfDev() { - if (IS_DEVELOPMENT) { - return RELEASE + " (" + DATE + ")"; - } - return RELEASE; - } - - public static @CheckForNull Date getReleaseDate() { - return releaseDate; - } - /** * @param justPrintConfiguration * @throws InterruptedException */ public static void printVersion(boolean justPrintConfiguration) throws InterruptedException { - System.out.println("SpotBugs " + Version.COMPUTED_RELEASE); + System.out.println("SpotBugs " + Version.VERSION_STRING); if (justPrintConfiguration) { for (Plugin plugin : Plugin.getAllPlugins()) { System.out.printf("Plugin %s, version %s, loaded from %s%n", plugin.getPluginId(), plugin.getVersion(), diff --git a/findbugs/src/java/edu/umd/cs/findbugs/updates/UpdateChecker.java b/findbugs/src/java/edu/umd/cs/findbugs/updates/UpdateChecker.java index 4f982d2abd3..1f0ba574e6e 100644 --- a/findbugs/src/java/edu/umd/cs/findbugs/updates/UpdateChecker.java +++ b/findbugs/src/java/edu/umd/cs/findbugs/updates/UpdateChecker.java @@ -268,7 +268,7 @@ protected final void writeXml(OutputStream out, Collection plugins, Stri xmlOutput.beginDocument(); xmlOutput.startTag("findbugs-invocation"); - xmlOutput.addAttribute("version", Version.RELEASE); + xmlOutput.addAttribute("version", Version.VERSION_STRING); String applicationName = Version.getApplicationName(); if (applicationName == null || "".equals(applicationName)) { int lastDot = entryPoint.lastIndexOf('.');