You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gh...@apache.org on 2006/04/06 12:46:23 UTC
svn commit: r391956 - in
/incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching:
HyVMInstall.java HyVMInstallType.java
Author: gharley
Date: Thu Apr 6 03:46:19 2006
New Revision: 391956
URL: http://svn.apache.org/viewcvs?rev=391956&view=rev
Log:
HARMONY 300 : Harmony Eclipse plugin can't handle multiple kernel jars
Modified:
incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstall.java
incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstallType.java
Modified: incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstall.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstall.java?rev=391956&r1=391955&r2=391956&view=diff
==============================================================================
--- incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstall.java (original)
+++ incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstall.java Thu Apr 6 03:46:19 2006
@@ -15,6 +15,8 @@
package org.apache.harmony.eclipse.jdt.launching;
+import java.util.List;
+
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.jdt.launching.AbstractVMInstall;
import org.eclipse.jdt.launching.IVMInstallType;
@@ -75,7 +77,7 @@
}
// Build a library location for the kernel classes
- LibraryLocation kernel = kernelLocation(subdir, vminame);
+ LibraryLocation[] kernel = kernelLocation(subdir, vminame);
LibraryLocation[] stdDefaults = getVMInstallType()
.getDefaultLibraryLocations(getInstallLocation());
@@ -84,7 +86,7 @@
for (int i = 0; i < stdDefaults.length; i++) {
LibraryLocation location = stdDefaults[i];
if (location.getSystemLibraryPath().equals(
- kernel.getSystemLibraryPath())) {
+ kernel[0].getSystemLibraryPath())) {
found = true;
break;
}
@@ -93,16 +95,23 @@
if (found) {
super.setLibraryLocations(null);
} else {
- LibraryLocation[] allLibs = new LibraryLocation[stdDefaults.length + 1];
- allLibs[0] = kernel;
- System.arraycopy(stdDefaults, 0, allLibs, 1, stdDefaults.length);
+ LibraryLocation[] allLibs = new LibraryLocation[kernel.length + stdDefaults.length];
+ System.arraycopy(kernel, 0, allLibs, 0, kernel.length);
+ System.arraycopy(stdDefaults, 0, allLibs, kernel.length, stdDefaults.length);
super.setLibraryLocations(allLibs);
}
}
- private LibraryLocation kernelLocation(String subdir, String vmname) {
- return ((HyVMInstallType) getVMInstallType()).getKernelLocation(
+ private LibraryLocation[] kernelLocation(String subdir, String vmname) {
+ List kernelLibraries = ((HyVMInstallType) getVMInstallType()).getKernelLibraries(
getInstallLocation(), subdir, vmname);
+
+ LibraryLocation[] kernelLibrariesLocation = new LibraryLocation[kernelLibraries.size()];
+ for (int i = 0; i < kernelLibraries.size(); i++) {
+ kernelLibrariesLocation[i] = (LibraryLocation) kernelLibraries.get(i);
+ }
+
+ return kernelLibrariesLocation;
}
/*
Modified: incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstallType.java
URL: http://svn.apache.org/viewcvs/incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstallType.java?rev=391956&r1=391955&r2=391956&view=diff
==============================================================================
--- incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstallType.java (original)
+++ incubator/harmony/enhanced/tools/trunk/eclipse/org.apache.harmony.eclipse.jdt.launching/src/org/apache/harmony/eclipse/jdt/launching/HyVMInstallType.java Thu Apr 6 03:46:19 2006
@@ -111,9 +111,9 @@
public LibraryLocation[] getDefaultLibraryLocations(File installLocation) {
// Find kernel types
- LibraryLocation kernel = getKernelLocation(installLocation,
+ List kernelLibraries = getKernelLibraries(installLocation,
"default", "clearvm"); //$NON-NLS-1$ //$NON-NLS-2$
- if (kernel == null) {
+ if (kernelLibraries == null) {
return new LibraryLocation[] {};
}
@@ -126,13 +126,16 @@
List extensions = getExtensionLibraries(installLocation);
// Combine the libraries result
- LibraryLocation[] allLibraries = new LibraryLocation[1
+ LibraryLocation[] allLibraries = new LibraryLocation[kernelLibraries.size()
+ bootLibraries.size() + extensions.size()];
int libraryCount = 0;
- // Start with the kernel library location
- allLibraries[libraryCount++] = kernel;
+ // Start with the kernel library locations
+ for (int i = 0; i < kernelLibraries.size(); i++) {
+ allLibraries[libraryCount++] = (LibraryLocation) kernelLibraries
+ .get(i);
+ }
// Append the boot libraries
for (int i = 0; i < bootLibraries.size(); i++) {
@@ -167,7 +170,7 @@
return null;
}
- List bootOrder = findBootOrder(bootclasspathProperties);
+ List bootOrder = findBootOrder(bootclasspathProperties, "bootclasspath.");
if (bootOrder == null) {
return null;
}
@@ -207,11 +210,16 @@
sourcePath = new Path(""); //$NON-NLS-1$
} else {
File sourceFile = new File(bootDirectory, sourceLocation);
- try {
- sourcePath = new Path(sourceFile.getCanonicalPath());
- } catch (IOException exception1) {
- // If we cannot find the source, we default to missing token
- sourcePath = new Path(""); //$NON-NLS-1$
+ if (!sourceFile.exists()) {
+ // If we cannot find the source jar, we default to missing token
+ sourcePath = new Path("");
+ } else {
+ try {
+ sourcePath = new Path(sourceFile.getCanonicalPath());
+ } catch (IOException exception1) {
+ // If we cannot find the source, we default to missing token
+ sourcePath = new Path(""); //$NON-NLS-1$
+ }
}
}
@@ -231,24 +239,27 @@
return bootLibraries;
}
- private List findBootOrder(Properties bootclasspathProperties) {
+ private List findBootOrder(Properties bootclasspathProperties, final String propertyStartsWith) {
- // Only keep keys that are "bootclasspath.<something>"
+ // Only keep keys that are propertyStartsWith."<something>"
Set allKeys = bootclasspathProperties.keySet();
Set bootKeys = new HashSet(allKeys.size());
for (Iterator iter = allKeys.iterator(); iter.hasNext();) {
String key = (String) iter.next();
- if ((key.startsWith("bootclasspath.") && //$NON-NLS-1$
- (key.indexOf('.', 14) == -1))) { // Ensure there are no more '.'s
+ if ((key.startsWith(propertyStartsWith) &&
+ (key.indexOf('.', propertyStartsWith.length()) == -1))) { // Ensure there are no more '.'s
bootKeys.add(key);
}
}
+
// Now order the keys by their numerical postfix.
SortedSet bootOrder = new TreeSet(new Comparator() {
public int compare(Object object1, Object object2) {
- // Here '14' is the offset past "bootclasspath."
- String str1 = ((String) object1).substring(14);
- String str2 = ((String) object2).substring(14);
+ // Use propertyStartsWith.length() to get the offset for the end of
+ // e.g. "bootclasspath."
+ String str1 = ((String) object1).substring(propertyStartsWith.length());
+ String str2 = ((String) object2).substring(propertyStartsWith.length());
+
// Puts entries to the end, in any order, if they do not
// parse.
int first, second;
@@ -322,12 +333,13 @@
return ext;
}
-
- LibraryLocation getKernelLocation(File installLocation, String vmdir,
+ List getKernelLibraries(File installLocation, String vmdir,
String vmname) {
Properties kernelProperties = new Properties();
- File propertyFile = new File(installLocation, "bin" + File.separator + //$NON-NLS-1$
- vmdir + File.separator + vmname + ".properties"); //$NON-NLS-1$
+ File kernelDirectory = new File(installLocation, "bin" + File.separator +
+ vmdir);
+ File propertyFile = new File(kernelDirectory, vmname + ".properties"); //$NON-NLS-1$
+
try {
FileInputStream propsFile = new FileInputStream(propertyFile);
kernelProperties.load(propsFile);
@@ -337,30 +349,103 @@
.println("Warning: could not open properties file " + propertyFile.getPath()); //$NON-NLS-1$
return null;
}
+
+ // If we have a VME v1 style kernel (ie single kernel) then read its location
+ if (kernelProperties.getProperty("bootclasspath.kernel") != null) {
+ List kernelLibraries = new ArrayList(1);
+
+ String libStr = tokenReplace(installLocation, kernelProperties
+ .getProperty("bootclasspath.kernel")); //$NON-NLS-1$
+ IPath libraryPath = new Path(libStr);
+
+ String srcStr = tokenReplace(installLocation, kernelProperties
+ .getProperty("bootclasspath.source.kernel")); //$NON-NLS-1$
+ IPath sourcePath;
+ if (srcStr == null) {
+ sourcePath = Path.EMPTY;
+ } else {
+ File sourceFile = new File(srcStr);
+ if (!sourceFile.exists()) {
+ sourcePath = Path.EMPTY;
+ } else {
+ sourcePath = new Path(srcStr);
+ }
+ }
- String libStr = tokenReplace(installLocation, kernelProperties
- .getProperty("bootclasspath.kernel")); //$NON-NLS-1$
- IPath libPath = new Path(libStr);
-
- String srcStr = tokenReplace(installLocation, kernelProperties
- .getProperty("bootclasspath.source.kernel")); //$NON-NLS-1$
- IPath srcPath;
- if (srcStr == null) {
- srcPath = Path.EMPTY;
- } else {
- srcPath = new Path(srcStr);
- }
-
- String rootStr = tokenReplace(installLocation, kernelProperties
- .getProperty("bootclasspath.source.packageroot.kernel")); //$NON-NLS-1$
- IPath rootPath;
- if (rootStr == null) {
- rootPath = Path.ROOT;
- } else {
- rootPath = new Path(rootStr);
+ String rootStr = tokenReplace(installLocation, kernelProperties
+ .getProperty("bootclasspath.source.packageroot.kernel")); //$NON-NLS-1$
+ IPath sourceRootPath;
+ if (rootStr == null) {
+ sourceRootPath = Path.ROOT;
+ } else {
+ sourceRootPath = new Path(rootStr);
+ }
+
+ // We have everything we need to build up a library location
+ LibraryLocation libLocation = new LibraryLocation(libraryPath,
+ sourcePath, sourceRootPath);
+ kernelLibraries.add(libLocation);
+
+ return kernelLibraries;
+ } // endif VME v1
+
+
+ // We have a VME v2 style split kernel (luni and security). Prepare to read in
+ // multiple kernel locations
+ List bootOrder = findBootOrder(kernelProperties, "bootclasspath.kernel.");
+ if (bootOrder == null) {
+ return null;
}
+
+ List kernelLibraries = new ArrayList(bootOrder.size());
- return new LibraryLocation(libPath, srcPath, rootPath);
+ // Interpret the key values, in order, as library locations
+ for (Iterator bootOrderKeyItr = bootOrder.iterator(); bootOrderKeyItr
+ .hasNext();) {
+ String bootOrderKey = (String) bootOrderKeyItr.next();
+ // Here '21' is the offset past "bootclasspath.kernel."
+ String orderSuffix = bootOrderKey.substring(21);
+
+ String kernelLibraryLocation = tokenReplace(installLocation, kernelProperties
+ .getProperty(bootOrderKey)); //$NON-NLS-1$
+ File libraryFile = new File(kernelLibraryLocation);
+ if (!libraryFile.exists()) {
+ // Ignore library descriptions for files that don't exist
+ continue;
+ }
+ IPath libraryPath = new Path(kernelLibraryLocation);
+
+ String sourceLocation = tokenReplace(installLocation, kernelProperties
+ .getProperty("bootclasspath.kernel.source." + orderSuffix)); //$NON-NLS-1$
+ IPath sourcePath;
+ if (sourceLocation == null) {
+ sourcePath = Path.EMPTY;
+ } else {
+ File sourceFile = new File(sourceLocation);
+ if (!sourceFile.exists()) {
+ sourcePath = Path.EMPTY;
+ } else {
+ sourcePath = new Path(sourceLocation);
+ }
+ }
+
+ String rootStr = tokenReplace(installLocation, kernelProperties
+ .getProperty("bootclasspath.kernel.source.packageroot." + orderSuffix)); //$NON-NLS-1$
+ IPath sourceRootPath;
+ if (rootStr == null) {
+ sourceRootPath = Path.ROOT;
+ } else {
+ sourceRootPath = new Path(rootStr);
+ }
+
+ // We have everything we need to build up a library location
+ LibraryLocation libLocation = new LibraryLocation(libraryPath,
+ sourcePath, sourceRootPath);
+ kernelLibraries.add(libLocation);
+
+ }
+ return kernelLibraries;
+
}
private String tokenReplace(File installLocation, String str) {