IJPL-162853 introduce CommonElementTypeConverter + LanguageExtensionWithAny

GitOrigin-RevId: 50b7fd9cd6f42f81e04a47caebb851510a4f6bc1
This commit is contained in:
Max Medvedev
2025-02-06 18:01:19 +00:00
committed by intellij-monorepo-bot
parent 98cea08ce7
commit d1edb06662
8 changed files with 35 additions and 24 deletions
@@ -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<CompletionConfidence> {
private static final LanguageExtension<CompletionConfidence> INSTANCE = new CompletionExtension<>("com.intellij.completion.confidence");
private static final LanguageExtension<CompletionConfidence> INSTANCE = new LanguageExtensionWithAny<>("com.intellij.completion.confidence");
public static List<CompletionConfidence> forLanguage(@NotNull Language language) {
return INSTANCE.allForLanguage(language);
@@ -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<CompletionContributor> INSTANCE = new CompletionExtension<>(EP.getName());
private static final LanguageExtension<CompletionContributor> INSTANCE = new LanguageExtensionWithAny<>(EP.getName());
}
@@ -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<T> extends LanguageExtension<T> {
public CompletionExtension(String epName) {
public final class LanguageExtensionWithAny<T> extends LanguageExtension<T> {
public LanguageExtensionWithAny(String epName) {
super(epName);
}
@@ -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<PlainTextSymbolCompletionContributor> {
private static final ExtensionPointName<PlainTextSymbolCompletionContributorEP> EP = new ExtensionPointName<>("com.intellij.completion.plainTextSymbol");
private static final LanguageExtension<PlainTextSymbolCompletionContributor> INSTANCE = new CompletionExtension<>(EP.getName());
private static final LanguageExtension<PlainTextSymbolCompletionContributor> INSTANCE = new LanguageExtensionWithAny<>(EP.getName());
public static @Nullable PlainTextSymbolCompletionContributor forLanguage(@NotNull Language language) {
return INSTANCE.forLanguage(language);
@@ -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<String>
private lateinit var completionExtension: CompletionExtension<String>
private lateinit var completionExtension: LanguageExtensionWithAny<String>
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<KeyedLazyInstance<String>>,
@@ -7,4 +7,8 @@
<with attribute="implementationClass" implements="com.intellij.platform.syntax.psi.LanguageSyntaxDefinition"/>
</extensionPoint>
</extensionPoints>
<extensions defaultExtensionNs="com.intellij">
<syntax.elementTypeConverter language="any" implementationClass="com.intellij.platform.syntax.psi.CommonElementTypeConverter"/>
</extensions>
</idea-plugin>
@@ -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,
))
@@ -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<ElementTypeConverter>(
"com.intellij.syntax.elementTypeConverter",
) {
companion object {
@JvmStatic
val instance: ElementTypeConverters = ElementTypeConverters()
}
object ElementTypeConverters {
@JvmStatic
val instance: LanguageExtension<ElementTypeConverter> = LanguageExtensionWithAny("com.intellij.syntax.elementTypeConverter")
}