summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLuke Granger-Brown <git@lukegb.com>2012-09-02 00:56:13 +0100
committerWesley Wolfe <weswolf@aol.com>2012-09-09 17:02:48 -0500
commitb1f6d16bfafd79d5b504e96b2b5e767de3acf227 (patch)
tree8de2bd6157fbb1862485f3fa9d082452c14b8b9d /src
parent27d58a299c38613b9aeed403c35166c31f2d6025 (diff)
downloadcraftbukkit-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')
-rw-r--r--src/main/java/org/bukkit/craftbukkit/Main.java13
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;
}