From 06eaddc154c3e27d5c6db696ac1da866b4565d69 Mon Sep 17 00:00:00 2001 From: "Gregory.Shrago" Date: Thu, 20 Jun 2019 20:20:12 +0300 Subject: [PATCH] introduce com.intellij.systemProperty EP GitOrigin-RevId: 8271cf55a5d335221a6685d4a762f01334ba2d6a --- .../com/intellij/idea/IdeaApplication.java | 14 ++++--- .../openapi/util/SystemPropertyBean.java | 41 +++++++++++++++++++ .../src/META-INF/PlatformExtensionPoints.xml | 1 + 3 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 platform/platform-impl/src/com/intellij/openapi/util/SystemPropertyBean.java diff --git a/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java b/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java index 64523ca7ebd0..e26ff8ab5fb2 100644 --- a/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java +++ b/platform/platform-impl/src/com/intellij/idea/IdeaApplication.java @@ -1,7 +1,10 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.idea; -import com.intellij.diagnostic.*; +import com.intellij.diagnostic.Activity; +import com.intellij.diagnostic.LoadingPhase; +import com.intellij.diagnostic.ParallelActivity; +import com.intellij.diagnostic.StartUpMeasurer; import com.intellij.diagnostic.StartUpMeasurer.Phases; import com.intellij.featureStatistics.fusCollectors.LifecycleUsageTriggerCollector; import com.intellij.ide.*; @@ -17,10 +20,7 @@ import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogEarthquakeShaker; -import com.intellij.openapi.util.Comparing; -import com.intellij.openapi.util.IconLoader; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.SystemInfo; +import com.intellij.openapi.util.*; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.registry.RegistryKeyBean; import com.intellij.openapi.util.text.StringUtil; @@ -156,6 +156,10 @@ public final class IdeaApplication { return pluginDescriptorsFuture .thenCompose(pluginDescriptors -> { CompletableFuture future = CompletableFuture.runAsync(() -> { + Activity sysActivity = ParallelActivity.PREPARE_APP_INIT.start("init system properties"); + SystemPropertyBean.initSystemProperties(); + sysActivity.end(); + Activity activity = ParallelActivity.PREPARE_APP_INIT.start("add registry keys"); RegistryKeyBean.addKeysFromPlugins(); activity.end(); diff --git a/platform/platform-impl/src/com/intellij/openapi/util/SystemPropertyBean.java b/platform/platform-impl/src/com/intellij/openapi/util/SystemPropertyBean.java new file mode 100644 index 000000000000..4e628fa8d5c3 --- /dev/null +++ b/platform/platform-impl/src/com/intellij/openapi/util/SystemPropertyBean.java @@ -0,0 +1,41 @@ +// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +package com.intellij.openapi.util; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.extensions.PluginAware; +import com.intellij.openapi.extensions.PluginDescriptor; +import com.intellij.util.xmlb.annotations.Attribute; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +/** + * @author gregsh + */ +public class SystemPropertyBean implements PluginAware { + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.systemProperty"); + + private PluginDescriptor myPluginDescriptor; + + public static void initSystemProperties() { + for (SystemPropertyBean bean : EP_NAME.getExtensionList()) { + if (System.getProperty(bean.name) != null) continue; + System.setProperty(bean.name, bean.value); + } + } + + @Attribute("name") + public String name; + + @Attribute("value") + public String value; + + @Override + public void setPluginDescriptor(@NotNull PluginDescriptor pluginDescriptor) { + myPluginDescriptor = pluginDescriptor; + } + + @Nullable + public PluginDescriptor getPluginDescriptor() { + return myPluginDescriptor; + } +} diff --git a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml index 0fc04d3a4450..e63fa85ef435 100644 --- a/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml @@ -344,6 +344,7 @@ +