diff --git a/org.ntlab.traceCollector/META-INF/MANIFEST.MF b/org.ntlab.traceCollector/META-INF/MANIFEST.MF index 34a0c53..a9ef9df 100644 --- a/org.ntlab.traceCollector/META-INF/MANIFEST.MF +++ b/org.ntlab.traceCollector/META-INF/MANIFEST.MF @@ -16,3 +16,4 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.7 Bundle-ClassPath: javassist.jar, . +Export-Package: org.ntlab.traceCollector diff --git a/org.ntlab.traceCollector/plugin.xml b/org.ntlab.traceCollector/plugin.xml index 1821ea1..5fc6cdd 100644 --- a/org.ntlab.traceCollector/plugin.xml +++ b/org.ntlab.traceCollector/plugin.xml @@ -1,6 +1,7 @@ + diff --git a/org.ntlab.traceCollector/schema/additionalClasspaths.exsd b/org.ntlab.traceCollector/schema/additionalClasspaths.exsd new file mode 100644 index 0000000..f06ad85 --- /dev/null +++ b/org.ntlab.traceCollector/schema/additionalClasspaths.exsd @@ -0,0 +1,102 @@ + + + + + + + + + To specify additional class paths used to launch the target program + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [Enter the first release in which this extension point appears.] + + + + + + + + + [Enter extension point usage example here.] + + + + + + + + + [Enter API information here.] + + + + + + + + + [Enter information about supplied implementation of this extension point.] + + + + + diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/Activator.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/Activator.java index 075cce7..b367329 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/Activator.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/Activator.java @@ -14,10 +14,13 @@ // The shared instance private static Activator plugin; + private ExtensionLoader loader; + /** * The constructor */ public Activator() { + loader = new ExtensionLoader(); } /* @@ -29,6 +32,10 @@ plugin = this; } + public ExtensionLoader getLoader() { + return loader; + } + /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/ExtensionLoader.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/ExtensionLoader.java new file mode 100644 index 0000000..b91466a --- /dev/null +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/ExtensionLoader.java @@ -0,0 +1,43 @@ +package org.ntlab.traceCollector; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtension; +import org.eclipse.core.runtime.IExtensionPoint; +import org.eclipse.core.runtime.IExtensionRegistry; +import org.eclipse.core.runtime.Platform; + +public class ExtensionLoader { + private static final String EXTENSION_POINT_ID = Activator.PLUGIN_ID + ".additionalClasspaths"; //�g���|�C���gID + private List list; + + public List getAdditionalLaunchConfigurations() { + if (list != null) { + return list; + } + + IExtensionRegistry registory = Platform.getExtensionRegistry(); + IExtensionPoint point = registory.getExtensionPoint(EXTENSION_POINT_ID); + if (point == null) { + throw new IllegalStateException(EXTENSION_POINT_ID); + } + + list = new ArrayList(); + for (IExtension extension : point.getExtensions()) { + for (IConfigurationElement element : extension.getConfigurationElements()) { + try { + Object obj = element.createExecutableExtension("class"); //class���� + if (obj instanceof IAdditionalLaunchConfiguration) { + list.add((IAdditionalLaunchConfiguration) obj); + } + } catch (CoreException e) { + Activator.getDefault().getLog().log(e.getStatus()); + } + } + } + return list; + } +} diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/IAdditionalLaunchConfiguration.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/IAdditionalLaunchConfiguration.java new file mode 100644 index 0000000..531e5d2 --- /dev/null +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/IAdditionalLaunchConfiguration.java @@ -0,0 +1,5 @@ +package org.ntlab.traceCollector; + +public interface IAdditionalLaunchConfiguration { + public String[] getAdditionalClasspath(); +} diff --git a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/TracerLaunchConfigurationDelegate.java b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/TracerLaunchConfigurationDelegate.java index 6a3c161..4fbf5b3 100644 --- a/org.ntlab.traceCollector/src/org/ntlab/traceCollector/TracerLaunchConfigurationDelegate.java +++ b/org.ntlab.traceCollector/src/org/ntlab/traceCollector/TracerLaunchConfigurationDelegate.java @@ -2,10 +2,13 @@ import java.io.File; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; +import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.debug.core.ILaunch; @@ -29,6 +32,15 @@ @Override public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException { + +// int cnt = 0; +// for (IAdditionalLaunchConfiguration config : Activator.getDefault().getLoader().getAdditionalLaunchConfigurations()) { +// for (String str : config.getAdditionalClasspath()) { +// System.out.println(str); +// cnt++; +// } +// } + if (monitor == null) { monitor = new NullProgressMonitor(); } @@ -68,10 +80,32 @@ try { String bundlePath = FileLocator.resolve(Activator.getDefault().getBundle().getEntry("/")).getPath(); String tracerClassPath = FileLocator.resolve(this.getClass().getClassLoader().getResource(Tracer.TRACER_CLASS_PATH)).getPath(); - classpath = new String[configClasspath.length + 2]; + System.out.println(tracerClassPath); + + ExtensionLoader loader = Activator.getDefault().getLoader(); + List additionalClasspathList = new ArrayList<>(); + for (IAdditionalLaunchConfiguration config : loader.getAdditionalLaunchConfigurations()) { + for (String additionalClasspath : config.getAdditionalClasspath()) { + additionalClasspathList.add(additionalClasspath); + } + } + String[] additionalClasspaths = additionalClasspathList.toArray(new String[additionalClasspathList.size()]); + + classpath = new String[configClasspath.length + 2 + additionalClasspaths.length]; System.arraycopy(configClasspath, 0, classpath, 0, configClasspath.length); classpath[configClasspath.length] = tracerClassPath.substring(1, tracerClassPath.length() - Tracer.TRACER_CLASS_PATH.length()); + System.out.println(classpath[configClasspath.length]); classpath[configClasspath.length + 1] = bundlePath.substring(1) + Tracer.JAVASSIST_LIBRARY; + + for (int i = configClasspath.length + 2; i < classpath.length; i++) { + classpath[i] = additionalClasspaths[i - (configClasspath.length + 2)]; + } + + System.out.println(); +// classpath[configClasspath.length] += "tmp"; + for (int i = 0; i < classpath.length; i++) { + System.out.println(String.format("classpath[%d] = %s", i, classpath[i])); + } } catch (IOException e) { classpath = configClasspath; }