summaryrefslogtreecommitdiff
path: root/xml/impl/src/com/intellij/ide/browsers/JavaScriptDebuggerStarter.java
blob: 71dbb0c0dd71da4bbd3b1ef88a2ee8d9a5b4681e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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;
    }
  }
}