Index: editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/feedback/FeedbackUtils.java |
=================================================================== |
--- editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/feedback/FeedbackUtils.java (revision 2532) |
+++ editor/tools/plugins/com.google.dart.tools.ui/src/com/google/dart/tools/ui/feedback/FeedbackUtils.java (working copy) |
@@ -1,25 +1,29 @@ |
/* |
* Copyright (c) 2011, the Dart project authors. |
- * |
- * Licensed under the Eclipse Public License v1.0 (the "License"); you may not |
- * use this file except in compliance with the License. You may obtain a copy of |
- * the License at |
- * |
+ * |
+ * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except |
+ * in compliance with the License. You may obtain a copy of the License at |
+ * |
* http://www.eclipse.org/legal/epl-v10.html |
- * |
- * Unless required by applicable law or agreed to in writing, software |
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
- * License for the specific language governing permissions and limitations under |
+ * |
+ * Unless required by applicable law or agreed to in writing, software distributed under the License |
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
+ * or implied. See the License for the specific language governing permissions and limitations under |
* the License. |
*/ |
package com.google.dart.tools.ui.feedback; |
+import com.google.dart.tools.ui.DartToolsPlugin; |
+ |
+import org.eclipse.swt.internal.Library; |
+ |
+import java.lang.reflect.Field; |
import java.util.zip.CRC32; |
/** |
* Provides utility methods for feedback submission. |
*/ |
+@SuppressWarnings("restriction") |
public class FeedbackUtils { |
/** |
@@ -46,12 +50,29 @@ |
} |
/** |
+ * Get a String representation of editor version details. Minimally, this will include the build |
+ * id. If a binary mismatch is detected (e.g., editor binary is 32 bit while the OS arch is 64 |
+ * bit) the current binary bit info will be appended as well. |
+ * |
+ * @return a String representation of editor version details |
+ */ |
+ public static String getEditorVersionDetails() { |
+ String binaryDetails = null; |
+ try { |
+ binaryDetails = binaryMismatch() ? getBinaryString() : ""; |
+ } catch (Exception e) { |
+ binaryDetails = "- <unable to detect binary type>"; |
+ } |
+ return DartToolsPlugin.getBuildId() + binaryDetails; |
+ } |
+ |
+ /** |
* Get a String representation of the current OS. |
* |
* @return a String representation of the current OS |
*/ |
public static String getOSName() { |
- return System.getProperty("os.name"); |
+ return System.getProperty("os.name") + " - " + getOSArch(); |
} |
/** |
@@ -76,6 +97,29 @@ |
return results; |
} |
+ private static boolean binaryMismatch() throws Exception { |
+ return is64bitOS() != is64bitBinary(); |
+ } |
+ |
+ private static String getBinaryString() throws Exception { |
+ return " - *" + (is64bitBinary() ? "64" : "32") + " bit binary*"; |
+ } |
+ |
+ private static String getOSArch() { |
+ return System.getProperty("os.arch"); |
+ } |
+ |
+ private static boolean is64bitBinary() throws Exception { |
+ Class<Library> swtLibraryClass = Library.class; |
+ Field is64 = swtLibraryClass.getDeclaredField("IS_64"); |
+ is64.setAccessible(true); |
+ return is64.getBoolean(swtLibraryClass); |
+ } |
+ |
+ private static boolean is64bitOS() { |
+ return getOSArch().contains("64"); |
+ } |
+ |
/** |
* Convert an integer to a hex string. |
* |