From d1edb06662c2f45b45578f7d2bf2c2a0f829bc09 Mon Sep 17 00:00:00 2001 From: Max Medvedev Date: Thu, 6 Feb 2025 16:05:22 +0100 Subject: [PATCH] IJPL-162853 introduce CommonElementTypeConverter + LanguageExtensionWithAny GitOrigin-RevId: 50b7fd9cd6f42f81e04a47caebb851510a4f6bc1 --- .../completion/CompletionConfidenceEP.java | 5 +++-- .../codeInsight/completion/CompletionContributor.java | 5 +++-- .../com/intellij/lang/LanguageExtensionWithAny.java} | 11 ++++------- .../PlainTextSymbolCompletionContributorEP.java | 5 +++-- .../com/intellij/lang/LanguageExtensionCacheTest.kt | 7 +++---- .../META-INF/intellij.platform.syntax.psi.xml | 4 ++++ .../platform/syntax/psi/CommonElementTypeConverter.kt | 11 +++++++++++ .../platform/syntax/psi/ElementTypeConverter.kt | 11 ++++------- 8 files changed, 35 insertions(+), 24 deletions(-) rename platform/{analysis-api/src/com/intellij/codeInsight/completion/CompletionExtension.java => core-api/src/com/intellij/lang/LanguageExtensionWithAny.java} (79%) create mode 100644 platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/CommonElementTypeConverter.kt diff --git a/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionConfidenceEP.java b/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionConfidenceEP.java index 43d23c484268..20ac2f3e48eb 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionConfidenceEP.java +++ b/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionConfidenceEP.java @@ -1,15 +1,16 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// 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.codeInsight.completion; import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; import com.intellij.lang.LanguageExtensionPoint; +import com.intellij.lang.LanguageExtensionWithAny; import org.jetbrains.annotations.NotNull; import java.util.List; public final class CompletionConfidenceEP extends LanguageExtensionPoint { - private static final LanguageExtension INSTANCE = new CompletionExtension<>("com.intellij.completion.confidence"); + private static final LanguageExtension INSTANCE = new LanguageExtensionWithAny<>("com.intellij.completion.confidence"); public static List forLanguage(@NotNull Language language) { return INSTANCE.allForLanguage(language); diff --git a/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionContributor.java b/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionContributor.java index cf59bf132634..7df4d794b155 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionContributor.java +++ b/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionContributor.java @@ -1,10 +1,11 @@ -// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// 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.codeInsight.completion; import com.intellij.codeInsight.lookup.LookupElement; import com.intellij.codeInsight.lookup.LookupElementPresentation; import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; +import com.intellij.lang.LanguageExtensionWithAny; import com.intellij.openapi.application.ReadAction; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.extensions.ExtensionPointName; @@ -240,5 +241,5 @@ public abstract class CompletionContributor implements PossiblyDumbAware { return DumbService.getInstance(project).filterByDumbAwareness(forLanguage(language)); } - private static final LanguageExtension INSTANCE = new CompletionExtension<>(EP.getName()); + private static final LanguageExtension INSTANCE = new LanguageExtensionWithAny<>(EP.getName()); } diff --git a/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionExtension.java b/platform/core-api/src/com/intellij/lang/LanguageExtensionWithAny.java similarity index 79% rename from platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionExtension.java rename to platform/core-api/src/com/intellij/lang/LanguageExtensionWithAny.java index 023c4f29b75e..edbe96b2dfd9 100644 --- a/platform/analysis-api/src/com/intellij/codeInsight/completion/CompletionExtension.java +++ b/platform/core-api/src/com/intellij/lang/LanguageExtensionWithAny.java @@ -1,9 +1,6 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.codeInsight.completion; +// 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.lang; -import com.intellij.lang.Language; -import com.intellij.lang.LanguageExtension; -import com.intellij.lang.MetaLanguage; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; @@ -12,8 +9,8 @@ import java.util.List; import java.util.Set; @ApiStatus.Internal -public final class CompletionExtension extends LanguageExtension { - public CompletionExtension(String epName) { +public final class LanguageExtensionWithAny extends LanguageExtension { + public LanguageExtensionWithAny(String epName) { super(epName); } diff --git a/platform/lang-api/src/com/intellij/codeInsight/completion/PlainTextSymbolCompletionContributorEP.java b/platform/lang-api/src/com/intellij/codeInsight/completion/PlainTextSymbolCompletionContributorEP.java index 7b59db0e0a53..820c17eabadd 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/completion/PlainTextSymbolCompletionContributorEP.java +++ b/platform/lang-api/src/com/intellij/codeInsight/completion/PlainTextSymbolCompletionContributorEP.java @@ -1,16 +1,17 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// 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.codeInsight.completion; import com.intellij.lang.Language; import com.intellij.lang.LanguageExtension; import com.intellij.lang.LanguageExtensionPoint; +import com.intellij.lang.LanguageExtensionWithAny; import com.intellij.openapi.extensions.ExtensionPointName; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class PlainTextSymbolCompletionContributorEP extends LanguageExtensionPoint { private static final ExtensionPointName EP = new ExtensionPointName<>("com.intellij.completion.plainTextSymbol"); - private static final LanguageExtension INSTANCE = new CompletionExtension<>(EP.getName()); + private static final LanguageExtension INSTANCE = new LanguageExtensionWithAny<>(EP.getName()); public static @Nullable PlainTextSymbolCompletionContributor forLanguage(@NotNull Language language) { return INSTANCE.forLanguage(language); diff --git a/platform/platform-tests/testSrc/com/intellij/lang/LanguageExtensionCacheTest.kt b/platform/platform-tests/testSrc/com/intellij/lang/LanguageExtensionCacheTest.kt index 153e1ecbd9e7..d95c9c4e1a21 100644 --- a/platform/platform-tests/testSrc/com/intellij/lang/LanguageExtensionCacheTest.kt +++ b/platform/platform-tests/testSrc/com/intellij/lang/LanguageExtensionCacheTest.kt @@ -1,7 +1,6 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. +// 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.lang -import com.intellij.codeInsight.completion.CompletionExtension import com.intellij.ide.plugins.PluginManagerCore import com.intellij.mock.MockLanguageFileType import com.intellij.openapi.Disposable @@ -39,7 +38,7 @@ class LanguageExtensionCacheTest : LightPlatformTestCase() { private val descriptor = DefaultPluginDescriptor(PluginId.getId(""), javaClass.classLoader) private lateinit var area: ExtensionsAreaImpl private lateinit var extension: LanguageExtension - private lateinit var completionExtension: CompletionExtension + private lateinit var completionExtension: LanguageExtensionWithAny override fun setUp() { super.setUp() @@ -50,7 +49,7 @@ class LanguageExtensionCacheTest : LightPlatformTestCase() { area.unregisterExtensionPoint(myCompletionExtensionPointName.name) }) extension = LanguageExtension(myExtensionPointName, null) - completionExtension = CompletionExtension(myCompletionExtensionPointName.name) + completionExtension = LanguageExtensionWithAny(myCompletionExtensionPointName.name) } private fun registerExtension(extensionPointName: ExtensionPointName>, diff --git a/platform/syntax/syntax-psi/resources/META-INF/intellij.platform.syntax.psi.xml b/platform/syntax/syntax-psi/resources/META-INF/intellij.platform.syntax.psi.xml index 94d05299a479..37cfad249240 100644 --- a/platform/syntax/syntax-psi/resources/META-INF/intellij.platform.syntax.psi.xml +++ b/platform/syntax/syntax-psi/resources/META-INF/intellij.platform.syntax.psi.xml @@ -7,4 +7,8 @@ + + + + \ No newline at end of file diff --git a/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/CommonElementTypeConverter.kt b/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/CommonElementTypeConverter.kt new file mode 100644 index 000000000000..68ba48b53b6c --- /dev/null +++ b/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/CommonElementTypeConverter.kt @@ -0,0 +1,11 @@ +// 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.syntax.psi + +import com.intellij.platform.syntax.element.SyntaxTokenTypes +import com.intellij.psi.TokenType + +internal class CommonElementTypeConverter : ElementTypeConverterBase(mapOf( + SyntaxTokenTypes.ERROR_ELEMENT to TokenType.ERROR_ELEMENT, + SyntaxTokenTypes.WHITE_SPACE to TokenType.WHITE_SPACE, + SyntaxTokenTypes.BAD_CHARACTER to TokenType.BAD_CHARACTER, +)) \ No newline at end of file diff --git a/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/ElementTypeConverter.kt b/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/ElementTypeConverter.kt index 495e1e265f62..70290ccf0f16 100644 --- a/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/ElementTypeConverter.kt +++ b/platform/syntax/syntax-psi/src/com/intellij/platform/syntax/psi/ElementTypeConverter.kt @@ -2,6 +2,7 @@ package com.intellij.platform.syntax.psi import com.intellij.lang.LanguageExtension +import com.intellij.lang.LanguageExtensionWithAny import com.intellij.platform.syntax.SyntaxElementType import com.intellij.psi.tree.IElementType import org.jetbrains.annotations.ApiStatus @@ -42,11 +43,7 @@ internal fun ElementTypeConverter.convertNotNull(type: SyntaxElementType): IElem } @ApiStatus.Internal -class ElementTypeConverters : LanguageExtension( - "com.intellij.syntax.elementTypeConverter", -) { - companion object { - @JvmStatic - val instance: ElementTypeConverters = ElementTypeConverters() - } +object ElementTypeConverters { + @JvmStatic + val instance: LanguageExtension = LanguageExtensionWithAny("com.intellij.syntax.elementTypeConverter") }