| package com.intellij.ide.browsers; |
| |
| import com.intellij.execution.configurations.RunConfiguration; |
| import com.intellij.openapi.extensions.ExtensionPointName; |
| import org.jetbrains.annotations.NotNull; |
| import org.jetbrains.annotations.Nullable; |
| |
| /** |
| * Don't implement - consider to implement {@link com.jetbrains.javascript.debugger.FileUrlMapper} instead of providing mappings directly |
| * If you still want to implement - don't implement directly, use {@link com.intellij.javascript.debugger.execution.BaseJavaScriptDebuggerStarter} |
| */ |
| public interface JavaScriptDebuggerStarter<RC extends RunConfiguration, U> { |
| boolean isApplicable(@NotNull RunConfiguration runConfiguration); |
| |
| void start(@NotNull String url, @NotNull RC runConfiguration, @NotNull U userData, @Nullable WebBrowser browser); |
| |
| final class Util { |
| static final ExtensionPointName<JavaScriptDebuggerStarter> EP_NAME = ExtensionPointName.create("org.jetbrains.javaScriptDebuggerStarter"); |
| private static final Object NULL_OBJECT = new Object(); |
| |
| @Nullable |
| public static <RC extends RunConfiguration, T> JavaScriptDebuggerStarter<RC, T> get(@NotNull RC runConfiguration) { |
| for (JavaScriptDebuggerStarter<?, ?> starter : EP_NAME.getExtensions()) { |
| if (starter.isApplicable(runConfiguration)) { |
| //noinspection unchecked |
| return (JavaScriptDebuggerStarter<RC, T>)starter; |
| } |
| } |
| return null; |
| } |
| |
| public static <RC extends RunConfiguration> boolean start(@NotNull RC runConfiguration, @NotNull String url) { |
| return start(runConfiguration, url, null); |
| } |
| |
| public static <RC extends RunConfiguration> boolean start(@NotNull RC runConfiguration, @NotNull String url, @Nullable WebBrowser browser) { |
| JavaScriptDebuggerStarter<RC, Object> starter = get(runConfiguration); |
| if (starter == null) { |
| return false; |
| } |
| starter.start(url, runConfiguration, NULL_OBJECT, browser); |
| return true; |
| } |
| |
| public static <RC extends RunConfiguration> void startDebugOrLaunchBrowser(@NotNull RC runConfiguration, @NotNull StartBrowserSettings settings) { |
| String url = settings.getUrl(); |
| assert url != null; |
| startDebugOrLaunchBrowser(runConfiguration, url, settings.getBrowser(), settings.isStartJavaScriptDebugger()); |
| } |
| |
| public static <RC extends RunConfiguration> void startDebugOrLaunchBrowser(@NotNull RC runConfiguration, |
| @NotNull String url, |
| @Nullable WebBrowser browser, |
| boolean startDebugger) { |
| if (!startDebugger || !start(runConfiguration, url, browser)) { |
| BrowserLauncher.getInstance().browse(url, browser, runConfiguration.getProject()); |
| } |
| } |
| |
| public static boolean hasStarters() { |
| return EP_NAME.getExtensions().length > 0; |
| } |
| } |
| } |