From 18f024e481e504400cc64fe2ffc70bdf386d2eb7 Mon Sep 17 00:00:00 2001 From: Vladimir Krivosheev Date: Mon, 5 Aug 2024 09:13:22 +0200 Subject: [PATCH] IJPL-159596 refactor XmlSchemaProvider GitOrigin-RevId: d859bb645f949a0b494371d7b1b58c92087f1455 --- .../src/com/intellij/xml/XmlSchemaProvider.kt | 106 ++++++++---------- 1 file changed, 47 insertions(+), 59 deletions(-) diff --git a/xml/xml-psi-api/src/com/intellij/xml/XmlSchemaProvider.kt b/xml/xml-psi-api/src/com/intellij/xml/XmlSchemaProvider.kt index ba1539b34335..564c71d8c53f 100644 --- a/xml/xml-psi-api/src/com/intellij/xml/XmlSchemaProvider.kt +++ b/xml/xml-psi-api/src/com/intellij/xml/XmlSchemaProvider.kt @@ -1,78 +1,66 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.xml -package com.intellij.xml; +import com.intellij.openapi.extensions.ExtensionPointName +import com.intellij.openapi.module.Module +import com.intellij.openapi.module.ModuleUtilCore +import com.intellij.openapi.project.DumbService.Companion.getInstance +import com.intellij.openapi.project.PossiblyDumbAware +import com.intellij.psi.PsiFile +import com.intellij.psi.xml.XmlFile +import org.jetbrains.annotations.NonNls -import com.intellij.openapi.extensions.ExtensionPointName; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtilCore; -import com.intellij.openapi.project.DumbService; -import com.intellij.openapi.project.PossiblyDumbAware; -import com.intellij.psi.PsiFile; -import com.intellij.psi.xml.XmlFile; -import com.intellij.util.containers.ContainerUtil; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +abstract class XmlSchemaProvider : PossiblyDumbAware { + companion object { + @JvmField + val EP_NAME: ExtensionPointName = ExtensionPointName("com.intellij.xml.schemaProvider") -import java.util.Collections; -import java.util.List; -import java.util.Set; + @JvmStatic + fun getAvailableProviders(file: XmlFile): List { + return EP_NAME.extensionList.filter { it.isAvailable(file) } + } -/** - * @author Dmitry Avdeev - */ -public abstract class XmlSchemaProvider implements PossiblyDumbAware { - public static final ExtensionPointName EP_NAME = new ExtensionPointName<>("com.intellij.xml.schemaProvider"); + @JvmStatic + fun findSchema(namespace: @NonNls String, module: Module?, file: PsiFile): XmlFile? { + if (file.getProject().isDefault()) { + return null + } - public abstract @Nullable XmlFile getSchema(@NotNull @NonNls String url, @Nullable Module module, final @NotNull PsiFile baseFile); + for (provider in EP_NAME.extensionList) { + if (!getInstance(file.getProject()).isUsableInCurrentContext(provider)) { + continue + } - public boolean isAvailable(final @NotNull XmlFile file) { - return false; + if (file is XmlFile && !provider.isAvailable(file)) { + continue + } + provider.getSchema(namespace, module, file)?.let { + return it + } + } + return null + } + + @JvmStatic + fun findSchema(namespace: @NonNls String, baseFile: PsiFile): XmlFile? { + return findSchema(namespace = namespace, module = ModuleUtilCore.findModuleForPsiElement(baseFile), file = baseFile) + } } - public static @NotNull List getAvailableProviders(@NotNull XmlFile file) { - return ContainerUtil.findAll(EP_NAME.getExtensionList(), xmlSchemaProvider -> xmlSchemaProvider.isAvailable(file)); - } + abstract fun getSchema(url: @NonNls String, module: Module?, baseFile: PsiFile): XmlFile? + + open fun isAvailable(file: XmlFile): Boolean = false /** * Provides specific namespaces for given XML file. * * @param file XML or JSP file. * @param tagName optional - * @return available namespace uris, or {@code null} if the provider did not recognize the file. + * @return available namespace uris, or `null` if the provider did not recognize the file. */ - public @NotNull Set getAvailableNamespaces(final @NotNull XmlFile file, final @Nullable String tagName) { - return Collections.emptySet(); - } + open fun getAvailableNamespaces(file: XmlFile, tagName: String?): Set = emptySet() - public @Nullable String getDefaultPrefix(@NotNull @NonNls String namespace, final @NotNull XmlFile context) { - return null; - } + open fun getDefaultPrefix(namespace: @NonNls String, context: XmlFile): String? = null - public @Nullable Set getLocations(@NotNull @NonNls String namespace, final @NotNull XmlFile context) { - return null; - } - - public static @Nullable XmlFile findSchema(@NotNull @NonNls String namespace, @Nullable Module module, @NotNull PsiFile file) { - if (file.getProject().isDefault()) return null; - for (XmlSchemaProvider provider : EP_NAME.getExtensionList()) { - if (!DumbService.getInstance(file.getProject()).isUsableInCurrentContext(provider)) { - continue; - } - - if (file instanceof XmlFile && !provider.isAvailable((XmlFile)file)) { - continue; - } - final XmlFile schema = provider.getSchema(namespace, module, file); - if (schema != null) { - return schema; - } - } - return null; - } - - public static @Nullable XmlFile findSchema(@NotNull @NonNls String namespace, @NotNull PsiFile baseFile) { - final Module module = ModuleUtilCore.findModuleForPsiElement(baseFile); - return findSchema(namespace, module, baseFile); - } + open fun getLocations(namespace: @NonNls String, context: XmlFile): Set? = null }