mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IJPL-866 refactor - extract readSubModuleExternal and inline it (it makes clear that pathResolver and dataLoader are not required to read module)
GitOrigin-RevId: f7399a0780c08e73e6d053da13d32e616d907fb4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
710fbe6476
commit
5063cd0284
@@ -58,12 +58,14 @@ class IdeaPluginDescriptorImpl(
|
||||
// only for sub descriptors
|
||||
@JvmField
|
||||
internal var descriptorPath: String? = null
|
||||
|
||||
@Volatile
|
||||
private var description: String? = null
|
||||
private val productCode = raw.productCode
|
||||
private var releaseDate: Date? = raw.releaseDate?.let { Date.from(it.atStartOfDay(ZoneOffset.UTC).toInstant()) }
|
||||
private val releaseVersion = raw.releaseVersion
|
||||
private val isLicenseOptional = raw.isLicenseOptional
|
||||
|
||||
@NonNls
|
||||
private var resourceBundleBaseName: String? = null
|
||||
private val changeNotes = raw.changeNotes
|
||||
@@ -72,10 +74,13 @@ class IdeaPluginDescriptorImpl(
|
||||
private val vendorEmail = raw.vendorEmail
|
||||
private val vendorUrl = raw.vendorUrl
|
||||
private var category: String? = raw.category
|
||||
|
||||
@JvmField
|
||||
internal val url: String? = raw.url
|
||||
|
||||
@JvmField
|
||||
val pluginDependencies: List<PluginDependency>
|
||||
|
||||
@JvmField
|
||||
val incompatibilities: List<PluginId> = raw.incompatibilities ?: Java11Shim.INSTANCE.listOf()
|
||||
|
||||
@@ -140,8 +145,10 @@ class IdeaPluginDescriptorImpl(
|
||||
|
||||
@JvmField
|
||||
val appContainerDescriptor: ContainerDescriptor = raw.appContainerDescriptor
|
||||
|
||||
@JvmField
|
||||
val projectContainerDescriptor: ContainerDescriptor = raw.projectContainerDescriptor
|
||||
|
||||
@JvmField
|
||||
val moduleContainerDescriptor: ContainerDescriptor = raw.moduleContainerDescriptor
|
||||
|
||||
@@ -151,6 +158,7 @@ class IdeaPluginDescriptorImpl(
|
||||
|
||||
@JvmField
|
||||
val dependencies: ModuleDependenciesDescriptor = raw.dependencies
|
||||
|
||||
@JvmField
|
||||
var modules: List<PluginId> = raw.modules ?: Java11Shim.INSTANCE.listOf()
|
||||
|
||||
@@ -158,12 +166,16 @@ class IdeaPluginDescriptorImpl(
|
||||
|
||||
@JvmField
|
||||
val isUseIdeaClassLoader: Boolean = raw.isUseIdeaClassLoader
|
||||
|
||||
@JvmField
|
||||
val isBundledUpdateAllowed: Boolean = raw.isBundledUpdateAllowed
|
||||
|
||||
@JvmField
|
||||
internal val implementationDetail: Boolean = raw.implementationDetail
|
||||
|
||||
@JvmField
|
||||
internal val isRestartRequired: Boolean = raw.isRestartRequired
|
||||
|
||||
@JvmField
|
||||
val packagePrefix: String? = raw.`package`
|
||||
|
||||
@@ -185,9 +197,7 @@ class IdeaPluginDescriptorImpl(
|
||||
private fun createSub(
|
||||
raw: RawPluginDescriptor,
|
||||
descriptorPath: String,
|
||||
pathResolver: PathResolver,
|
||||
context: DescriptorListLoadingContext,
|
||||
dataLoader: DataLoader,
|
||||
moduleName: String?,
|
||||
): IdeaPluginDescriptorImpl {
|
||||
raw.name = name
|
||||
@@ -202,10 +212,13 @@ class IdeaPluginDescriptorImpl(
|
||||
context.debugData?.recordDescriptorPath(descriptor = result, rawPluginDescriptor = raw, path = descriptorPath)
|
||||
result.descriptorPath = descriptorPath
|
||||
result.vendor = vendor
|
||||
result.version = version
|
||||
result.resourceBundleBaseName = resourceBundleBaseName
|
||||
|
||||
result.readExternal(raw = raw, pathResolver = pathResolver, context = context, isSub = true, dataLoader = dataLoader)
|
||||
result.resourceBundleBaseName = resourceBundleBaseName
|
||||
if (raw.resourceBundleBaseName != null) {
|
||||
result.readResourceBundleBaseName(raw = raw)
|
||||
}
|
||||
|
||||
result.version = version ?: context.defaultVersion
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -213,73 +226,63 @@ class IdeaPluginDescriptorImpl(
|
||||
raw: RawPluginDescriptor,
|
||||
pathResolver: PathResolver,
|
||||
context: DescriptorListLoadingContext,
|
||||
isSub: Boolean,
|
||||
dataLoader: DataLoader,
|
||||
) {
|
||||
// include module file descriptor if not specified as `depends` (old way - xi:include)
|
||||
// must be first because merged into raw descriptor
|
||||
if (!isSub) {
|
||||
for (module in content.modules) {
|
||||
val subDescriptorFile = module.configFile ?: "${module.name}.xml"
|
||||
val subDescriptor = createSub(
|
||||
raw = pathResolver.resolveModuleFile(
|
||||
readContext = context,
|
||||
dataLoader = dataLoader,
|
||||
path = subDescriptorFile,
|
||||
readInto = null,
|
||||
),
|
||||
descriptorPath = subDescriptorFile,
|
||||
pathResolver = pathResolver,
|
||||
context = context,
|
||||
for (module in content.modules) {
|
||||
val subDescriptorFile = module.configFile ?: "${module.name}.xml"
|
||||
val subDescriptor = createSub(
|
||||
raw = pathResolver.resolveModuleFile(
|
||||
readContext = context,
|
||||
dataLoader = dataLoader,
|
||||
moduleName = module.name,
|
||||
)
|
||||
module.descriptor = subDescriptor
|
||||
}
|
||||
path = subDescriptorFile,
|
||||
readInto = null,
|
||||
),
|
||||
descriptorPath = subDescriptorFile,
|
||||
context = context,
|
||||
moduleName = module.name,
|
||||
)
|
||||
module.descriptor = subDescriptor
|
||||
}
|
||||
|
||||
if (raw.resourceBundleBaseName != null) {
|
||||
if (id == PluginManagerCore.CORE_ID && !isSub) {
|
||||
if (id == PluginManagerCore.CORE_ID) {
|
||||
LOG.warn("<resource-bundle>${raw.resourceBundleBaseName}</resource-bundle> tag is found in an xml descriptor" +
|
||||
" included into the platform part of the IDE but the platform part uses predefined bundles " +
|
||||
"(e.g. ActionsBundle for actions) anyway; this tag must be replaced by a corresponding attribute in some inner tags " +
|
||||
"(e.g. by 'resource-bundle' attribute in 'actions' tag)")
|
||||
}
|
||||
if (resourceBundleBaseName != null && resourceBundleBaseName != raw.resourceBundleBaseName) {
|
||||
LOG.warn("Resource bundle redefinition for plugin $id. " +
|
||||
"Old value: $resourceBundleBaseName, new value: ${raw.resourceBundleBaseName}")
|
||||
}
|
||||
resourceBundleBaseName = raw.resourceBundleBaseName
|
||||
readResourceBundleBaseName(raw)
|
||||
}
|
||||
|
||||
if (version == null) {
|
||||
version = context.defaultVersion
|
||||
}
|
||||
|
||||
if (!isSub) {
|
||||
if (id == PluginManagerCore.CORE_ID) {
|
||||
modules = modules + IdeaPluginOsRequirement.getHostOsModuleIds()
|
||||
if (!AppMode.isRemoteDevHost()) {
|
||||
/* dependency on this ID may be used to enable some functionality in local IDE and in JetBrains Client, but disable it in product
|
||||
running in backend mode; this is needed because the backend process currently doesn't use module-based loader and therefore cannot
|
||||
use marker modules from ProductModes. */
|
||||
modules = modules + PluginId.getId("com.intellij.platform.experimental.frontend")
|
||||
}
|
||||
if (id == PluginManagerCore.CORE_ID) {
|
||||
modules = modules + IdeaPluginOsRequirement.getHostOsModuleIds()
|
||||
if (!AppMode.isRemoteDevHost()) {
|
||||
// Dependency on this ID may be used to enable some functionality in the local IDE
|
||||
// and in JetBrains Client, but disable it in product running in backend mode.
|
||||
// This is needed because the backend process currently doesn't use module-based loader and therefore cannot
|
||||
// use marker modules from ProductModes.
|
||||
modules = modules + PluginId.getId("com.intellij.platform.experimental.frontend")
|
||||
}
|
||||
}
|
||||
|
||||
if (context.isPluginDisabled(id)) {
|
||||
markAsIncomplete(disabledDependency = null, shortMessage = null)
|
||||
}
|
||||
else {
|
||||
checkCompatibility(context)
|
||||
if (isIncomplete != null) {
|
||||
return
|
||||
}
|
||||
|
||||
if (context.isPluginDisabled(id)) {
|
||||
markAsIncomplete(disabledDependency = null, shortMessage = null)
|
||||
}
|
||||
else {
|
||||
checkCompatibility(context)
|
||||
if (isIncomplete != null) {
|
||||
return
|
||||
}
|
||||
|
||||
for (pluginDependency in dependencies.plugins) {
|
||||
if (context.isPluginDisabled(pluginDependency.id)) {
|
||||
markAsIncomplete(pluginDependency.id, shortMessage = "plugin.loading.error.short.depends.on.disabled.plugin")
|
||||
}
|
||||
for (pluginDependency in dependencies.plugins) {
|
||||
if (context.isPluginDisabled(pluginDependency.id)) {
|
||||
markAsIncomplete(pluginDependency.id, shortMessage = "plugin.loading.error.short.depends.on.disabled.plugin")
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -293,6 +296,13 @@ class IdeaPluginDescriptorImpl(
|
||||
}
|
||||
}
|
||||
|
||||
private fun readResourceBundleBaseName(raw: RawPluginDescriptor) {
|
||||
if (resourceBundleBaseName != null && resourceBundleBaseName != raw.resourceBundleBaseName) {
|
||||
LOG.warn("Resource bundle redefinition for plugin $id. Old value: $resourceBundleBaseName, new value: ${raw.resourceBundleBaseName}")
|
||||
}
|
||||
resourceBundleBaseName = raw.resourceBundleBaseName
|
||||
}
|
||||
|
||||
private fun processOldDependencies(descriptor: IdeaPluginDescriptorImpl,
|
||||
context: DescriptorListLoadingContext,
|
||||
pathResolver: PathResolver,
|
||||
@@ -346,11 +356,21 @@ class IdeaPluginDescriptorImpl(
|
||||
val subDescriptor = descriptor.createSub(
|
||||
raw = raw,
|
||||
descriptorPath = configFile,
|
||||
pathResolver = pathResolver,
|
||||
context = context,
|
||||
dataLoader = dataLoader,
|
||||
moduleName = null,
|
||||
)
|
||||
|
||||
if (subDescriptor.isIncomplete == null) {
|
||||
processOldDependencies(
|
||||
descriptor = subDescriptor,
|
||||
context = context,
|
||||
pathResolver = pathResolver,
|
||||
dependencies = subDescriptor.pluginDependencies,
|
||||
dataLoader = dataLoader,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
dependency.subDescriptor = subDescriptor
|
||||
visitedFiles.clear()
|
||||
}
|
||||
|
||||
@@ -7,20 +7,26 @@ interface PathResolver {
|
||||
val isFlat: Boolean
|
||||
get() = false
|
||||
|
||||
fun loadXIncludeReference(readInto: RawPluginDescriptor,
|
||||
readContext: ReadModuleContext,
|
||||
dataLoader: DataLoader,
|
||||
base: String?,
|
||||
relativePath: String): Boolean
|
||||
fun loadXIncludeReference(
|
||||
readInto: RawPluginDescriptor,
|
||||
readContext: ReadModuleContext,
|
||||
dataLoader: DataLoader,
|
||||
base: String?,
|
||||
relativePath: String,
|
||||
): Boolean
|
||||
|
||||
fun resolvePath(readContext: ReadModuleContext,
|
||||
dataLoader: DataLoader,
|
||||
relativePath: String,
|
||||
readInto: RawPluginDescriptor?): RawPluginDescriptor?
|
||||
fun resolvePath(
|
||||
readContext: ReadModuleContext,
|
||||
dataLoader: DataLoader,
|
||||
relativePath: String,
|
||||
readInto: RawPluginDescriptor?,
|
||||
): RawPluginDescriptor?
|
||||
|
||||
// module in a new file name format must always be resolved
|
||||
fun resolveModuleFile(readContext: ReadModuleContext,
|
||||
dataLoader: DataLoader,
|
||||
path: String,
|
||||
readInto: RawPluginDescriptor?): RawPluginDescriptor
|
||||
fun resolveModuleFile(
|
||||
readContext: ReadModuleContext,
|
||||
dataLoader: DataLoader,
|
||||
path: String,
|
||||
readInto: RawPluginDescriptor?,
|
||||
): RawPluginDescriptor
|
||||
}
|
||||
@@ -113,7 +113,7 @@ fun loadDescriptorFromDir(
|
||||
useCoreClassLoader = useCoreClassLoader,
|
||||
)
|
||||
context.debugData?.recordDescriptorPath(descriptor = descriptor, rawPluginDescriptor = raw, path = descriptorRelativePath)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = context, isSub = false, dataLoader = dataLoader)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = context, dataLoader = dataLoader)
|
||||
descriptor.jarFiles = Collections.singletonList(dir)
|
||||
return descriptor
|
||||
}
|
||||
@@ -171,7 +171,7 @@ fun loadDescriptorFromJar(
|
||||
useCoreClassLoader = useCoreClassLoader,
|
||||
)
|
||||
parentContext.debugData?.recordDescriptorPath(descriptor, raw, descriptorRelativePath)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = parentContext, isSub = false, dataLoader = dataLoader)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = parentContext, dataLoader = dataLoader)
|
||||
descriptor.jarFiles = Collections.singletonList(descriptor.pluginPath)
|
||||
return descriptor
|
||||
}
|
||||
@@ -691,7 +691,7 @@ private fun loadCoreProductPlugin(
|
||||
useCoreClassLoader = useCoreClassLoader,
|
||||
)
|
||||
context.debugData?.recordDescriptorPath(descriptor, raw, path)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = context, isSub = false, dataLoader = dataLoader)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = context, dataLoader = dataLoader)
|
||||
return descriptor
|
||||
}
|
||||
|
||||
@@ -932,7 +932,7 @@ private fun loadDescriptorFromResource(
|
||||
useCoreClassLoader = useCoreClassLoader,
|
||||
)
|
||||
context.debugData?.recordDescriptorPath(descriptor, raw, filename)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = context, isSub = false, dataLoader = dataLoader)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pathResolver, context = context, dataLoader = dataLoader)
|
||||
// do not set jarFiles by intention - doesn't make sense
|
||||
return descriptor
|
||||
}
|
||||
|
||||
@@ -223,7 +223,7 @@ private class PathBasedProductLoadingStrategy : ProductLoadingStrategy() {
|
||||
moduleName = null,
|
||||
)
|
||||
context.debugData?.recordDescriptorPath(descriptor, raw, PluginManagerCore.PLUGIN_XML_PATH)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pluginPathResolver, context = context, isSub = false, dataLoader = dataLoader)
|
||||
descriptor.readExternal(raw = raw, pathResolver = pluginPathResolver, context = context, dataLoader = dataLoader)
|
||||
descriptor.jarFiles = fileItems.map { it.file }
|
||||
return descriptor
|
||||
}
|
||||
|
||||
@@ -588,7 +588,6 @@ fun readDescriptorForTest(path: Path, isBundled: Boolean, input: ByteArray, id:
|
||||
val result = IdeaPluginDescriptorImpl(raw = raw, path = path, isBundled = isBundled, id = id, moduleName = null)
|
||||
result.readExternal(
|
||||
raw = raw,
|
||||
isSub = false,
|
||||
context = DescriptorListLoadingContext(customDisabledPlugins = emptySet()),
|
||||
pathResolver = pathResolver,
|
||||
dataLoader = dataLoader,
|
||||
@@ -610,10 +609,6 @@ fun createFromDescriptor(path: Path,
|
||||
readInto = null,
|
||||
locationSource = path.toString())
|
||||
val result = IdeaPluginDescriptorImpl(raw = raw, path = path, isBundled = isBundled, id = null, moduleName = null)
|
||||
result.readExternal(raw = raw,
|
||||
pathResolver = pathResolver,
|
||||
context = context,
|
||||
isSub = false,
|
||||
dataLoader = dataLoader)
|
||||
result.readExternal(raw = raw, pathResolver = pathResolver, context = context, dataLoader = dataLoader)
|
||||
return result
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user