introduce com.intellij.systemProperty EP

GitOrigin-RevId: 8271cf55a5d335221a6685d4a762f01334ba2d6a
This commit is contained in:
Gregory.Shrago
2019-07-02 06:52:16 +03:00
committed by intellij-monorepo-bot
parent 9b498304a6
commit 06eaddc154
3 changed files with 51 additions and 5 deletions
@@ -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<Void> 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();
@@ -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<SystemPropertyBean> 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;
}
}
@@ -344,6 +344,7 @@
<with attribute="implementationClass" implements="com.intellij.injected.editor.InjectedFileChangesHandlerProvider"/>
</extensionPoint>
<extensionPoint name="systemProperty" beanClass="com.intellij.openapi.util.SystemPropertyBean"/>
<extensionPoint name="registryKey" beanClass="com.intellij.openapi.util.registry.RegistryKeyBean"/>
<extensionPoint name="fileBreadcrumbsCollector" interface="com.intellij.codeInsight.breadcrumbs.FileBreadcrumbsCollector" area="IDEA_PROJECT"/>