Update Intellij libraries to 2019.3, for compatibility.

This ballooned the plugin size to 4MB, so add jarjar, which strips unused classes. The result is 1.8MB.

It also exposed a small bug in icon loading, where a leading '/' was required.

This is mostly done with the hope that Jeremy will stop getting nag mails from JetBrains.

Change-Id: I1a3bf92ac3a216bbcaaa80d40aa0a2887732612c
diff --git a/BUILD b/BUILD
index 3c30561..5580248 100644
--- a/BUILD
+++ b/BUILD
@@ -11,6 +11,11 @@
     ],
 )
 
+filegroup(
+    name = "jarjar_rules",
+    srcs = ["jarjar_rules.txt"],
+)
+
 # Need to include config files at appropriate paths in JAR
 genrule(
     name = "fidlplugin",
@@ -30,10 +35,17 @@
             OUT=`absolutify $(@D)`;
             PLUGIN=`absolutify $(location :fidlplugin_jar_deploy.jar)`;
             CONFIG=`absolutify $(locations :config)`;
+            JARJAR=`absolutify $(location //jarjar:jarjar_bin)`;
+            RULES_LOC=`absolutify $(location :jarjar_rules)`;
             cd $${TMP};
             $${JAR} xf $${PLUGIN};
             cp $${CONFIG} META-INF/;
             rm -rf build-data.properties;
-            $${JAR} --create --file=$${OUT}/$$(basename $(@)) *; """,
+            $${JAR} --create --file=$${OUT}/$$(basename $(@)).full *;
+            $${JARJAR} process $${RULES_LOC} $${OUT}/$$(basename $(@)).full $${OUT}/$$(basename $(@)) """,
     toolchains = ["@bazel_tools//tools/jdk:current_host_java_runtime"],
+    tools = [
+        ":jarjar_rules",
+        "//jarjar:jarjar_bin",
+    ],
 )
diff --git a/WORKSPACE b/WORKSPACE
index acfef70..8d2f20d 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -2,19 +2,19 @@
 
 load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
 
