diff options
-rw-r--r-- | src/core/lombok/core/LombokApp.java | 6 | ||||
-rw-r--r-- | src/delombok/lombok/delombok/Delombok.java | 35 | ||||
-rw-r--r-- | src/installer/lombok/installer/Installer.java | 37 |
3 files changed, 60 insertions, 18 deletions
diff --git a/src/core/lombok/core/LombokApp.java b/src/core/lombok/core/LombokApp.java new file mode 100644 index 00000000..b1984e12 --- /dev/null +++ b/src/core/lombok/core/LombokApp.java @@ -0,0 +1,6 @@ +package lombok.core; + +public interface LombokApp { + public void runApp(String[] args); + public String getAppName(); +} diff --git a/src/delombok/lombok/delombok/Delombok.java b/src/delombok/lombok/delombok/Delombok.java index e05f4982..990267a2 100644 --- a/src/delombok/lombok/delombok/Delombok.java +++ b/src/delombok/lombok/delombok/Delombok.java @@ -1,3 +1,24 @@ +/* + * Copyright © 2009 Reinier Zwitserloot and Roel Spilker. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ package lombok.delombok; import java.io.BufferedWriter; @@ -14,6 +35,9 @@ import java.nio.charset.UnsupportedCharsetException; import java.util.ArrayList; import java.util.List; +import org.mangosdk.spi.ProviderFor; + +import lombok.core.LombokApp; import lombok.delombok.CommentPreservingParser.ParseResult; import com.zwitserloot.cmdreader.CmdReader; @@ -35,6 +59,17 @@ public class Delombok { /** If null, output to standard out. */ private File output = null; + @ProviderFor(LombokApp.class) + public static class DelombokApp implements LombokApp { + @Override public void runApp(String[] args) { + Delombok.main(args); + } + + @Override public String getAppName() { + return "delombok"; + } + } + private static class CmdArgs { @Shorthand("v") @Description("Print the name of each file as it is being delombok-ed.") diff --git a/src/installer/lombok/installer/Installer.java b/src/installer/lombok/installer/Installer.java index d6f1add0..5b023766 100644 --- a/src/installer/lombok/installer/Installer.java +++ b/src/installer/lombok/installer/Installer.java @@ -40,12 +40,11 @@ import java.awt.event.ActionListener; import java.awt.font.TextAttribute; import java.io.File; import java.io.FilenameFilter; +import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.concurrent.atomic.AtomicReference; import javax.swing.Box; @@ -65,6 +64,8 @@ import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.filechooser.FileFilter; +import lombok.core.LombokApp; +import lombok.core.SpiLoadUtil; import lombok.core.Version; import lombok.installer.EclipseFinder.OS; import lombok.installer.EclipseLocation.InstallException; @@ -96,26 +97,26 @@ public class Installer { private JLabel uninstallPlaceholder; private JButton installButton; - private static final Map<String, String> APPS; - static { - Map<String, String> m = new HashMap<String, String>(); - m.put("delombok", "lombok.delombok.Delombok"); - APPS = Collections.unmodifiableMap(m); - } - public static void main(String[] args) { if (args.length > 0) { - String className = APPS.get(args[0]); - if (className != null) { - String[] newArgs = new String[args.length-1]; - System.arraycopy(args, 1, newArgs, 0, newArgs.length); - try { - Class.forName(className).getMethod("main", String[].class).invoke(newArgs); - } catch (Exception e) { - System.err.println("Lombok bug: Can't find application main class: " + className); + String appName = args[0]; + String[] newArgs = new String[args.length-1]; + System.arraycopy(args, 1, newArgs, 0, newArgs.length); + Iterable<LombokApp> services; + try { + services = SpiLoadUtil.findServices(LombokApp.class); + } catch (IOException e) { + System.err.println("Your lombok installation appears to be corrupted! Please let us know by clicking 'report bugs' on projectlombok.org. Include this stack trace:"); + e.printStackTrace(); + System.exit(2); + return; + } + for (LombokApp app : services) { + if (appName.equals(app.getAppName())) { + app.runApp(newArgs); + return; } } - return; } if (args.length > 0 && (args[0].equals("install") || args[0].equals("uninstall"))) { boolean uninstall = args[0].equals("uninstall"); |