From fc3a06fe0a441be6d712a975185012c15cad5676 Mon Sep 17 00:00:00 2001 From: Hannes Wellmann Date: Thu, 19 Dec 2024 23:52:54 +0100 Subject: [PATCH] Return Path instead of URL-String in ClasspathHelper.writeDevEntries() Instead returning a file-URL in it's string representation better use the actual type of value, i.e. a Path. --- .../internal/build/BuildScriptGenerator.java | 8 +++--- .../builder/AbstractBuildScriptGenerator.java | 5 ++-- .../build/builder/DevClassPathHelper.java | 27 +++++++------------ .../build/tasks/BuildScriptGeneratorTask.java | 5 ++-- .../pde/internal/core/ClasspathHelper.java | 25 +++++++++-------- .../core/exports/FeatureExportOperation.java | 7 ++--- ...EclipseApplicationLaunchConfiguration.java | 4 +-- .../launching/EquinoxLaunchConfiguration.java | 4 +-- .../JUnitLaunchConfigurationDelegate.java | 4 +-- .../ClasspathResolverTest.java | 17 +++++------- .../build/GenerateFeatureBuildFileAction.java | 5 ++-- .../build/GeneratePluginBuildFileAction.java | 5 ++-- ...UnitPluginLaunchConfigurationDelegate.java | 9 ++++--- 13 files changed, 62 insertions(+), 63 deletions(-) diff --git a/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java b/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java index ebb63ec72f..a5c84a2567 100644 --- a/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java +++ b/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/BuildScriptGenerator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2021 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -469,9 +470,10 @@ public void setChildren(boolean children) { this.children = children; } - public void setDevEntries(String devEntries) { - if (devEntries != null) + public void setDevEntries(Path devEntries) { + if (devEntries != null) { this.devEntries = new DevClassPathHelper(devEntries); + } } public void setElements(String[] elements) { diff --git a/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java b/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java index ad56a6d50b..c29e2f7d3f 100644 --- a/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java +++ b/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/AbstractBuildScriptGenerator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2017 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -15,6 +15,7 @@ import java.io.IOException; import java.io.InputStream; +import java.nio.file.Path; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; @@ -67,7 +68,7 @@ static public Properties getExecutionEnvironmentMappings() { return executionEnvironmentMappings; } - public void setDevEntries(String entries) { + public void setDevEntries(Path entries) { devEntries = new DevClassPathHelper(entries); } diff --git a/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/DevClassPathHelper.java b/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/DevClassPathHelper.java index 466fbe6b9e..aa491d5294 100644 --- a/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/DevClassPathHelper.java +++ b/build/org.eclipse.pde.build/src/org/eclipse/pde/internal/build/builder/DevClassPathHelper.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2004, 2017 IBM Corporation and others. + * Copyright (c) 2004, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -15,8 +15,8 @@ import java.io.IOException; import java.io.InputStream; -import java.net.MalformedURLException; -import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Properties; import org.eclipse.core.runtime.IStatus; @@ -32,18 +32,11 @@ public class DevClassPathHelper { protected String[] devDefaultClasspath; protected Properties devProperties = null; - public DevClassPathHelper(String devInfo) { - // Check the osgi.dev property to see if dev classpath entries have been defined. - String osgiDev = devInfo; + public DevClassPathHelper(Path osgiDev) { if (osgiDev != null) { - try { - inDevelopmentMode = true; - URL location = new URL(osgiDev); - devProperties = load(location); - devDefaultClasspath = Utils.getArrayFromString(devProperties.getProperty("*")); //$NON-NLS-1$ - } catch (MalformedURLException e) { - devDefaultClasspath = Utils.getArrayFromString(osgiDev); - } + inDevelopmentMode = true; + devProperties = load(osgiDev); + devDefaultClasspath = Utils.getArrayFromString(devProperties.getProperty("*")); //$NON-NLS-1$ } } @@ -66,12 +59,12 @@ public boolean inDevelopmentMode() { /* * Load the given properties file */ - private static Properties load(URL url) { + private static Properties load(Path url) { Properties props = new Properties(); - try (InputStream is = url.openStream()) { + try (InputStream is = Files.newInputStream(url)) { props.load(is); } catch (IOException e) { - String message = NLS.bind(Messages.exception_missingFile, url.toExternalForm()); + String message = NLS.bind(Messages.exception_missingFile, url); BundleHelper.getDefault().getLog().log(new Status(IStatus.WARNING, IPDEBuildConstants.PI_PDEBUILD, IPDEBuildConstants.EXCEPTION_READING_FILE, message, null)); } return props; diff --git a/build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java b/build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java index 3ad94fc828..fdeb893469 100644 --- a/build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java +++ b/build/org.eclipse.pde.build/src_ant/org/eclipse/pde/internal/build/tasks/BuildScriptGeneratorTask.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2021 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -16,6 +16,7 @@ import java.io.File; import java.net.URI; import java.net.URISyntaxException; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Properties; @@ -59,7 +60,7 @@ public void setChildren(boolean children) { * * @param devEntries the classpath dev entries */ - public void setDevEntries(String devEntries) { + public void setDevEntries(Path devEntries) { generator.setDevEntries(devEntries); } diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java index 4499ac8a72..6366420b2a 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/ClasspathHelper.java @@ -19,7 +19,9 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; -import java.net.URL; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -70,7 +72,7 @@ private ClasspathHelper() { // static use only private static final String DEV_CLASSPATH_ENTRY_SEPARATOR = ","; //$NON-NLS-1$ private static final String DEV_CLASSPATH_VERSION_SEPARATOR = ";"; //$NON-NLS-1$ - public static String getDevEntriesProperties(String fileName, boolean checkExcluded) throws CoreException { + public static Path getDevEntriesProperties(String fileName, boolean checkExcluded) throws CoreException { IPluginModelBase[] models = PluginRegistry.getWorkspaceModels(); Map> bundleModels = Arrays.stream(models) .filter(o -> o.toString() != null) //toString() used as key @@ -80,23 +82,20 @@ public static String getDevEntriesProperties(String fileName, boolean checkExclu return writeDevEntries(fileName, properties); } - public static String getDevEntriesProperties(String fileName, Map> map) + public static Path getDevEntriesProperties(String fileName, Map> map) throws CoreException { Properties properties = getDevEntriesProperties(map, true); return writeDevEntries(fileName, properties); } - public static String writeDevEntries(String fileName, Properties properties) throws CoreException { - File file = new File(fileName); - if (!file.exists()) { - File directory = file.getParentFile(); - if (directory != null && (!directory.exists() || directory.isFile())) { - directory.mkdirs(); + public static Path writeDevEntries(String fileName, Properties properties) throws CoreException { + Path file = Path.of(fileName); + try { + Files.createDirectories(file.getParent()); + try (OutputStream stream = new FileOutputStream(fileName)) { + properties.store(stream, ""); //$NON-NLS-1$ + return file; } - } - try (FileOutputStream stream = new FileOutputStream(fileName)) { - properties.store(stream, ""); //$NON-NLS-1$ - return new URL("file:" + fileName).toString(); //$NON-NLS-1$ } catch (IOException e) { PDECore.logException(e); throw new CoreException(Status.error("Failed to create dev.properties file", e)); //$NON-NLS-1$ diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java index 0634364b9b..a6d392a9e1 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/exports/FeatureExportOperation.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2022 IBM Corporation and others. + * Copyright (c) 2006, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -27,6 +27,7 @@ import java.net.MalformedURLException; import java.net.URI; import java.net.URL; +import java.nio.file.Path; import java.util.ArrayList; import java.util.Arrays; import java.util.Dictionary; @@ -113,7 +114,7 @@ public class FeatureExportOperation extends Job { // Location where the build takes place protected String fBuildTempLocation; protected String fBuildTempMetadataLocation; - private String fDevProperties; + private Path fDevProperties; private static boolean fHasErrors; protected HashMap fAntBuildProperties; protected WorkspaceExportHelper fWorkspaceExportHelper; @@ -823,7 +824,7 @@ protected void copyState(State state) { fStateCopy.setPlatformProperties(state.getPlatformProperties()); } - private String getDevProperties() throws CoreException { + private Path getDevProperties() throws CoreException { if (fDevProperties == null) { fDevProperties = ClasspathHelper.getDevEntriesProperties(fBuildTempLocation + "/dev.properties", false); //$NON-NLS-1$ } diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java index 3e697101d2..bf4c5fbd6e 100644 --- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java +++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2021 IBM Corporation and others. + * Copyright (c) 2005, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -128,7 +128,7 @@ public String[] getProgramArguments(ILaunchConfiguration configuration) throws C // add the output folder names programArgs.add("-dev"); //$NON-NLS-1$ - programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigDir(configuration).toString() + "/dev.properties", fAllBundles)); //$NON-NLS-1$ + programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigDir(configuration).toString() + "/dev.properties", fAllBundles).toUri().toString()); //$NON-NLS-1$ String[] args = super.getProgramArguments(configuration); Collections.addAll(programArgs, args); diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java index 8411381516..d0cff40d50 100644 --- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java +++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2005, 2022 IBM Corporation and others. + * Copyright (c) 2005, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -84,7 +84,7 @@ public String[] getProgramArguments(ILaunchConfiguration configuration) throws C ArrayList programArgs = new ArrayList<>(); programArgs.add("-dev"); //$NON-NLS-1$ - programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigDir(configuration).toString() + "/dev.properties", fAllBundles)); //$NON-NLS-1$ + programArgs.add(ClasspathHelper.getDevEntriesProperties(getConfigDir(configuration).toString() + "/dev.properties", fAllBundles).toUri().toString()); //$NON-NLS-1$ saveConfigurationFile(configuration); programArgs.add("-configuration"); //$NON-NLS-1$ diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java index dbfcc3aa56..a8408a5dc5 100644 --- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java +++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2022 IBM Corporation and others. + * Copyright (c) 2006, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -240,7 +240,7 @@ protected void collectExecutionArguments(ILaunchConfiguration configuration, Lis ClasspathHelper.addDevClasspath(testPlugin, devProperties, relativePath.toString(), true); }); } - programArgs.add(ClasspathHelper.writeDevEntries(getConfigurationDirectory(configuration).toString() + "/dev.properties", devProperties)); //$NON-NLS-1$ + programArgs.add(ClasspathHelper.writeDevEntries(getConfigurationDirectory(configuration).toString() + "/dev.properties", devProperties).toUri().toString()); //$NON-NLS-1$ // Create the .options file if tracing is turned on if (configuration.getAttribute(IPDELauncherConstants.TRACING, false) && !IPDELauncherConstants.TRACING_NONE.equals(configuration.getAttribute(IPDELauncherConstants.TRACING_CHECKED, (String) null))) { diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/classpathresolver/ClasspathResolverTest.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/classpathresolver/ClasspathResolverTest.java index 5d39f776e3..10b9e11212 100644 --- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/classpathresolver/ClasspathResolverTest.java +++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/classpathresolver/ClasspathResolverTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011, 2021 Sonatype, Inc. and others. + * Copyright (c) 2011, 2024 Sonatype, Inc. and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -23,11 +23,9 @@ import static org.junit.Assert.assertNull; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; -import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; @@ -133,9 +131,9 @@ public void testGetDevProperties() throws Exception { mockTPWithRunningPlatformAndBundles(); // running-platform only File devProperties = tempFolder.newFile("dev.properties").getCanonicalFile(); - String devPropertiesURL = ClasspathHelper.getDevEntriesProperties(devProperties.getPath(), false); + Path devPropertiesFile = ClasspathHelper.getDevEntriesProperties(devProperties.getPath(), false); - Properties properties = loadProperties(devPropertiesURL); + Properties properties = loadProperties(devPropertiesFile); String expectedDevCP = project.getFolder("cpe").getLocation().toPortableString(); assertEquals(expectedDevCP, properties.get(bundleName)); @@ -404,14 +402,13 @@ private Properties createDevEntryProperties(List launchedBundl throws IOException, CoreException { File devPropertiesFile = tempFolder.newFile("dev.properties").getCanonicalFile(); Map> bundlesMap = Map.of(HOST_BUNDLE_ID, launchedBundles); - String devPropertiesURL = ClasspathHelper.getDevEntriesProperties(devPropertiesFile.getPath(), bundlesMap); - return loadProperties(devPropertiesURL); + Path devProperties = ClasspathHelper.getDevEntriesProperties(devPropertiesFile.getPath(), bundlesMap); + return loadProperties(devProperties); } - private static Properties loadProperties(String devPropertiesURL) throws IOException { - File propertiesFile = new File(new URL(devPropertiesURL).getPath()); + private static Properties loadProperties(Path devPropertiesFile) throws IOException { Properties devProperties = new Properties(); - try (InputStream stream = new FileInputStream(propertiesFile)) { + try (InputStream stream = Files.newInputStream(devPropertiesFile )) { devProperties.load(stream); } return devProperties; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GenerateFeatureBuildFileAction.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GenerateFeatureBuildFileAction.java index 28a9595d7e..34e53dbf6e 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GenerateFeatureBuildFileAction.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GenerateFeatureBuildFileAction.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2015 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -14,6 +14,7 @@ package org.eclipse.pde.internal.ui.build; import java.lang.reflect.InvocationTargetException; +import java.nio.file.Path; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; @@ -55,7 +56,7 @@ protected void makeScripts(IProgressMonitor monitor) throws InvocationTargetExce generator.setChildren(true); AbstractScriptGenerator.setEmbeddedSource(AbstractScriptGenerator.getDefaultEmbeddedSource()); - String url = ClasspathHelper.getDevEntriesProperties(fManifestFile.getProject().getLocation().addTrailingSeparator().toString() + "dev.properties", false); //$NON-NLS-1$ + Path url = ClasspathHelper.getDevEntriesProperties(fManifestFile.getProject().getLocation().addTrailingSeparator().toString() + "dev.properties", false); //$NON-NLS-1$ generator.setDevEntries(url); generator.setWorkingDirectory(fManifestFile.getProject().getLocation().toOSString()); String configInfo = TargetPlatform.getOS() + ", " + TargetPlatform.getWS() + ", " + TargetPlatform.getOSArch(); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GeneratePluginBuildFileAction.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GeneratePluginBuildFileAction.java index 6bdecb28ad..037ffb9666 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GeneratePluginBuildFileAction.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/build/GeneratePluginBuildFileAction.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2015 IBM Corporation and others. + * Copyright (c) 2000, 2024 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -15,6 +15,7 @@ package org.eclipse.pde.internal.ui.build; import java.lang.reflect.InvocationTargetException; +import java.nio.file.Path; import java.util.Properties; import org.eclipse.core.resources.IProject; @@ -55,7 +56,7 @@ protected void makeScripts(IProgressMonitor monitor) throws InvocationTargetExce AbstractScriptGenerator.setConfigInfo(AbstractScriptGenerator.getDefaultConfigInfos()); generator.setWorkingDirectory(project.getLocation().toOSString()); - String url = ClasspathHelper.getDevEntriesProperties(project.getLocation().addTrailingSeparator().toString() + "dev.properties", false); //$NON-NLS-1$ + Path url = ClasspathHelper.getDevEntriesProperties(project.getLocation().addTrailingSeparator().toString() + "dev.properties", false); //$NON-NLS-1$ generator.setDevEntries(url); generator.setPDEState(TargetPlatformHelper.getState()); generator.setNextId(TargetPlatformHelper.getPDEState().getNextId()); diff --git a/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java index 1d93ac197f..6960b167a5 100644 --- a/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java +++ b/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2021, 2022 Red Hat Inc. and others. + * Copyright (c) 2021, 2024 Red Hat Inc. and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -545,8 +545,11 @@ protected void collectExecutionArguments(ILaunchConfiguration configuration, Lis // Specify the output folder names programArgs.add("-dev"); //$NON-NLS-1$ - programArgs.add(ClasspathHelper.getDevEntriesProperties( - getConfigurationDirectory(configuration).toString() + "/dev.properties", fAllBundles)); //$NON-NLS-1$ + programArgs + .add(ClasspathHelper + .getDevEntriesProperties( + getConfigurationDirectory(configuration).toString() + "/dev.properties", fAllBundles) //$NON-NLS-1$ + .toUri().toString()); // Create the .options file if tracing is turned on if (configuration.getAttribute(IPDELauncherConstants.TRACING, false) && !IPDELauncherConstants.TRACING_NONE