diff options
author | Luke Granger-Brown <git@lukegb.com> | 2012-09-02 00:56:13 +0100 |
---|---|---|
committer | Wesley Wolfe <weswolf@aol.com> | 2012-09-09 17:02:48 -0500 |
commit | b1f6d16bfafd79d5b504e96b2b5e767de3acf227 (patch) | |
tree | 8de2bd6157fbb1862485f3fa9d082452c14b8b9d /src/main | |
parent | 27d58a299c38613b9aeed403c35166c31f2d6025 (diff) | |
download | craftbukkit-b1f6d16bfafd79d5b504e96b2b5e767de3acf227.tar craftbukkit-b1f6d16bfafd79d5b504e96b2b5e767de3acf227.tar.gz craftbukkit-b1f6d16bfafd79d5b504e96b2b5e767de3acf227.tar.lz craftbukkit-b1f6d16bfafd79d5b504e96b2b5e767de3acf227.tar.xz craftbukkit-b1f6d16bfafd79d5b504e96b2b5e767de3acf227.zip |
Change local jline checks to not use String literals. Fixes BUKKIT-2455.
Refactoring dependencies 'changes' the string literal in the code. This
commit changes the literal to instead use a char[] to initialize a new
String. On a bytecode level, there will not exist a String literal for these
two values; the shade plugin will no longer refactor them.
Refactoring jline also changes the other String literals we use for
notifying jline of the current state. To insure that our local code reflects
the inner logic in jline, the key value was changed to the static final
variable located in TerminalFactory. Likewise, UnsupportedTerminal uses the
explicit class name (as reflection is used later with the value that has
been set).
Diffstat (limited to 'src/main')
-rw-r--r-- | src/main/java/org/bukkit/craftbukkit/Main.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java index c6fa9ab8..9aa28c85 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -128,14 +128,23 @@ public class Main { System.out.println(CraftServer.class.getPackage().getImplementationVersion()); } else { try { - useJline = !"jline.UnsupportedTerminal".equals(System.getProperty("jline.terminal")); + // This trick bypasses Maven Shade's clever rewriting of our getProperty call when using String literals + String jline_UnsupportedTerminal = new String(new char[] {'j','l','i','n','e','.','U','n','s','u','p','p','o','r','t','e','d','T','e','r','m','i','n','a','l'}); + String jline_terminal = new String(new char[] {'j','l','i','n','e','.','t','e','r','m','i','n','a','l'}); + + useJline = !(jline_UnsupportedTerminal).equals(System.getProperty(jline_terminal)); if (options.has("nojline")) { - System.setProperty("jline.terminal", "jline.UnsupportedTerminal"); System.setProperty("user.language", "en"); useJline = false; } + if (!useJline) { + // This ensures the terminal literal will always match the jline implementation + System.setProperty(jline.TerminalFactory.JLINE_TERMINAL, jline.UnsupportedTerminal.class.getName()); + } + + if (options.has("noconsole")) { useConsole = false; } |