[plugin model] refactoring: get rid of unnecessary base class 'ContentElement'

The only allowed element in the `content` tag is a `module`, and we don't plan to introduce other elements there. So to simplify code, `ContentElement.Module` is renamed to `ContentModuleElement`, and usages of its base class are inlined.

GitOrigin-RevId: db53095675961b35aac09b6ff9d61d0120db1d86
This commit is contained in:
Nikolay Chashnikov
2025-08-11 17:50:27 +00:00
committed by intellij-monorepo-bot
parent 27c1a57b63
commit 006eaae1ba
8 changed files with 29 additions and 42 deletions
@@ -475,21 +475,13 @@ class PluginMainDescriptor(
@ApiStatus.Internal
companion object {
private fun convertContentModules(contentElements: List<ContentElement>): List<PluginContentDescriptor.ModuleItem> {
return contentElements.mapNotNull { elem ->
when (elem) {
is ContentElement.Module -> {
val index = elem.name.lastIndexOf('/')
val configFile: String? = if (index != -1) {
"${elem.name.substring(0, index)}.${elem.name.substring(index + 1)}.xml"
} else null
PluginContentDescriptor.ModuleItem(elem.name, configFile, elem.embeddedDescriptorContent, elem.loadingRule.convert())
}
else -> {
LOG.error("Unknown content element: $elem")
null
}
}
private fun convertContentModules(contentElements: List<ContentModuleElement>): List<PluginContentDescriptor.ModuleItem> {
return contentElements.map { elem ->
val index = elem.name.lastIndexOf('/')
val configFile: String? = if (index != -1) {
"${elem.name.substring(0, index)}.${elem.name.substring(index + 1)}.xml"
} else null
PluginContentDescriptor.ModuleItem(elem.name, configFile, elem.embeddedDescriptorContent, elem.loadingRule.convert())
}
}
@@ -7,7 +7,7 @@ import com.fasterxml.jackson.core.JsonFactory
import com.fasterxml.jackson.core.JsonGenerator
import com.intellij.openapi.extensions.PluginId
import com.intellij.platform.plugins.parser.impl.RawPluginDescriptor
import com.intellij.platform.plugins.parser.impl.elements.ContentElement
import com.intellij.platform.plugins.parser.impl.elements.ContentModuleElement
import com.intellij.platform.plugins.parser.impl.elements.DependenciesElement
import com.intellij.platform.plugins.parser.impl.elements.ModuleLoadingRule
import com.intellij.platform.plugins.testFramework.LoadFromSourceXIncludeLoader
@@ -288,8 +288,6 @@ class PluginModelValidator(
}
val moduleNameToLoadingRule = pluginInfo.descriptor.contentModules
.asSequence()
.filterIsInstance<ContentElement.Module>()
.associateBy({ it.name }, { it.loadingRule })
checkDependencies(
dependenciesElements = descriptor.dependencies,
@@ -528,13 +526,12 @@ class PluginModelValidator(
// 2) no depends + no dependency on plugin in a referenced descriptor = directly injected into plugin (separate classloader is not created
// during a transition period). In old format: xi:include (e.g. <xi:include href="dockerfile-language.xml"/>).
private fun checkContent(
contentElements: List<ContentElement>,
contentElements: List<ContentModuleElement>,
referencingModuleInfo: ModuleInfo,
sourceModuleNameToFileInfo: Map<String, ModuleDescriptorFileInfo>,
moduleNameToInfo: MutableMap<String, ModuleInfo>
) {
for (contentElement in contentElements) {
contentElement as ContentElement.Module
fun registerError(message: String, additionalParams: Map<String, Any?> = emptyMap()) {
reportError(
message,
@@ -58,8 +58,8 @@ interface PluginDescriptorBuilder {
fun addExtension(qualifiedExtensionPointName: String, extension: ExtensionElement)
val extensions: Map<String, List<ExtensionElement>>
fun addContentModule(contentModule: ContentElement)
val contentModules: List<ContentElement>
fun addContentModule(contentModule: ContentModuleElement)
val contentModules: List<ContentModuleElement>
fun addDependency(dependency: DependenciesElement)
val dependencies: List<DependenciesElement>
@@ -96,14 +96,14 @@ internal class PluginDescriptorBuilderImpl : PluginDescriptorBuilder {
override val extensions: Map<String, List<ExtensionElement>>
get() = _extensions ?: Java11Shim.INSTANCE.mapOf()
private var _contentModules: MutableList<ContentElement>? = null
override fun addContentModule(contentModule: ContentElement) {
private var _contentModules: MutableList<ContentModuleElement>? = null
override fun addContentModule(contentModule: ContentModuleElement) {
if (_contentModules == null) {
_contentModules = ArrayList()
}
_contentModules!!.add(contentModule)
}
override val contentModules: List<ContentElement>
override val contentModules: List<ContentModuleElement>
get() = _contentModules ?: Java11Shim.INSTANCE.listOf()
private var _dependencies: MutableList<DependenciesElement>? = null
@@ -58,6 +58,6 @@ class RawPluginDescriptor(
* */
val extensions: Map<String, List<ExtensionElement>>,
val contentModules: List<ContentElement>,
val contentModules: List<ContentModuleElement>,
val dependencies: List<DependenciesElement>,
)
@@ -670,7 +670,7 @@ private fun readContent(reader: XMLStreamReader2, builder: PluginDescriptorBuild
val isEndElement = reader.next() == XMLStreamConstants.END_ELEMENT
if (isEndElement) {
if (os == null || readContext.elementOsFilter(os)) {
builder.addContentModule(ContentElement.Module(name = name, loadingRule = loadingRule, embeddedDescriptorContent = null))
builder.addContentModule(ContentModuleElement(name = name, loadingRule = loadingRule, embeddedDescriptorContent = null))
}
}
else {
@@ -679,7 +679,7 @@ private fun readContent(reader: XMLStreamReader2, builder: PluginDescriptorBuild
val toIndex = fromIndex + reader.textLength
val length = toIndex - fromIndex
val descriptorContent = if (length == 0) null else reader.textCharacters.copyOfRange(fromIndex, toIndex)
builder.addContentModule(ContentElement.Module(name = name, loadingRule = loadingRule, embeddedDescriptorContent = descriptorContent))
builder.addContentModule(ContentModuleElement(name = name, loadingRule = loadingRule, embeddedDescriptorContent = descriptorContent))
}
var nesting = 1
@@ -1,14 +0,0 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.platform.plugins.parser.impl.elements
abstract class ContentElement {
class Module(
val name: String,
val loadingRule: ModuleLoadingRule = ModuleLoadingRule.OPTIONAL,
val embeddedDescriptorContent: CharArray? = null,
) : ContentElement() {
override fun toString(): String {
return "Module(name=$name, loadingRule=$loadingRule)"
}
}
}
@@ -0,0 +1,12 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.platform.plugins.parser.impl.elements
class ContentModuleElement(
val name: String,
val loadingRule: ModuleLoadingRule = ModuleLoadingRule.OPTIONAL,
val embeddedDescriptorContent: CharArray? = null,
) {
override fun toString(): String {
return "Module(name=$name, loadingRule=$loadingRule)"
}
}