blob: b3c379fd0eb041c5f7b2ecbed9a027ff434e2584 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.snippeteditor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLDecoder;
import java.security.CodeSource;
import java.security.ProtectionDomain;
/**
* Support class for launching a snippet evaluation.
* <p>
* CAUTION: This class gets compiled with target=jsr14, see scripts/buildExtraJAR.xml. Don't use URLClassLoader#close() or other post-1.4 APIs!
*/
public class ScrapbookMain {
public static void main(String[] args) {
URL[] urls= getClasspath(args);
if (urls == null) {
return;
}
while (true) {
try {
evalLoop(urls);
} catch (ClassNotFoundException e) {
return;
} catch (NoSuchMethodException e) {
return;
} catch (InvocationTargetException e) {
return;
} catch (IllegalAccessException e) {
return;
}
}
}
static void evalLoop(URL[] urls) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {
@SuppressWarnings("resource")
ClassLoader cl= new URLClassLoader(urls, null);
Class<?> clazz= cl.loadClass("org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookMain1"); //$NON-NLS-1$
Method method= clazz.getDeclaredMethod("eval", new Class[] {Class.class}); //$NON-NLS-1$
method.invoke(null, new Object[] {ScrapbookMain.class});
}
/**
* The magic "no-op" method, where {@link org.eclipse.jdt.internal.debug.ui.snippeteditor.ScrapbookLauncher#createMagicBreakpoint(String)} sets a
* breakpoint.
* <p>
*/
public static void nop() {
try {
Thread.sleep(100);
} catch(InterruptedException e) {
}
}
static URL[] getClasspath(String[] urlStrings) {
//The URL Strings MUST be properly encoded
//using URLEncoder...see ScrapbookLauncher for details
URL[] urls= new URL[urlStrings.length + 1];
for (int i = 0; i < urlStrings.length; i++) {
try {
urls[i + 1] = new URL(URLDecoder.decode(urlStrings[i]));
} catch (MalformedURLException e) {
return null;
}
}
ProtectionDomain pd = ScrapbookMain.class.getProtectionDomain();
if (pd == null) {
return null;
}
CodeSource cs = pd.getCodeSource();
if (cs == null) {
return null;
}
urls[0] = cs.getLocation();
return urls;
}
}