[registry] IJPL-175398 Move plugin registry keys out of the platform registry.properties

GitOrigin-RevId: 70ed1d4864da4788fd77a719a9063b560c5bb5d6
This commit is contained in:
Yuriy Artamonov
2025-10-20 12:14:06 +00:00
committed by intellij-monorepo-bot
parent 24c4e4b024
commit b42ac48323
18 changed files with 418 additions and 385 deletions
@@ -108,6 +108,7 @@
<keymapExtension implementation="com.intellij.debugger.actions.DebuggerKeymapExtension"/>
<xdebugger.settings implementation="com.intellij.debugger.settings.JavaDebuggerSettings"/>
<registryKey key="execution.java.always.debug" defaultValue="false" description="Always run java processes with the debug agent"/>
<xdebugger.breakpointGroupingRule implementation="com.intellij.debugger.ui.XBreakpointGroupingByPackageRule"/>
<xdebugger.breakpointGroupingRule implementation="com.intellij.debugger.ui.XBreakpointGroupingByClassRule"/>
@@ -219,6 +220,8 @@
description="The timeout between the hit run-to-cursor breakpoint in another thread/coroutine and pause the debugger"/>
<registryKey key="debugger.run.to.cursor.waited.threads.limit" defaultValue="1"
description="How many of threads allow to wait on the hit run-to-cursor breakpoint for the desired hit"/>"/>
<registryKey key="debugger.log.jdi.in.unit.tests" defaultValue="false"
description="Enable full JDI logging under DebugProcessImpl.LOG.debug for unit tests"/>
</extensions>
<actions>
@@ -365,5 +365,8 @@
<referenceInjector implementation="com.intellij.microservices.jvm.url.HttpUrlReferenceInjector"/>
<referenceInjector implementation="com.intellij.microservices.jvm.url.WSUrlReferenceInjector"/>
<referenceInjector implementation="com.intellij.microservices.jvm.url.HttpMethodReferenceInjector"/>
<registryKey key="batch.inspections.ignored.jvm.languages" defaultValue="Groovy,Scala"
description="Disable UAST processing for JVM languages; a comma separated list of UAST capable language ids."/>
</extensions>
</idea-plugin>
@@ -678,10 +678,6 @@
implementationClass="com.intellij.codeInsight.hint.NextParameterAfterCompletionHandler"/>
<compiler.updateResourcesBuildContributor implementation="com.intellij.compiler.impl.JavaResourcesBuildContributor"/>
<!--<expectedTypesProvider implementation="com.intellij.codeInsight.JavaExpectedTypesProvider"/>-->
<projectService serviceImplementation="com.intellij.execution.testDiscovery.JavaAutoRunManager"/>
<registryKey defaultValue="true" description="Trigger autotest on delay instead of build events" key="trigger.autotest.on.delay"/>
@@ -811,6 +807,10 @@
<applicationService serviceInterface="com.intellij.execution.vmOptions.VMOptionsService"
serviceImplementation="com.intellij.execution.vmOptions.VMOptionsServiceImpl"/>
<registryKey key="ide.jvm.run.marker" defaultValue="false" description="Enable JVM-lang-based run line markers"/>
<registryKey key="ide.jvm.command.line.clear.all.environments" defaultValue="true"
description="Clear all environments when running a JVM command line application"/>
<runDashboardCustomizer implementation="com.intellij.execution.CommonJavaRunDashboardCustomizer" id="commonJavaCustomizer"/>
<warmupConfigurator implementation="com.intellij.ide.warmup.JdkWarmupConfigurator"/>
@@ -2785,12 +2785,19 @@
<registryKey key="java.completion.methods.use.tags"
defaultValue="true"
description="Use additional tags for methods for completion"/>
<registryKey key="ide.java.completion.suggest.static.after.instance"
defaultValue="false"
description="Suggest static methods/fields after instance qualifier in Java completion"/>
<registryKey key="java.create.compact.source.file.separately"
defaultValue="true"
description="Show 'Create java compact file' separately from all other classes"/>
<virtualFileCustomDataProvider implementation="com.intellij.ide.JavaCodeStyleSettingsCustomDataSynchronizer"/>
<registryKey key="compiler.external.javac.keep.alive.timeout" defaultValue="300000"
description="If not used for the specified period of time or longer, the IDE will shut down the cached javac compilation process"/>
<registryKey key="compiler.build.can.use.eel" defaultValue="true" description="Allow using Eel API to run build processes"/>
</extensions>
<extensions defaultExtensionNs="org.jetbrains">
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,5 @@
<html>
<body>
Highlights keys in `registry.properties` that are not allowed in the platform registry and must be moved to plugins.
</body>
</html>
@@ -659,7 +659,13 @@
implementation="org.jetbrains.idea.devkit.references.MessageBundleReferenceContributor$ImplicitUsageProvider"/>
<codeInsight.implicitSubclassProvider implementation="org.jetbrains.idea.devkit.inspections.DevKitImplicitSubclassProvider"/>
<annotator language="Properties" implementationClass="org.jetbrains.idea.devkit.inspections.RegistryPropertiesAnnotator"/>
<localInspection language="Properties"
level="ERROR"
enabledByDefault="true"
key="inspections.plugin.keys.in.platform.registry"
groupPathKey="inspections.group.path" groupKey="inspections.group.code"
shortName="PluginKeysAreProhibitedInPlatformRegistry"
implementationClass="org.jetbrains.idea.devkit.inspections.RegistryPropertiesInspection"/>
<moduleService serviceImplementation="org.jetbrains.idea.devkit.build.PluginBuildConfiguration"/>
<backgroundPostStartupActivity
@@ -832,4 +832,5 @@ plugins.go.description=Go language
plugins.php.description=PHP language
plugins.ruby.description=Ruby language
plugins.rust.description=Rust language
inspection.use.optimized.eel.functions.display.name=Use optimized function from EelApi
inspection.use.optimized.eel.functions.display.name=Use optimized function from EelApi
inspections.plugin.keys.in.platform.registry=Plugin keys defined in platform regitry.properties
@@ -2,36 +2,27 @@
package org.jetbrains.idea.devkit.inspections
import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo
import com.intellij.codeInsight.intention.preview.IntentionPreviewUtils
import com.intellij.lang.annotation.AnnotationHolder
import com.intellij.lang.annotation.Annotator
import com.intellij.lang.annotation.HighlightSeverity
import com.intellij.lang.properties.psi.PropertiesFile
import com.intellij.codeInspection.*
import com.intellij.lang.properties.PropertiesImplUtil
import com.intellij.lang.properties.psi.impl.PropertyImpl
import com.intellij.lang.properties.psi.impl.PropertyKeyImpl
import com.intellij.openapi.editor.Editor
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.IntelliJProjectUtil
import com.intellij.openapi.project.Project
import com.intellij.openapi.ui.Messages
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiElementVisitor
import com.intellij.psi.PsiFile
import com.intellij.util.IncorrectOperationException
import com.intellij.util.PsiNavigateUtil
import org.jetbrains.annotations.Nls
import org.jetbrains.annotations.NonNls
import org.jetbrains.idea.devkit.DevKitBundle
import java.util.*
@NonNls
internal const val REGISTRY_PROPERTIES_FILENAME = "registry.properties"
@NonNls
internal const val DESCRIPTION_SUFFIX = ".description"
@NonNls
internal const val RESTART_REQUIRED_SUFFIX = ".restartRequired"
internal fun isImplicitUsageKey(keyName: String): Boolean {
@@ -39,120 +30,120 @@ internal fun isImplicitUsageKey(keyName: String): Boolean {
keyName.endsWith(RESTART_REQUIRED_SUFFIX)
}
private val PLUGIN_GROUP_NAMES = setOf(
"appcode", "cidr", "clion",
"cvs", "git", "github", "svn", "hg4idea", "tfs",
"dart", "markdown",
"java", "javac", "uast", "junit4", "dsm",
"js", "javascript", "typescript", "nodejs", "eslint", "jest",
"ruby", "rubymine",
"groovy", "grails", "python", "php",
"kotlin", "spring", "jupyter", "dataspell", "javafx",
"maven", "gradle", "android", "eclipse",
"rider", "compiler"
)
internal fun isRegistryPropertiesFile(psiFile: PsiFile): Boolean {
return IntelliJProjectUtil.isIntelliJPlatformProject(psiFile.project) && psiFile.name == REGISTRY_PROPERTIES_FILENAME
}
/**
* Highlights key in `registry.properties` without matching `key.description` entry + corresponding quickfix.
*/
private class RegistryPropertiesAnnotator : Annotator, DumbAware {
@NonNls
private val PLUGIN_GROUP_NAMES = setOf(
"appcode", "cidr", "clion",
"cvs", "git", "github", "svn", "hg4idea", "tfs",
"dart", "markdown",
"java", "javac", "uast", "junit4", "dsm",
"js", "javascript", "typescript", "nodejs", "eslint", "jest",
"ruby", "rubymine",
"groovy", "grails", "python", "php",
"kotlin", "spring", "jupyter", "dataspell", "javafx",
"maven", "gradle", "android", "eclipse"
)
internal class RegistryPropertiesInspection : LocalInspectionTool() {
override fun buildVisitor(holder: ProblemsHolder, isOnTheFly: Boolean, session: LocalInspectionToolSession): PsiElementVisitor {
if (!isRegistryPropertiesFile(holder.file)) return PsiElementVisitor.EMPTY_VISITOR
override fun annotate(element: PsiElement, holder: AnnotationHolder) {
if (element !is PropertyKeyImpl) return
val propertiesFile = PropertiesImplUtil.getPropertiesFile(holder.file)
val file = holder.currentAnnotationSession.file
if (!isRegistryPropertiesFile(file)) {
return
}
return object : PsiElementVisitor() {
override fun visitElement(element: PsiElement) {
if (element !is PropertyKeyImpl) return
val propertyName = element.text
if (isImplicitUsageKey(propertyName)) {
return
}
val propertyName = element.text
if (isImplicitUsageKey(propertyName)) {
return
}
val groupName = propertyName.substringBefore('.').lowercase(Locale.getDefault())
val groupName = propertyName.substringBefore('.').lowercase(Locale.getDefault())
if (PLUGIN_GROUP_NAMES.contains(groupName) ||
propertyName.startsWith("editor.config.") ||
propertyName.startsWith("debugger.kotlin.") ||
propertyName.startsWith("debugger.enable.kotlin.") ||
propertyName.startsWith("ide.java.") ||
propertyName.startsWith("execution.java.") ||
propertyName.startsWith("debugger.log.jdi.")) {
if (PLUGIN_GROUP_NAMES.contains(groupName) ||
propertyName.startsWith("editor.config.") ||
propertyName.startsWith("debugger.kotlin.") ||
propertyName.startsWith("debugger.enable.kotlin.") ||
propertyName.startsWith("ide.java.") ||
propertyName.startsWith("ide.jvm.") ||
propertyName.startsWith("idea.profiler.") ||
propertyName.startsWith("execution.java.") ||
propertyName.startsWith("debugger.log.jdi.")) {
holder.newAnnotation(HighlightSeverity.ERROR, DevKitBundle.message("registry.properties.annotator.plugin.keys.use.ep"))
.withFix(ShowEPDeclarationIntention(propertyName)).create()
}
holder.registerProblem(
element,
DevKitBundle.message("registry.properties.annotator.plugin.keys.use.ep"),
ShowEPDeclarationIntention(propertyName, element)
)
}
val propertiesFile = file as PropertiesFile
val descriptionProperty = propertiesFile.findPropertyByKey(propertyName + DESCRIPTION_SUFFIX)
if (descriptionProperty == null) {
holder.newAnnotation(HighlightSeverity.WARNING,
DevKitBundle.message("registry.properties.annotator.key.no.description.key", propertyName))
.withFix(AddDescriptionKeyIntention(propertyName)).create()
val descriptionProperty = propertiesFile?.findPropertyByKey(propertyName + DESCRIPTION_SUFFIX)
if (descriptionProperty == null) {
holder.registerProblem(
element,
DevKitBundle.message("registry.properties.annotator.key.no.description.key", propertyName),
ProblemHighlightType.WARNING,
AddDescriptionKeyIntention(propertyName, element)
)
}
}
}
}
}
private class ShowEPDeclarationIntention(private val propertyName: String) : IntentionAction, DumbAware {
override fun startInWriteAction(): Boolean = false
private class ShowEPDeclarationIntention(private val propertyName: String, element: PsiElement) : LocalQuickFixOnPsiElement(element), DumbAware {
override fun startInWriteAction(): Boolean = false
override fun getFamilyName(): String = DevKitBundle.message("registry.properties.annotator.show.ep.family.name")
override fun getText(): String = DevKitBundle.message("registry.properties.annotator.show.ep.name", propertyName)
override fun generatePreview(project: Project, editor: Editor, psiFile: PsiFile): IntentionPreviewInfo {
return IntentionPreviewInfo.EMPTY
override fun invoke(project: Project, psiFile: PsiFile, startElement: PsiElement, endElement: PsiElement) {
val propertiesFile = psiFile.let { PropertiesImplUtil.getPropertiesFile(it) } ?: return
val defaultValue = propertiesFile.findPropertyByKey(propertyName)?.value
val description = propertiesFile.findPropertyByKey(propertyName + DESCRIPTION_SUFFIX)?.value
@NonNls var restartRequiredText = ""
if (propertiesFile.findPropertyByKey(propertyName + RESTART_REQUIRED_SUFFIX) != null) {
restartRequiredText = "restartRequired=\"true\""
}
override fun getFamilyName(): String = DevKitBundle.message("registry.properties.annotator.show.ep.family.name")
override fun isAvailable(project: Project, editor: Editor?, psiFile: PsiFile?): Boolean = true
override fun getText(): String = DevKitBundle.message("registry.properties.annotator.show.ep.name", propertyName)
override fun invoke(project: Project, editor: Editor?, psiFile: PsiFile?) {
val propertiesFile = psiFile as PropertiesFile
val defaultValue = propertiesFile.findPropertyByKey(propertyName)!!.value
val description = propertiesFile.findPropertyByKey(propertyName + DESCRIPTION_SUFFIX)?.value
@NonNls var restartRequiredText = ""
if (propertiesFile.findPropertyByKey(propertyName + RESTART_REQUIRED_SUFFIX) != null) {
restartRequiredText = "restartRequired=\"true\""
}
val epText = """
val epText = """
<registryKey key="${propertyName}" defaultValue="${defaultValue}" ${restartRequiredText}
description="${description}"/>
""".trimIndent()
Messages.showMultilineInputDialog(project,
DevKitBundle.message("registry.properties.annotator.show.ep.message"),
DevKitBundle.message("registry.properties.annotator.show.ep.title"),
epText, null, null)
}
Messages.showMultilineInputDialog(project,
DevKitBundle.message("registry.properties.annotator.show.ep.message"),
DevKitBundle.message("registry.properties.annotator.show.ep.title"),
epText, null, null)
}
private class AddDescriptionKeyIntention(private val myPropertyName: String) : IntentionAction, DumbAware {
override fun generatePreview(project: Project, previewDescriptor: ProblemDescriptor): IntentionPreviewInfo = IntentionPreviewInfo.EMPTY
}
@Nls
override fun getText(): String = DevKitBundle.message("registry.properties.annotator.add.description.text", myPropertyName)
private class AddDescriptionKeyIntention(private val myPropertyName: String, element: PsiElement) : LocalQuickFixOnPsiElement(element), DumbAware {
override fun startInWriteAction(): Boolean = true
override fun getText(): @Nls String = DevKitBundle.message("registry.properties.annotator.add.description.text", myPropertyName)
override fun getFamilyName(): @Nls String = DevKitBundle.message("registry.properties.annotator.add.description.family.name")
@Nls
override fun getFamilyName(): String = DevKitBundle.message("registry.properties.annotator.add.description.family.name")
override fun invoke(project: Project, psiFile: PsiFile, startElement: PsiElement, endElement: PsiElement) {
val propertiesFile = psiFile.let { PropertiesImplUtil.getPropertiesFile(it) } ?: return
override fun isAvailable(project: Project, editor: Editor, psiFile: PsiFile): Boolean = true
val originalProperty = propertiesFile.findPropertyByKey(myPropertyName)
val descriptionProperty = propertiesFile.addPropertyAfter(myPropertyName + DESCRIPTION_SUFFIX, "Description", originalProperty)
@Throws(IncorrectOperationException::class)
override fun invoke(project: Project, editor: Editor, psiFile: PsiFile) {
val propertiesFile = psiFile as PropertiesFile
val originalProperty = propertiesFile.findPropertyByKey(myPropertyName) as PropertyImpl?
val descriptionProperty = propertiesFile.addPropertyAfter(myPropertyName + DESCRIPTION_SUFFIX, "Description", originalProperty)
val valueNode = (descriptionProperty.psiElement as PropertyImpl).valueNode!!
if (!IntentionPreviewUtils.isPreviewElement(valueNode.psi)) {
PsiNavigateUtil.navigate(valueNode.psi)
val psi = descriptionProperty.psiElement
if (psi is PropertyImpl) {
val valuePsi = psi.valueNode?.psi ?: psi
if (!IntentionPreviewUtils.isPreviewElement(valuePsi)) {
PsiNavigateUtil.navigate(valuePsi)
}
}
override fun startInWriteAction(): Boolean = true
else if (!IntentionPreviewUtils.isPreviewElement(psi)) {
PsiNavigateUtil.navigate(psi)
}
}
override fun generatePreview(project: Project, previewDescriptor: ProblemDescriptor): IntentionPreviewInfo = IntentionPreviewInfo.EMPTY
}
@@ -12,7 +12,7 @@ import java.util.stream.Stream;
public class DevkitInspectionsRegistrationCheckTest extends BasePlatformTestCase {
private static final int EXPECTED_INSPECTIONS_NUMBER = 87;
private static final int EXPECTED_INSPECTIONS_NUMBER = 88;
/**
* Inspections that are finished and intentionally disabled.
@@ -71,7 +71,7 @@ public class PluginConfigReferenceTest extends JavaCodeInsightFixtureTestCase {
assertEquals(AllIcons.Nodes.PluginRestart, plugin.getIcon());
final LookupElementPresentation properties = getLookupElementPresentation("vcs.showConsole");
assertEquals(" Show 'Console' tab in VCS toolwindow that logs all write-commands performed by IDE.", properties.getTailText());
assertEquals(" Show the 'Console' tab in the VCS toolwindow that logs all write-commands performed by IDE.", properties.getTailText());
assertEquals("true", properties.getTypeText());
assertEquals(AllIcons.Nodes.Plugin, properties.getIcon());
}
@@ -6,8 +6,8 @@
<![CDATA[
Enables interoperability with Eclipse and provides the following features:
<ul>
<li>Open Eclipse project in IntelliJ IDEA</li>
<li>Import Eclipse project into IntelliJ IDEA</li>
<li>Open an Eclipse project in IntelliJ IDEA</li>
<li>Import an Eclipse project into IntelliJ IDEA</li>
<li>Export IntelliJ IDEA project into Eclipse</li>
<li>Convert IntelliJ IDEA module to Eclipse-compatible format</li>
<li>Synchronize Eclipse project files</li>
@@ -48,6 +48,7 @@
<notificationGroup id="Unknown Natures Detected" displayType="BALLOON" bundle="messages.EclipseBundle" key="notification.group.unknown.natures"/>
<welcome.projectDetector implementation="org.jetbrains.idea.eclipse.detect.EclipseProjectDetector"/>
<statistics.counterUsagesCollector implementationClass="org.jetbrains.idea.eclipse.detect.EclipseProjectDetectorUsagesCollector"/>
<registryKey key="eclipse.scan.home.directory" defaultValue="true" description="Scan home directory for existing Eclipse projects"/>
</extensions>
<actions>
<action id="ExportToEclipse" class="org.jetbrains.idea.eclipse.export.ExportEclipseProjectsAction">
@@ -11,6 +11,7 @@ import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileSystemUtil;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.impl.welcomeScreen.ProjectDetector;
import com.intellij.util.ArrayUtil;
@@ -53,7 +54,7 @@ public final class EclipseProjectDetector extends ProjectDetector {
for (String appLocation : getStandardAppLocations()) {
collectProjects(projects, Path.of(appLocation));
}
if (PropertiesComponent.getInstance().getBoolean("eclipse.scan.home.directory", true)) {
if (Registry.is("eclipse.scan.home.directory", true)) {
visitFiles(new File(home), file1 -> scanForProjects(file1.getPath(), projects), 2);
}
}
@@ -80,7 +81,7 @@ public final class EclipseProjectDetector extends ProjectDetector {
ProjectGroup group = ContainerUtil.find(manager.getGroups(), g -> groupName.equals(g.getName()));
String property = "eclipse.projects.detected";
if (group == null && PropertiesComponent.getInstance().isValueSet(property)) {
// the group was removed by user
// the user removed the group
return;
}
@@ -129,6 +129,10 @@
description="Specifies port at which Gradle target server process will wait for debugger connections. -1 means disabled feature."/>
<registryKey key="gradle.refresh.project.outputs" defaultValue="true"
description="After a Gradle task, do a shallow refresh of modules outputs in VFS"/>
<registryKey key="android.gradle.project.startup.activity.disabled" defaultValue="false"
description="Disable Gradle post-startup activity for Android projects"/>
<registryKey key="android.sdk.local.properties.update.disabled" defaultValue="false"
description="Disable update android sdk for local.properties"/>
<localInspection language="UAST" groupPath="Gradle" shortName="ConfigurationAvoidance"
bundle="messages.GradleInspectionBundle"
@@ -210,6 +210,8 @@
<search.optionContributor implementation="org.jetbrains.plugins.gradle.config.GradleSearchableOptionContributor"/>
<registryKey key="GRADLE.system.in.process" defaultValue="true"
description="Whether IDEA should use 'in-process' mode for interaction with Gradle API"/>
<registryKey key="gradle.daemon.jvm.criteria" defaultValue="true"
description="Enable the Gradle Daemon JVM criteria allowing to detect provisioning required toolchain for the build"/>
<registryKey key="gradle.daemon.jvm.criteria.new.project" defaultValue="false"
@@ -246,6 +248,9 @@
<registryKey key="gradle.daemon.legacy.dependency.resolver" defaultValue="false"
description="Use ArtifactResolutionQuery instead of ArtifactView to resolve Javadoc/Sources"/>
<registryKey key="gradle.sync.use.eel.for.wsl" defaultValue="true" description="Use EEL API for WSL projects"/>
<registryKey key="gradle.auto.auto.jdk.fix.disabled" defaultValue="false"
description="Disable attempt to fix unknown JDK in Gradle configuration on project open"/>
<commandLineInspectionProjectConfigurator implementation="org.jetbrains.plugins.gradle.GradleCommandLineProjectConfigurator"/>
<warmupConfigurator implementation="org.jetbrains.plugins.gradle.GradleWarmupConfigurator"/>
<notificationGroup id="Gradle Notification Group" displayType="STICKY_BALLOON" bundle="messages.GradleBundle" key="notification.group.gradle"/>
@@ -105,6 +105,9 @@
<internalFileTemplate name="FxmlFile"/>
<spellchecker.bundledDictionaryProvider implementation="org.jetbrains.plugins.javaFX.JavafxBundledDictionaryProvider"/>
<registryKey key="javafx.fxml.controller.from.loader" defaultValue="false"
description="Resolve FXML controllers specified with FXMLLoader.setController()"/>
</extensions>
<projectListeners>
@@ -28,6 +28,8 @@
<extensions defaultExtensionNs="com.intellij">
<debugger.creationStackTraceProvider implementation="org.jetbrains.kotlin.idea.debugger.coroutine.CoroutineAsyncStackTraceProvider"/>
<debugger.dumpItemsProvider implementation="org.jetbrains.kotlin.idea.debugger.coroutine.view.CoroutinesDumpAsyncProvider"/>
<registryKey key="debugger.kotlin.show.coroutines.in.threadDumpPanel" defaultValue="true"
description="Merge coroutine dump with thread dump in ThreadDumpPanel"/>
<runConfigurationExtension implementation="org.jetbrains.kotlin.idea.debugger.coroutine.CoroutineDebugConfigurationExtension"/>
@@ -38,6 +40,8 @@
<applicationService
serviceInterface="org.jetbrains.kotlin.idea.debugger.core.StackFrameInterceptor"
serviceImplementation="org.jetbrains.kotlin.idea.debugger.coroutine.CoroutineStackFrameInterceptor"/>
<registryKey key="debugger.kotlin.auto.show.coroutines.view" defaultValue="false"
description="Automatically open coroutines view if stack trace contains coroutine stack frames"/>
<xdebugger.settings implementation="org.jetbrains.kotlin.idea.debugger.KotlinDebuggerSettings"/>
<xdebugger.breakpointType implementation="org.jetbrains.kotlin.idea.debugger.breakpoints.KotlinFieldBreakpointType"/>
@@ -47,7 +51,7 @@
<debugger.compoundRendererProvider id="KotlinClassRendererProvider"
implementation="org.jetbrains.kotlin.idea.debugger.core.render.KotlinClassRendererProvider"/>
<debugger.positionManagerFactory implementation="org.jetbrains.kotlin.idea.debugger.core.KotlinPositionManagerFactory"/>
<registryKey key="debugger.kotlin.inline.stack.trace.enabled" defaultValue="true" description="Enable inline stack trace"/>
<debugger.sourcePositionHighlighter implementation="org.jetbrains.kotlin.idea.debugger.core.KotlinSourcePositionHighlighter"/>
<debugger.sourcePositionProvider implementation="org.jetbrains.kotlin.idea.debugger.core.KotlinSourcePositionProvider"/>
@@ -64,6 +68,8 @@
<debuggerEditorTextProvider
language="kotlin"
implementationClass="org.jetbrains.kotlin.idea.debugger.core.EnclosingKotlinEditorTextProvider"/>
<registryKey key="debugger.kotlin.analysis.api.editor.text.provider" defaultValue="true"
description="Use Analysis API-based implementation of 'EditorTextProvider'"/>
<debuggerClassFilterProvider implementation="org.jetbrains.kotlin.idea.debugger.core.filter.KotlinDebuggerInternalClassesFilterProvider"/>
@@ -100,5 +106,21 @@
description="Use Analysis API-based implementation for file applicability checker"
defaultValue="false"
restartRequired="false"/>
<registryKey
key="debugger.kotlin.multiline.lambda.breakpoints"
defaultValue="false"
description="Allow installing breakpoint on multiline lambdas"/>
<registryKey
key="debugger.kotlin.report.smart.step.into.targets.detection.failure"
defaultValue="true"
description="Report an error when smart targets detection in bytecode failed (leads to a failure in tests)"/>
<registryKey
key="debugger.kotlin.step.through.inline.lambdas"
defaultValue="true"
description="Step over action steps into inline lambdas (e.g., calls of let/run/synchronized/...)"/>
<registryKey
key="debugger.enable.kotlin.evaluator.in.java.context"
defaultValue="false"
description="Enable Kotlin evaluation features when hitting/suspending in Java frames (suggest Kotlin language in evaluation prompts, conditional breakpoints, and 'Evaluate and log' field; support Kotlin watches)"/>
</extensions>
</idea-plugin>
@@ -79,6 +79,9 @@
<extensions defaultExtensionNs="com.intellij">
<postStartupActivity implementation="org.jetbrains.idea.maven.project.MavenProjectsManagerProjectActivity"/>
<registryKey key="MAVEN.system.in.process" defaultValue="true"
description="Whether IDEA should use 'in-process' mode for interaction with Maven API"/>
<pathMacroContributor implementation="org.jetbrains.idea.maven.utils.MavenPathMacroContributor"/>
<projectPathMacroContributor implementation="org.jetbrains.idea.maven.utils.MavenProjectPathMacroContributor"/>
<buildProcess.parametersProvider implementation="org.jetbrains.idea.maven.utils.MavenBuildProcessParameterProvider"/>
@@ -93,6 +93,9 @@
instance="com.intellij.pycharm.community.ide.impl.settings.MemoryUsageConfigurable"
groupId="root"/>
<registryKey key="dataspell.interpreter.widget" defaultValue="true"
description="Interpreter widget for lightweight interpreter management"/>
<statusBarWidgetFactory id="pythonInterpreterWidget"
implementation="com.intellij.pycharm.community.ide.impl.configuration.PySdkStatusBarWidgetFactory"
order="after CodeStyleStatusBarWidget, before git, before hg, before Notifications"/>