add knownIssue section for top issues

GitOrigin-RevId: eff01ab98fd019a2454c72e29082cbdf1af0f984
This commit is contained in:
Gregory.Shrago
2024-09-17 04:19:24 +00:00
committed by intellij-monorepo-bot
parent c79a2af5f3
commit 4bed7454d8
15 changed files with 106 additions and 77 deletions
@@ -8,6 +8,7 @@ import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil;
import com.intellij.codeInsight.intention.preview.IntentionPreviewInfo;
import com.intellij.ide.nls.NlsMessages;
import com.intellij.java.JavaBundle;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.command.CommandProcessor;
@@ -28,6 +29,7 @@ import com.intellij.openapi.util.text.HtmlChunk;
import com.intellij.psi.*;
import com.intellij.psi.impl.source.resolve.JavaResolveUtil;
import com.intellij.psi.util.PointersKt;
import com.intellij.util.SlowOperations;
import com.intellij.util.concurrency.AppExecutorUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.modules.CircularModuleDependenciesDetector;
@@ -161,28 +163,34 @@ class AddModuleDependencyFix extends OrderEntryFix {
ReadAction.nonBlocking(() -> CircularModuleDependenciesDetector.addingDependencyFormsCircularity(myCurrentModule, module))
.expireWhen(() -> project.isDisposed() || module.isDisposed())
.finishOnUiThread(ModalityState.nonModal(), circularModules -> {
if (circularModules != null && !showCircularWarning(project, circularModules, module)) return;
CommandProcessor.getInstance().runUndoTransparentAction(() -> {
JavaProjectModelModificationService.getInstance(project).addDependency(myCurrentModule, module, myScope, myExported);
if (editor == null || myClasses.isEmpty()) return;
PsiClass[] targetClasses = myClasses.stream()
.map(SmartPsiElementPointer::getElement)
.filter(Objects::nonNull)
.filter(c -> ModuleUtilCore.findModuleForPsiElement(c) == module)
.toArray(PsiClass[]::new);
if (targetClasses.length == 0) return;
PsiReference ref = restoreReference();
if (ref == null) return;
DumbService.getInstance(project).completeJustSubmittedTasks();
new AddImportAction(project, ref, editor, targetClasses).execute();
});
try (AccessToken ignore = SlowOperations.knownIssue("IDEA-359248")) {
addDependencyOnModuleEDT(project, editor, module, circularModules);
}
}).submit(AppExecutorUtil.getAppExecutorService());
}
private void addDependencyOnModuleEDT(@NotNull Project project, Editor editor, @NotNull Module module, Couple<Module> circularModules) {
if (circularModules != null && !showCircularWarning(project, circularModules, module)) return;
CommandProcessor.getInstance().runUndoTransparentAction(() -> {
JavaProjectModelModificationService.getInstance(project).addDependency(myCurrentModule, module, myScope, myExported);
if (editor == null || myClasses.isEmpty()) return;
PsiClass[] targetClasses = myClasses.stream()
.map(SmartPsiElementPointer::getElement)
.filter(Objects::nonNull)
.filter(c -> ModuleUtilCore.findModuleForPsiElement(c) == module)
.toArray(PsiClass[]::new);
if (targetClasses.length == 0) return;
PsiReference ref = restoreReference();
if (ref == null) return;
DumbService.getInstance(project).completeJustSubmittedTasks();
new AddImportAction(project, ref, editor, targetClasses).execute();
});
}
private boolean showCircularWarning(@NotNull Project project, @NotNull Couple<Module> circle, @NotNull Module classModule) {
String message = QuickFixBundle.message("orderEntry.fix.circular.dependency.warning",
getModuleName(classModule), getModuleName(circle.getFirst()),
@@ -1,6 +1,7 @@
// 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.lookup;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.util.Iconable;
import com.intellij.openapi.util.ScalableIcon;
import com.intellij.openapi.util.registry.Registry;
@@ -10,6 +11,7 @@ import com.intellij.psi.util.PsiUtilCore;
import com.intellij.ui.IconManager;
import com.intellij.ui.PlatformIcons;
import com.intellij.ui.SizedIcon;
import com.intellij.util.SlowOperations;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
@@ -28,7 +30,10 @@ public final class DefaultLookupItemRenderer extends LookupElementRenderer<Looku
}
public static @Nullable Icon getRawIcon(final LookupElement item) {
Icon icon = _getRawIcon(item);
Icon icon;
try (AccessToken ignore = SlowOperations.knownIssue("IDEA-344670, 32126317")) {
icon = _getRawIcon(item);
}
if (icon instanceof ScalableIcon) {
icon = ((ScalableIcon)icon).scale(1f);
}
@@ -39,6 +39,7 @@ import com.intellij.psi.util.PsiUtilBase
import com.intellij.psi.util.PsiUtilCore
import com.intellij.ui.LightweightHint
import com.intellij.util.Alarm
import com.intellij.util.SlowOperations
import com.intellij.util.concurrency.ThreadingAssertions
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.intellij.util.text.CharArrayUtil
@@ -162,7 +163,9 @@ class BraceHighlightingHandler internal constructor(
alarm.cancelAllRequests()
var context = BraceMatchingUtil.computeHighlightingAndNavigationContext(editor, psiFile)
var context = SlowOperations.knownIssue("IJPL-162400").use {
BraceMatchingUtil.computeHighlightingAndNavigationContext(editor, psiFile)
}
if (context != null) {
doHighlight(context.currentBraceOffset, context.isCaretAfterBrace)
offset = context.currentBraceOffset
@@ -179,7 +182,9 @@ class BraceHighlightingHandler internal constructor(
// Try to find matched brace backwards.
val backwardNonSpaceEndOffset = CharArrayUtil.shiftBackward(chars, offset - 1, "\t ") + 1
if (backwardNonSpaceEndOffset in 1..<offset) {
context = BraceMatchingUtil.computeHighlightingAndNavigationContext(editor, psiFile, backwardNonSpaceEndOffset)
context = SlowOperations.knownIssue("IJPL-162400").use {
BraceMatchingUtil.computeHighlightingAndNavigationContext(editor, psiFile, backwardNonSpaceEndOffset)
}
if (context != null) {
doHighlight(offset = context.currentBraceOffset, isAdjustedPosition = true)
offset = context.currentBraceOffset
@@ -201,7 +206,9 @@ class BraceHighlightingHandler internal constructor(
}
if (codeInsightSettings.HIGHLIGHT_SCOPE) {
highlightScope(offset)
SlowOperations.knownIssue("IJPL-162400").use {
highlightScope(offset)
}
}
}
@@ -527,7 +527,10 @@ public final class ShowUsagesAction extends AnAction implements PopupAction, Hin
AtomicBoolean manuallyResized = new AtomicBoolean();
Ref<UsageNode> preselectedRow = new Ref<>();
Predicate<? super Usage> originUsageCheck = originUsageCheck(parameters.editor);
Predicate<? super Usage> originUsageCheck;
try (AccessToken ignore = SlowOperations.knownIssue("IJPL-162330")) {
originUsageCheck = originUsageCheck(parameters.editor);
}
ShowUsagesTableCellRenderer renderer = new ShowUsagesTableCellRenderer(originUsageCheck, outOfScopeUsages, searchScope);
ShowUsagesTable table = new ShowUsagesTable(renderer, usageView);
@@ -163,10 +163,13 @@ public final class FindUsagesManager {
public @Nullable FindUsagesHandler getFindUsagesHandler(@NotNull PsiElement element, @NotNull OperationMode operationMode) {
for (FindUsagesHandlerFactory factory : FindUsagesHandlerFactory.EP_NAME.getExtensions(myProject)) {
try (AccessToken ignore = SlowOperations.knownIssue("IDEA-353115, EA-841437")) {
try (AccessToken ignore = SlowOperations.knownIssue("IJPL-162401 IDEA-353115")) {
if (!factory.canFindUsages(element)) continue;
}
FindUsagesHandler handler = factory.createFindUsagesHandler(element, operationMode);
FindUsagesHandler handler;
try (AccessToken ignore = SlowOperations.knownIssue("IJPL-162401")) {
handler = factory.createFindUsagesHandler(element, operationMode);
}
if (handler == FindUsagesHandler.NULL_HANDLER) return null;
if (handler != null) {
return handler;
@@ -220,7 +223,9 @@ public final class FindUsagesManager {
clearFindingNextUsageInFile();
startFindUsages(findUsagesOptions, handler, scopeFile, editor);
try (AccessToken ignore = SlowOperations.knownIssue("IJPL-162399")) {
startFindUsages(findUsagesOptions, handler, scopeFile, editor);
}
}
public void startFindUsages(@NotNull PsiElement psiElement, @NotNull FindUsagesOptions findUsagesOptions) {
@@ -18,6 +18,7 @@ import com.intellij.lang.LanguageNamesValidation;
import com.intellij.lang.injection.InjectedLanguageManager;
import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.actionSystem.Shortcut;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.command.CommandProcessor;
@@ -69,6 +70,7 @@ import com.intellij.ui.awt.RelativePoint;
import com.intellij.ui.popup.PopupFactoryImpl;
import com.intellij.util.CommonProcessors;
import com.intellij.util.Query;
import com.intellij.util.SlowOperations;
import com.intellij.util.containers.NotNullList;
import com.intellij.util.ui.PositionTracker;
import org.jetbrains.annotations.NonNls;
@@ -217,7 +219,7 @@ public abstract class InplaceRefactoring {
List<Pair<PsiElement, TextRange>> stringUsages = new NotNullList<>();
collectAdditionalElementsToRename(stringUsages);
try {
try (AccessToken ignore = SlowOperations.startSection(SlowOperations.ACTION_PERFORM)) { // IJPL-162116
return buildTemplateAndStart(references, stringUsages, scope, containingFile);
}
catch (Throwable e) {
@@ -16,6 +16,7 @@ import com.intellij.modcommand.ActionContext;
import com.intellij.modcommand.ModCommandExecutor;
import com.intellij.modcommand.ModUpdateFileText;
import com.intellij.openapi.actionSystem.ex.ActionUtil;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ReadAction;
@@ -55,6 +56,7 @@ import com.intellij.refactoring.util.CommonRefactoringUtil;
import com.intellij.refactoring.util.TextOccurrencesUtil;
import com.intellij.usageView.UsageInfo;
import com.intellij.util.Processor;
import com.intellij.util.SlowOperations;
import com.intellij.util.ThrowableRunnable;
import com.intellij.util.concurrency.AppExecutorUtil;
import com.intellij.util.containers.ContainerUtil;
@@ -526,7 +528,9 @@ public class VariableInplaceRenamer extends InplaceRefactoring {
if (mySnapshot != null) {
WriteCommandAction.writeCommandAction(myProject).withName(getCommandName()).run(() -> mySnapshot.apply(myInsertedName));
}
performRefactoringRename(myInsertedName, myMarkAction);
try (AccessToken ignore = SlowOperations.startSection(SlowOperations.ACTION_PERFORM)) { // IJPL-162114
performRefactoringRename(myInsertedName, myMarkAction);
}
}
else {
problem.showUI();
@@ -9,6 +9,7 @@ import com.intellij.openapi.application.runReadAction
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.getOrCreateUserData
import com.intellij.platform.lvcs.impl.diff.getEntryPath
import com.intellij.util.SlowOperations
internal val AFFECTED_PATHS: Key<Collection<String>> = Key.create("Lvcs.Affected.Paths")
@@ -18,7 +19,9 @@ internal fun ActivityData.getRootEntry(gateway: IdeaGateway): RootEntry {
runReadAction {
val affectedPaths = getUserData(AFFECTED_PATHS)
if (!affectedPaths.isNullOrEmpty()) {
return@runReadAction gateway.createTransientRootEntryForPaths(affectedPaths, true)
return@runReadAction SlowOperations.knownIssue("IJPL-162340").use {
gateway.createTransientRootEntryForPaths(affectedPaths, true)
}
}
gateway.createTransientRootEntry()
}
@@ -2,6 +2,7 @@
package com.intellij.ide.ui.newItemPopup;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.application.AccessToken;
import com.intellij.ui.ExperimentalUI;
import com.intellij.ui.ScrollingUtil;
import com.intellij.ui.SeparatorComponent;
@@ -10,6 +11,7 @@ import com.intellij.ui.components.JBBox;
import com.intellij.ui.components.JBList;
import com.intellij.ui.components.JBScrollPane;
import com.intellij.ui.render.RenderingUtil;
import com.intellij.util.SlowOperations;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.accessibility.ScreenReader;
import org.jetbrains.annotations.NotNull;
@@ -122,7 +124,10 @@ public class NewItemWithTemplatesPopupPanel<T> extends NewItemSimplePopupPanel {
MouseAdapter mouseListener = new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (myApplyAction != null && e.getClickCount() > 1) myApplyAction.consume(e);
if (myApplyAction == null || e.getClickCount() <= 1) return;
try (AccessToken ignored = SlowOperations.startSection(SlowOperations.ACTION_PERFORM)) { // IJPL-162396
myApplyAction.consume(e);
}
}
};
@@ -1426,7 +1426,10 @@ public final class EditorImpl extends UserDataHolderBase implements EditorEx, Hi
myHighlighterDisposable = () -> document.removeDocumentListener(highlighter);
Disposer.register(myDisposable, myHighlighterDisposable);
highlighter.setEditor(this);
highlighter.setText(document.getImmutableCharSequence());
try (AccessToken ignored = SlowOperations.knownIssue("IJPL-162348")) {
highlighter.setText(document.getImmutableCharSequence());
}
if (!(highlighter instanceof EmptyEditorHighlighter)) {
EditorHighlighterCache.rememberEditorHighlighterForCachesOptimization(document, highlighter);
}
@@ -11,10 +11,7 @@ import com.intellij.lang.Language;
import com.intellij.navigation.NavigationItem;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.*;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.ReadAction;
import com.intellij.openapi.application.WriteIntentReadAction;
import com.intellij.openapi.application.*;
import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.progress.ProgressIndicator;
@@ -1910,7 +1907,9 @@ public class UsageViewImpl implements UsageViewEx {
protected Navigatable createDescriptorForNode(@NotNull DefaultMutableTreeNode node) {
if (node.getChildCount() > 0) return null;
if (node instanceof Node && ((Node)node).isExcluded()) return null;
return getNavigatableForNode(node, !myPresentation.isReplaceMode());
try (AccessToken ignore = SlowOperations.knownIssue("IJPL-162332")) {
return getNavigatableForNode(node, !myPresentation.isReplaceMode());
}
}
@Override
@@ -37,6 +37,7 @@ import com.intellij.openapi.vfs.impl.BulkVirtualFileListenerAdapter
import com.intellij.psi.PsiDocumentManager
import com.intellij.ui.ExperimentalUI.Companion.isNewUI
import com.intellij.util.DocumentUtil
import com.intellij.util.SlowOperations
import com.intellij.util.concurrency.annotations.RequiresEdt
import com.intellij.util.containers.MultiMap
import com.intellij.util.ui.EDT
@@ -87,8 +88,9 @@ class XLineBreakpointManager(private val project: Project, coroutineScope: Corou
if (breakpoints.isEmpty() || ApplicationManager.getApplication().isUnitTestMode) {
return
}
breakpoints.forEach { it.updatePosition() }
SlowOperations.knownIssue("IJPL-162343").use {
breakpoints.forEach { it.updatePosition() }
}
// Check if two or more breakpoints occurred at the same position and remove duplicates.
val (valid, invalid) = breakpoints.partition { it.isValid }
@@ -23,6 +23,7 @@ import com.intellij.openapi.vfs.VirtualFileManager
import com.intellij.openapi.vfs.newvfs.BulkFileListener
import com.intellij.openapi.vfs.newvfs.events.VFileEvent
import com.intellij.util.EventDispatcher
import com.intellij.util.SlowOperations
import com.intellij.util.messages.MessageBusConnection
import com.intellij.vcs.log.runInEdt
import git4idea.GitVcs
@@ -95,7 +96,9 @@ open class GitStageTracker(val project: Project) : Disposable {
*/
internal fun markDirty(file: VirtualFile) {
if (!isStagingAreaAvailable()) return
val root = getRoot(project, file) ?: return
val root = SlowOperations.knownIssue("IJPL-162402").use {
getRoot(project, file) ?: return
}
if (!gitRoots().contains(root)) return
LOG.debug("Mark dirty ${file.filePath()}")
dirtyScopeManager.fileDirty(file.filePath())
@@ -13,6 +13,7 @@ import com.intellij.psi.util.PsiTreeUtil
import com.intellij.refactoring.HelpID
import com.intellij.refactoring.RefactoringActionHandler
import com.intellij.refactoring.util.CommonRefactoringUtil
import com.intellij.util.SlowOperations
import com.intellij.util.SmartList
import org.jetbrains.kotlin.idea.base.resources.KotlinBundle
import org.jetbrains.kotlin.idea.refactoring.chooseContainer.chooseContainerElementIfNecessary
@@ -20,32 +21,7 @@ import org.jetbrains.kotlin.idea.refactoring.introduce.KotlinIntroduceVariableHe
import org.jetbrains.kotlin.idea.refactoring.selectElement
import org.jetbrains.kotlin.idea.util.ElementKind
import org.jetbrains.kotlin.idea.util.application.isUnitTestMode
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtBlockExpression
import org.jetbrains.kotlin.psi.KtClassBody
import org.jetbrains.kotlin.psi.KtConstructorCalleeExpression
import org.jetbrains.kotlin.psi.KtConstructorDelegationReferenceExpression
import org.jetbrains.kotlin.psi.KtContainerNode
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtDeclarationWithBody
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.psi.KtExpression
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtFunction
import org.jetbrains.kotlin.psi.KtFunctionLiteral
import org.jetbrains.kotlin.psi.KtIfExpression
import org.jetbrains.kotlin.psi.KtLambdaExpression
import org.jetbrains.kotlin.psi.KtLoopExpression
import org.jetbrains.kotlin.psi.KtOperationExpression
import org.jetbrains.kotlin.psi.KtPsiUtil
import org.jetbrains.kotlin.psi.KtQualifiedExpression
import org.jetbrains.kotlin.psi.KtReferenceExpression
import org.jetbrains.kotlin.psi.KtStatementExpression
import org.jetbrains.kotlin.psi.KtSuperExpression
import org.jetbrains.kotlin.psi.KtTypeReference
import org.jetbrains.kotlin.psi.KtWhenEntry
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.collectDescendantsOfType
import org.jetbrains.kotlin.psi.psiUtil.isFunctionalExpression
import org.jetbrains.kotlin.psi.psiUtil.parents
@@ -94,8 +70,10 @@ abstract class KotlinIntroduceVariableHandler : RefactoringActionHandler {
if (file !is KtFile) return
try {
selectElement(editor, file, failOnEmptySuggestion = false, listOf(ElementKind.EXPRESSION)) {
collectCandidateTargetContainersAndDoRefactoring(project, editor, it as KtExpression?, isVar = false)
selectElement(editor, file, failOnEmptySuggestion = false, listOf(ElementKind.EXPRESSION)) { psi ->
SlowOperations.knownIssue("KTIJ-31332").use {
collectCandidateTargetContainersAndDoRefactoring(project, editor, psi as KtExpression?, isVar = false)
}
}
} catch (e: IntroduceRefactoringException) {
showErrorHint(project, editor, e.message!!)
@@ -9,6 +9,7 @@ import com.intellij.openapi.editor.event.EditorFactoryListener
import com.intellij.openapi.editor.ex.SoftWrapChangeListener
import com.intellij.openapi.editor.ex.SoftWrapModelEx
import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.util.SlowOperations
import org.intellij.plugins.markdown.lang.MarkdownFileType
/**
@@ -17,16 +18,17 @@ import org.intellij.plugins.markdown.lang.MarkdownFileType
internal class MarkdownInlayUpdateOnSoftWrapListener: EditorFactoryListener {
override fun editorCreated(event: EditorFactoryEvent) {
val editor = event.editor
if (ReadAction.compute<Boolean, Nothing> { isMarkdownEditor(editor) }) {
val softWrapModel = (editor.softWrapModel as? SoftWrapModelEx) ?: return
softWrapModel.addSoftWrapChangeListener(object : SoftWrapChangeListener {
override fun softWrapsChanged() {
InlayHintsPassFactoryInternal.forceHintsUpdateOnNextPass()
}
override fun recalculationEnds() = Unit
})
SlowOperations.knownIssue("IJPL-162344").use {
if (!ReadAction.compute<Boolean, Nothing> { isMarkdownEditor(editor) }) return
}
val softWrapModel = (editor.softWrapModel as? SoftWrapModelEx) ?: return
softWrapModel.addSoftWrapChangeListener(object : SoftWrapChangeListener {
override fun softWrapsChanged() {
InlayHintsPassFactoryInternal.forceHintsUpdateOnNextPass()
}
override fun recalculationEnds() = Unit
})
}
private fun isMarkdownEditor(editor: Editor): Boolean =