From 087bbdc0bd104e92f35dc3beef9fe25f27665c99 Mon Sep 17 00:00:00 2001 From: Vlad Koshkin Date: Fri, 8 Nov 2024 16:05:26 +0100 Subject: [PATCH] [kotlin] prohibit kotlin scratches creation ^KTIJ-32088 Fixed (cherry picked from commit eafbbe789be89b4787ab284e11c5011064dd3fae) KT-MR-18854 GitOrigin-RevId: a04d8c5f0bb3b4d9e4b2317e2ecb804cad355eba --- platform/lang-impl/api-dump-unreviewed.txt | 2 ++ .../src/com/intellij/ide/scratch/LRUPopupBuilder.java | 9 ++++++++- .../intellij/ide/scratch/ScratchFileCreationHelper.java | 7 +++++++ .../src/com/intellij/ide/scratch/ScratchImplUtil.java | 1 + .../kotlin/idea/scratch/KtScratchFileCreationHelper.kt | 8 ++++++++ plugins/kotlin/plugin/k2/resources/kotlin.plugin.k2.xml | 2 ++ 6 files changed, 28 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/api-dump-unreviewed.txt b/platform/lang-impl/api-dump-unreviewed.txt index 6b36a26223ff..d5bfdb60bdb7 100644 --- a/platform/lang-impl/api-dump-unreviewed.txt +++ b/platform/lang-impl/api-dump-unreviewed.txt @@ -11364,6 +11364,7 @@ a:com.intellij.ide.scratch.LRUPopupBuilder - withExtraMiddleValue(java.lang.Object,java.lang.String,javax.swing.Icon):com.intellij.ide.scratch.LRUPopupBuilder - withExtraSpeedSearchNamer(java.util.function.Function):com.intellij.ide.scratch.LRUPopupBuilder - withExtraTopValue(java.lang.Object,java.lang.String,javax.swing.Icon):com.intellij.ide.scratch.LRUPopupBuilder +- withFilter(java.util.function.Predicate):com.intellij.ide.scratch.LRUPopupBuilder - withSelection(java.lang.Object):com.intellij.ide.scratch.LRUPopupBuilder f:com.intellij.ide.scratch.ScratchFileActions - ():V @@ -11383,6 +11384,7 @@ a:com.intellij.ide.scratch.ScratchFileCreationHelper - sf:EXTENSION:com.intellij.lang.LanguageExtension - ():V - beforeCreate(com.intellij.openapi.project.Project,com.intellij.ide.scratch.ScratchFileCreationHelper$Context):V +- newScratchAllowed():Z - s:parseHeader(com.intellij.openapi.project.Project,com.intellij.lang.Language,java.lang.String):com.intellij.psi.PsiFile - prepareText(com.intellij.openapi.project.Project,com.intellij.ide.scratch.ScratchFileCreationHelper$Context,com.intellij.openapi.actionSystem.DataContext):Z - s:reformat(com.intellij.openapi.project.Project,com.intellij.lang.Language,java.lang.String):java.lang.String diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/LRUPopupBuilder.java b/platform/lang-impl/src/com/intellij/ide/scratch/LRUPopupBuilder.java index 9625bf16286f..2b7aeeef8bd3 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/LRUPopupBuilder.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/LRUPopupBuilder.java @@ -26,6 +26,7 @@ import java.awt.*; import java.util.List; import java.util.*; import java.util.function.Function; +import java.util.function.Predicate; /** * @author gregsh @@ -41,6 +42,7 @@ public abstract class LRUPopupBuilder { private T mySelection; private Consumer myOnChosen; private Comparator myComparator; + private Predicate myFilter = it -> true; private Iterable myValues; private JBIterable myTopValues = JBIterable.empty(); private JBIterable myMiddleValues = JBIterable.empty(); @@ -129,6 +131,11 @@ public abstract class LRUPopupBuilder { return this; } + public @NotNull LRUPopupBuilder withFilter(@Nullable Predicate filter) { + myFilter = filter; + return this; + } + public @NotNull LRUPopupBuilder withExtraSpeedSearchNamer(@Nullable Function function) { myExtraSpeedSearchNamer = function; return this; @@ -153,7 +160,7 @@ public abstract class LRUPopupBuilder { if (!lru.isEmpty()) { lru.sort(Comparator.comparingInt(o -> ids.indexOf(getStorageId(o)))); } - List combinedItems = ContainerUtil.concat(topItems, lru, middleItems, items, bottomItems); + List combinedItems = ContainerUtil.concat(topItems, lru, middleItems, items, bottomItems).stream().filter(myFilter).toList(); T sep1 = ContainerUtil.getOrElse(combinedItems, topItems.size() + lru.size() + middleItems.size(), null); T sep2 = ContainerUtil.getOrElse(combinedItems, topItems.size() + lru.size() + middleItems.size() + items.size(), null); diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java index c4a40c8d011c..57f416a0fb50 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchFileCreationHelper.java @@ -33,6 +33,13 @@ public abstract class ScratchFileCreationHelper { public boolean prepareText(@NotNull Project project, @NotNull Context context, @NotNull DataContext dataContext) { return false; } + + /** + * Return false if it's prohibited to create new scratch file for particular {@link Context#language} + */ + public boolean newScratchAllowed() { + return true; + } public void beforeCreate(@NotNull Project project, @NotNull Context context) { } diff --git a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchImplUtil.java b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchImplUtil.java index 1a7a10351bb4..48c2ba8bc360 100644 --- a/platform/lang-impl/src/com/intellij/ide/scratch/ScratchImplUtil.java +++ b/platform/lang-impl/src/com/intellij/ide/scratch/ScratchImplUtil.java @@ -256,6 +256,7 @@ final class ScratchImplUtil { } } .forValues(items) + .withFilter(it -> it.language == null || ScratchFileCreationHelper.EXTENSION.forLanguage(it.language).newScratchAllowed()) .withComparator(comparator) .withExtraSpeedSearchNamer(o -> o.fileExtension) .withSelection(null); diff --git a/plugins/kotlin/jvm/src/org/jetbrains/kotlin/idea/scratch/KtScratchFileCreationHelper.kt b/plugins/kotlin/jvm/src/org/jetbrains/kotlin/idea/scratch/KtScratchFileCreationHelper.kt index 5afda1312847..94094d0c98e8 100644 --- a/plugins/kotlin/jvm/src/org/jetbrains/kotlin/idea/scratch/KtScratchFileCreationHelper.kt +++ b/plugins/kotlin/jvm/src/org/jetbrains/kotlin/idea/scratch/KtScratchFileCreationHelper.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.idea.scratch import com.intellij.ide.scratch.ScratchFileCreationHelper import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.base.plugin.KotlinPluginModeProvider import org.jetbrains.kotlin.idea.statistics.KotlinCreateFileFUSCollector import org.jetbrains.kotlin.parsing.KotlinParserDefinition @@ -16,4 +17,11 @@ class KtScratchFileCreationHelper : ScratchFileCreationHelper() { return super.prepareText(project, context, dataContext) } + + override fun newScratchAllowed(): Boolean = + if (KotlinPluginModeProvider.isK2Mode()) { + false + } else { + super.newScratchAllowed() + } } \ No newline at end of file diff --git a/plugins/kotlin/plugin/k2/resources/kotlin.plugin.k2.xml b/plugins/kotlin/plugin/k2/resources/kotlin.plugin.k2.xml index 3f9b9b6282ed..d8e476ddb4a6 100644 --- a/plugins/kotlin/plugin/k2/resources/kotlin.plugin.k2.xml +++ b/plugins/kotlin/plugin/k2/resources/kotlin.plugin.k2.xml @@ -61,6 +61,8 @@ +