SystemReader.isMacOs() and SystemReader.isWindows() return values are unlikely to change during the JVM lifetime (except tests). Don't read system properties each time the methods are called, just use previously calculated value. Change-Id: I495521f67a8b544e7b7247d99bbd05a42ea16d20 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>tags/v4.1.0.201509280440-r
@@ -47,6 +47,7 @@ package org.eclipse.jgit.junit; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.lang.reflect.Field; | |||
import java.text.DateFormat; | |||
import java.text.SimpleDateFormat; | |||
import java.util.HashMap; | |||
@@ -170,6 +171,7 @@ public class MockSystemReader extends SystemReader { | |||
* Assign some properties for the currently executing platform | |||
*/ | |||
public void setCurrentPlatform() { | |||
resetOsNames(); | |||
setProperty("os.name", System.getProperty("os.name")); | |||
setProperty("file.separator", System.getProperty("file.separator")); | |||
setProperty("path.separator", System.getProperty("path.separator")); | |||
@@ -180,6 +182,7 @@ public class MockSystemReader extends SystemReader { | |||
* Emulate Windows | |||
*/ | |||
public void setWindows() { | |||
resetOsNames(); | |||
setProperty("os.name", "Windows"); | |||
setProperty("file.separator", "\\"); | |||
setProperty("path.separator", ";"); | |||
@@ -191,10 +194,25 @@ public class MockSystemReader extends SystemReader { | |||
* Emulate Unix | |||
*/ | |||
public void setUnix() { | |||
resetOsNames(); | |||
setProperty("os.name", "*nix"); // Essentially anything but Windows | |||
setProperty("file.separator", "/"); | |||
setProperty("path.separator", ":"); | |||
setProperty("line.separator", "\n"); | |||
setPlatformChecker(); | |||
} | |||
private void resetOsNames() { | |||
Field field; | |||
try { | |||
field = SystemReader.class.getDeclaredField("isWindows"); | |||
field.setAccessible(true); | |||
field.set(null, null); | |||
field = SystemReader.class.getDeclaredField("isMacOS"); | |||
field.setAccessible(true); | |||
field.set(null, null); | |||
} catch (Exception e) { | |||
e.printStackTrace(); | |||
} | |||
} | |||
} |
@@ -71,6 +71,11 @@ import org.eclipse.jgit.lib.ObjectChecker; | |||
*/ | |||
public abstract class SystemReader { | |||
private static final SystemReader DEFAULT; | |||
private static Boolean isMacOS; | |||
private static Boolean isWindows; | |||
static { | |||
SystemReader r = new Default(); | |||
r.init(); | |||
@@ -148,6 +153,8 @@ public abstract class SystemReader { | |||
* the default instance. | |||
*/ | |||
public static void setInstance(SystemReader newReader) { | |||
isMacOS = null; | |||
isWindows = null; | |||
if (newReader == null) | |||
INSTANCE = DEFAULT; | |||
else { | |||
@@ -293,26 +300,31 @@ public abstract class SystemReader { | |||
* @return true if we are running on a Windows. | |||
*/ | |||
public boolean isWindows() { | |||
String osDotName = AccessController | |||
.doPrivileged(new PrivilegedAction<String>() { | |||
public String run() { | |||
return getProperty("os.name"); //$NON-NLS-1$ | |||
} | |||
}); | |||
return osDotName.startsWith("Windows"); //$NON-NLS-1$ | |||
if (isWindows == null) { | |||
String osDotName = getOsName(); | |||
isWindows = Boolean.valueOf(osDotName.startsWith("Windows")); //$NON-NLS-1$ | |||
} | |||
return isWindows.booleanValue(); | |||
} | |||
/** | |||
* @return true if we are running on Mac OS X | |||
*/ | |||
public boolean isMacOS() { | |||
String osDotName = AccessController | |||
.doPrivileged(new PrivilegedAction<String>() { | |||
public String run() { | |||
return getProperty("os.name"); //$NON-NLS-1$ | |||
} | |||
}); | |||
return "Mac OS X".equals(osDotName) || "Darwin".equals(osDotName); //$NON-NLS-1$ //$NON-NLS-2$ | |||
if (isMacOS == null) { | |||
String osDotName = getOsName(); | |||
isMacOS = Boolean.valueOf( | |||
"Mac OS X".equals(osDotName) || "Darwin".equals(osDotName)); //$NON-NLS-1$ //$NON-NLS-2$ | |||
} | |||
return isMacOS.booleanValue(); | |||
} | |||
private String getOsName() { | |||
return AccessController.doPrivileged(new PrivilegedAction<String>() { | |||
public String run() { | |||
return getProperty("os.name"); //$NON-NLS-1$ | |||
} | |||
}); | |||
} | |||
/** |