Implement SystemReader.isAndroid() instead of catching a NoClassDefFoundError in GC.getPID(). This is done to get GC.getPID() to work on Android, where ProcessHandle.pid() is not supported. Change-Id: Ia70affff96a682eb275dde1e5d14dccabf8db593
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java index 6a78271..7885794 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/GC.java
@@ -1995,6 +1995,9 @@ private String getProcDesc() { } private long getPID() { + if (SystemReader.getInstance().isAndroid()) { + return 0; + } return ProcessHandle.current().pid(); }
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java index 0b7c620..763bf26 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/util/SystemReader.java
@@ -68,6 +68,8 @@ public abstract class SystemReader { private static volatile Boolean isLinux; + private static volatile Boolean isAndroid; + private static final String GIT_TRACE_PERFORMANCE = "GIT_TRACE_PERFORMANCE"; //$NON-NLS-1$ private static final boolean performanceTrace = initPerformanceTrace(); @@ -762,6 +764,25 @@ public boolean isLinux() { } /** + * Whether we are running on Android. + * + * @return true if we are running on Android. + * @since 7.7 + */ + public boolean isAndroid() { + if (isAndroid == null) { + String vendor = getProperty("java.vendor"); //$NON-NLS-1$ + if (vendor == null) { + isAndroid = Boolean.FALSE; + } else { + isAndroid = Boolean + .valueOf(vendor.toLowerCase().contains("android")); //$NON-NLS-1$ + } + } + return isAndroid.booleanValue(); + } + + /** * Whether performance trace is enabled * * @return whether performance trace is enabled