-# The plugin api for IntelliJ 2018.3.
+# The plugin api for IntelliJ 2019.3.3.
 http_archive(
-    name = "intellij_ce_2018_3",
+    name = "intellij_ce_2019_3_3",
     build_file = "//:intellij_platform_sdk/BUILD.idea",
-    sha256 = "0124028014d6bd5dd392114f0cd42f094239528d0da06c4c9dba4ef8921f4f35",
-    url = "https://download.jetbrains.com/idea/ideaIC-2018.3.5-no-jdk.tar.gz",
+    sha256 = "c40536791c754c30dbf378bd6b59e0524b0588f26ddb4d85a9f260cf13454d14",
+    url = "https://download.jetbrains.com/idea/ideaIC-2019.3.3-no-jbr.tar.gz",
 )
 
 http_archive(
     name = "grammar_kit",
     build_file = "//:grammar_kit/BUILD.grammar_kit",
-    sha256 = "de61e6c9b645b8401f37b65f248c0df20da6c151a61d720a806f6894b38dfc84",
-    url = "https://github.com/JetBrains/Grammar-Kit/releases/download/2019.1/grammar-kit-2019.1.zip",
+    sha256 = "a33f9732b8bed61e509a8282e9a9ae72130ab5e7e18a449eb60cf00bb142018d",
+    url = "https://github.com/JetBrains/Grammar-Kit/releases/download/2019.3/grammar-kit-2019.3.zip",
 )
 
 http_archive(
@@ -27,3 +27,21 @@
 load("@google_bazel_common//:workspace_defs.bzl", "google_common_workspace_rules")
 
 google_common_workspace_rules()
+
+http_archive(
+    name = "rules_jvm_external",
+    sha256 = "f1203ce04e232ab6fdd81897cf0ff76f2c04c0741424d192f28e65ae752ce2d6",
+    strip_prefix = "rules_jvm_external-2.2",
+    url = "https://github.com/bazelbuild/rules_jvm_external/archive/2.2.zip",
+)
+
+load("@rules_jvm_external//:defs.bzl", "maven_install")
+
+maven_install(
+    artifacts = [
+        "org.pantsbuild:jarjar:1.7.2",
+        "org.ow2.asm:asm:7.0",
+        "org.ow2.asm:asm-commons:7.0",
+    ],
+    repositories = ["https://repo1.maven.org/maven2"],
+)
diff --git a/grammar_kit/BUILD.grammar_kit b/grammar_kit/BUILD.grammar_kit
index 6b96a93..e71fd46 100644
--- a/grammar_kit/BUILD.grammar_kit
+++ b/grammar_kit/BUILD.grammar_kit
@@ -1,7 +1,6 @@
-
 package(default_visibility = ["//visibility:public"])
 
 java_import(
     name = "grammar_kit",
-    jars = ["grammar-kit/lib/grammar-kit-2019.1.jar"],
+    jars = ["grammar-kit/lib/grammar-kit-2019.3.jar"],
 )
diff --git a/intellij_platform_sdk/BUILD.idea b/intellij_platform_sdk/BUILD.idea
index 900f4b5..84445cb 100644
--- a/intellij_platform_sdk/BUILD.idea
+++ b/intellij_platform_sdk/BUILD.idea
@@ -17,14 +17,24 @@
 
 java_import(
     name = "util",
-    jars = glob(["idea-*/lib/util.jar"]),
+    jars = glob([
+        "idea-*/lib/util.jar",
+    ]) + glob([
+        "idea-*/lib/platform-util-ui.jar",
+    ]),
     neverlink = 1,
     tags = ["intellij-provided-by-sdk"],
 )
 
 java_import(
     name = "platform-api",
-    jars = glob(["idea-*/lib/platform-api.jar"]) + glob(["idea-*/lib/platform-impl.jar"]),
+    jars = glob([
+        "idea-*/lib/platform-api.jar",
+    ]) + glob([
+        "idea-*/lib/platform-impl.jar",
+    ]) + glob([
+        "idea-*/lib/spellchecker.jar",
+    ]),
     neverlink = 1,
     tags = ["intellij-provided-by-sdk"],
 )
diff --git a/jarjar/BUILD b/jarjar/BUILD
new file mode 100644
index 0000000..9f0da46
--- /dev/null
+++ b/jarjar/BUILD
@@ -0,0 +1,14 @@
+# JarJar, a JAR shrinker / shader
+
+package(default_visibility = ["//visibility:public"])
+
+java_binary(
+    name = "jarjar_bin",
+    main_class = "org.pantsbuild.jarjar.Main",
+    visibility = ["//visibility:public"],
+    runtime_deps = [
+        "@maven//:org_ow2_asm_asm",
+        "@maven//:org_ow2_asm_asm_commons",
+        "@maven//:org_pantsbuild_jarjar",
+    ],
+)
diff --git a/jarjar_rules.txt b/jarjar_rules.txt
new file mode 100644
index 0000000..22c4986
--- /dev/null
+++ b/jarjar_rules.txt
@@ -0,0 +1,2 @@
+keep fuchsia.developer.plugin.fidl.**
+rule com.google.** fuchsia.developer.plugin.fidl.com.google.@0
diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml
index e237944..a6ae9b2 100644
--- a/resources/META-INF/plugin.xml
+++ b/resources/META-INF/plugin.xml
@@ -23,6 +23,7 @@
             <li>Add flexible keyword, allow strict on more declarations </li>
             <li>Support union ordinals and remove xunion.</li>
             <li>Support service declarations.</li>
+            <li>Improve compatibility with IJ 2019.3, and shrink JAR size</li>
           </ul>
         </li>
         <li><b>0.13</b>
diff --git a/src/fuchsia/developer/plugin/fidl/BUILD b/src/fuchsia/developer/plugin/fidl/BUILD
index 8e42f29..dd15b03 100644
--- a/src/fuchsia/developer/plugin/fidl/BUILD
+++ b/src/fuchsia/developer/plugin/fidl/BUILD
@@ -19,7 +19,7 @@
     main_class = "org.intellij.grammar.Main",
     runtime_deps = [
         "@grammar_kit",
-        "@intellij_ce_2018_3//:sdk",
+        "@intellij_ce_2019_3_3//:sdk",
     ],
 )
 
@@ -149,9 +149,9 @@
     deps = [
         "@google_bazel_common//third_party/java/guava",
         "@grammar_kit",
-        "@intellij_ce_2018_3//:annotations",
-        "@intellij_ce_2018_3//:platform-api",
-        "@intellij_ce_2018_3//:util",
+        "@intellij_ce_2019_3_3//:annotations",
+        "@intellij_ce_2019_3_3//:platform-api",
+        "@intellij_ce_2019_3_3//:util",
     ],
 )
 
diff --git a/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java b/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java
index 7ec809e..70dead2 100644
--- a/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java
+++ b/src/fuchsia/developer/plugin/fidl/psi/FidlNamedElementImpl.java
@@ -33,7 +33,7 @@
   private static final Map<Class<? extends FidlNamedElementImpl>, Icon> icons;
 
   static {
-    String path = "fuchsia/developer/plugin/fidl/icons/";
+    String path = "/fuchsia/developer/plugin/fidl/icons/";
     icons =
         ImmutableMap.<Class<? extends FidlNamedElementImpl>, Icon>builder()
             .put(FidlBitsDeclarationImpl.class, IconLoader.getIcon(path + "B.png"))