From ca0bd802637e82c330ecbf2c5300c093392c53b1 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Wed, 1 Feb 2017 15:06:13 +0100 Subject: [PATCH] BundledKeymapProvider should be able to override default load logic --- .../openapi/keymap/impl/BundledKeymapProvider.java | 11 +++++++++++ .../com/intellij/openapi/keymap/impl/DefaultKeymap.kt | 5 +---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/BundledKeymapProvider.java b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/BundledKeymapProvider.java index 9ed011b207aa..bd8c70170fef 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/BundledKeymapProvider.java +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/BundledKeymapProvider.java @@ -16,9 +16,14 @@ package com.intellij.openapi.keymap.impl; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.util.io.URLUtil; import org.jetbrains.annotations.NotNull; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; import java.util.List; +import java.util.function.Function; /** * Name file as "Your scheme name.xml" and put it to keymaps. @@ -29,4 +34,10 @@ public interface BundledKeymapProvider { @NotNull List getKeymapFileNames(); + + default R load(@NotNull String key, @NotNull Function consumer) throws IOException { + try (InputStream stream = URLUtil.openResourceStream(new URL("file:///keymaps/" + key))) { + return consumer.apply(stream); + } + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/DefaultKeymap.kt b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/DefaultKeymap.kt index d3862866ed4c..015953ece27a 100644 --- a/platform/platform-impl/src/com/intellij/openapi/keymap/impl/DefaultKeymap.kt +++ b/platform/platform-impl/src/com/intellij/openapi/keymap/impl/DefaultKeymap.kt @@ -27,7 +27,6 @@ import com.intellij.openapi.util.SystemInfo import com.intellij.openapi.util.io.FileUtilRt import gnu.trove.THashMap import org.jdom.Element -import java.net.URL import java.util.* private val LOG = Logger.getInstance("#com.intellij.openapi.keymap.impl.DefaultKeymap") @@ -65,9 +64,7 @@ open class DefaultKeymap { LOG.catchAndLog { loadKeymapsFromElement(object: SchemeDataHolder { - override fun read(): Element { - return JDOMUtil.loadResourceDocument(URL("file:///keymaps/$key")).rootElement - } + override fun read() = provider.load(key) { JDOMUtil.load(it) } override fun updateDigest(scheme: KeymapImpl) { }