From 5c5b53d3421273d52a77454b6a6aa29ed98efa67 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Mon, 5 Oct 2009 19:05:09 +0400 Subject: [PATCH] five or six bug fixes, haven't two extra hours to push them separately --- .../psi/impl/file/impl/JavaFileManagerImpl.java | 6 ++++-- .../com/intellij/codeInspection/ProblemsHolder.java | 4 ++-- .../codeInsight/editorActions/TypedHandler.java | 2 +- .../codeInsight/lookup/impl/TypedHandler.java | 3 ++- .../navigation/IncrementalSearchHandler.java | 3 ++- .../template/impl/editorActions/SpaceHandler.java | 3 ++- .../com/intellij/execution/impl/ConsoleViewImpl.java | 2 +- .../psi/impl/search/IndexPatternSearcher.java | 3 ++- .../com/intellij/openapi/actionSystem/DataKey.java | 9 +++++---- .../openapi/editor/ReadOnlyModificationException.java | 4 +++- .../openapi/editor/actionSystem/TypedAction.java | 11 +++++------ .../editor/actionSystem/TypedActionHandler.java | 3 ++- .../openapi/fileEditor/FileDocumentManager.java | 2 +- .../intellij/openapi/vfs/ReadonlyStatusHandler.java | 10 ++++++---- .../openapi/application/impl/ApplicationImpl.java | 2 +- .../fileEditor/impl/FileDocumentManagerImpl.java | 2 +- .../readOnlyHandler/ReadonlyStatusHandlerImpl.java | 5 ++++- .../com/intellij/usages/impl/UsagePreviewPanel.java | 3 ++- 18 files changed, 46 insertions(+), 31 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java index f0949dcc036b..d872a4067bcd 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/impl/JavaFileManagerImpl.java @@ -300,8 +300,10 @@ public class JavaFileManagerImpl implements JavaFileManager { PsiClass aClass = (PsiClass)found; final boolean valid = aClass.isValid(); - LOG.assertTrue(valid); - if (!valid) continue; + if (!valid) { + LOG.error("Invalid class "+aClass+"; "+aClass.getContainingFile()); + continue; + } final String qualifiedName = aClass.getQualifiedName(); if (qualifiedName == null || !qualifiedName.equals(qName)) continue; diff --git a/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java b/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java index 1141904ab236..6a5f532322c6 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java +++ b/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java @@ -60,13 +60,13 @@ public class ProblemsHolder { myProblems = new ArrayList(1); } PsiElement element = problemDescriptor.getPsiElement(); - if (!isInPsiFile(element)) { + if (element != null && !isInPsiFile(element)) { LOG.error("Reported element " + element + " is not from the file '" + myFile + "' the inspection was invoked for. Message:" + problemDescriptor.getDescriptionTemplate()); } myProblems.add(problemDescriptor); } - private boolean isInPsiFile(PsiElement element) { + private boolean isInPsiFile(@NotNull PsiElement element) { PsiFile file = element.getContainingFile(); return ArrayUtil.indexOf(myFile.getPsiRoots(), file) != -1; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java index 4aa137156923..8fa169567650 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/TypedHandler.java @@ -94,7 +94,7 @@ public class TypedHandler implements TypedActionHandler { quoteHandlers.put(fileType, quoteHandler); } - public void execute(Editor editor, char charTyped, DataContext dataContext) { + public void execute(@NotNull Editor editor, char charTyped, @NotNull DataContext dataContext) { Project project = PlatformDataKeys.PROJECT.getData(dataContext); if (project == null || editor.isColumnMode()){ if (myOriginalHandler != null){ diff --git a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java index 74dd63887996..5be04b8e6c63 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/TypedHandler.java @@ -13,6 +13,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.EditorModificationUtil; import com.intellij.openapi.editor.actionSystem.TypedActionHandler; import com.intellij.openapi.extensions.Extensions; +import org.jetbrains.annotations.NotNull; import java.util.Arrays; @@ -23,7 +24,7 @@ public class TypedHandler implements TypedActionHandler { myOriginalHandler = originalHandler; } - public void execute(final Editor editor, final char charTyped, DataContext dataContext){ + public void execute(@NotNull final Editor editor, final char charTyped, @NotNull DataContext dataContext){ final LookupImpl lookup = (LookupImpl)LookupManager.getActiveLookup(editor); if (lookup == null){ myOriginalHandler.execute(editor, charTyped, dataContext); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/navigation/IncrementalSearchHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/navigation/IncrementalSearchHandler.java index eebf2fdb0d21..8218b6e9963a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/navigation/IncrementalSearchHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/navigation/IncrementalSearchHandler.java @@ -27,6 +27,7 @@ import com.intellij.ui.LightweightHint; import com.intellij.util.text.StringSearcher; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; @@ -355,7 +356,7 @@ public class IncrementalSearchHandler { myOriginalHandler = originalAction; } - public void execute(Editor editor, char charTyped, DataContext dataContext) { + public void execute(@NotNull Editor editor, char charTyped, @NotNull DataContext dataContext) { PerEditorSearchData data = editor.getUserData(SEARCH_DATA_IN_EDITOR_VIEW_KEY); if (data == null || data.hint == null){ myOriginalHandler.execute(editor, charTyped, dataContext); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/editorActions/SpaceHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/editorActions/SpaceHandler.java index 79a3872c2c69..f251787ed08d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/template/impl/editorActions/SpaceHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/template/impl/editorActions/SpaceHandler.java @@ -7,6 +7,7 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.project.Project; import com.intellij.codeInsight.template.impl.TemplateManagerImpl; import com.intellij.codeInsight.template.impl.TemplateSettings; +import org.jetbrains.annotations.NotNull; public class SpaceHandler implements TypedActionHandler { private final TypedActionHandler myOriginalHandler; @@ -15,7 +16,7 @@ public class SpaceHandler implements TypedActionHandler { myOriginalHandler = originalHandler; } - public void execute(Editor editor, char charTyped, DataContext dataContext) { + public void execute(@NotNull Editor editor, char charTyped, @NotNull DataContext dataContext) { if (charTyped != ' ') { myOriginalHandler.execute(editor, charTyped, dataContext); return; diff --git a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java index 11c05c46839f..c4d5067de872 100644 --- a/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/impl/ConsoleViewImpl.java @@ -922,7 +922,7 @@ public final class ConsoleViewImpl extends JPanel implements ConsoleView, Observ myOriginalHandler = originalAction; } - public void execute(final Editor editor, final char charTyped, final DataContext dataContext) { + public void execute(@NotNull final Editor editor, final char charTyped, @NotNull final DataContext dataContext) { final ConsoleViewImpl consoleView = editor.getUserData(CONSOLE_VIEW_IN_EDITOR_VIEW); if (consoleView == null || !consoleView.myState.isRunning() || consoleView.isViewer){ myOriginalHandler.execute(editor, charTyped, dataContext); diff --git a/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java b/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java index 993fec0f93d7..cabdc0d9ab91 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/search/IndexPatternSearcher.java @@ -155,7 +155,8 @@ public class IndexPatternSearcher implements QueryExecutor @@ -37,11 +38,11 @@ public class DataKey { private final String myName; - private DataKey(final String name) { + private DataKey(@NotNull String name) { myName = name; } - public static DataKey create(@NonNls String name) { + public static DataKey create(@NotNull @NonNls String name) { if (ourDataKeyIndex.containsKey(name)) { //noinspection unchecked return ourDataKeyIndex.get(name); @@ -56,7 +57,7 @@ public class DataKey { } @Nullable - public T getData(DataContext dataContext) { + public T getData(@NotNull DataContext dataContext) { //noinspection unchecked return (T) dataContext.getData(myName); } diff --git a/platform/platform-api/src/com/intellij/openapi/editor/ReadOnlyModificationException.java b/platform/platform-api/src/com/intellij/openapi/editor/ReadOnlyModificationException.java index 0e127e0f6297..7473625e8671 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/ReadOnlyModificationException.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/ReadOnlyModificationException.java @@ -15,10 +15,12 @@ */ package com.intellij.openapi.editor; +import org.jetbrains.annotations.NotNull; + public class ReadOnlyModificationException extends RuntimeException { private final Document myDocument; - public ReadOnlyModificationException(Document document) { + public ReadOnlyModificationException(@NotNull Document document) { super(EditorBundle.message("attempt.to.modify.read.only.document.error.message")); myDocument = document; } diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java index 241a72d677ca..4e908d9dfc47 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedAction.java @@ -24,6 +24,7 @@ import com.intellij.openapi.editor.*; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; /** * Provides services for registering actions which are activated by typing in the editor. @@ -48,15 +49,13 @@ public class TypedAction { } private static class Handler implements TypedActionHandler { - public void execute(Editor editor, char charTyped, DataContext dataContext) { + public void execute(@NotNull Editor editor, char charTyped, @NotNull DataContext dataContext) { if (editor.isViewer()) return; Document doc = editor.getDocument(); - if (dataContext != null) { - Project project = PlatformDataKeys.PROJECT.getData(dataContext); - if (project != null && !FileDocumentManager.getInstance().requestWriting(doc, project)) { - return; - } + Project project = PlatformDataKeys.PROJECT.getData(dataContext); + if (!FileDocumentManager.getInstance().requestWriting(doc, project)) { + return; } doc.startGuardedBlockChecking(); diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedActionHandler.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedActionHandler.java index 8da0eb05f1ab..86ec4fa89a4d 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedActionHandler.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/TypedActionHandler.java @@ -17,6 +17,7 @@ package com.intellij.openapi.editor.actionSystem; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.editor.Editor; +import org.jetbrains.annotations.NotNull; /** * Interface for actions activated by typing in the editor. @@ -32,5 +33,5 @@ public interface TypedActionHandler { * @param charTyped the typed character. * @param dataContext the current data context. */ - void execute(Editor editor, char charTyped, DataContext dataContext); + void execute(@NotNull Editor editor, char charTyped, @NotNull DataContext dataContext); } diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java index 6c9b28f8dde0..b8ae1e969f23 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/FileDocumentManager.java @@ -70,7 +70,7 @@ public abstract class FileDocumentManager { */ public abstract boolean requestWriting(@NotNull Document document, Project project); - public static boolean fileForDocumentCheckedOutSuccessfully(@NotNull Document document, Project project) { + public static boolean fileForDocumentCheckedOutSuccessfully(@NotNull Document document, @NotNull Project project) { return getInstance().requestWriting(document, project); } diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java b/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java index 1e6fffd65816..6fc3e22969a9 100644 --- a/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/ReadonlyStatusHandler.java @@ -17,26 +17,28 @@ package com.intellij.openapi.vfs; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; import java.util.Collection; public abstract class ReadonlyStatusHandler { - - public static boolean ensureFilesWritable(Project project, VirtualFile... files) { + public static boolean ensureFilesWritable(@NotNull Project project, @NotNull VirtualFile... files) { return !getInstance(project).ensureFilesWritable(files).hasReadonlyFiles(); } public abstract static class OperationStatus { + @NotNull public abstract VirtualFile[] getReadonlyFiles(); public abstract boolean hasReadonlyFiles(); + @NotNull public abstract String getReadonlyFilesMessage(); } - public abstract OperationStatus ensureFilesWritable(VirtualFile... files); + public abstract OperationStatus ensureFilesWritable(@NotNull VirtualFile... files); - public OperationStatus ensureFilesWritable(final Collection files) { + public OperationStatus ensureFilesWritable(@NotNull Collection files) { return ensureFilesWritable(files.toArray(new VirtualFile[files.size()])); } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index a8d4a821d4ce..087a360d5bc7 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -87,7 +87,7 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application private boolean myDoNotSave = false; private volatile boolean myDisposeInProgress = false; - private AtomicBoolean mySaveSettingsIsInProgress = new AtomicBoolean(false); + private final AtomicBoolean mySaveSettingsIsInProgress = new AtomicBoolean(false); private final ExecutorService ourThreadExecutorsService = new ThreadPoolExecutor( 3, diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java index cabbbe308b57..fea2a27b1558 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/FileDocumentManagerImpl.java @@ -304,7 +304,7 @@ public class FileDocumentManagerImpl extends FileDocumentManager implements Appl @Override public boolean requestWriting(@NotNull Document document, Project project) { final VirtualFile file = getInstance().getFile(document); - if (file != null && file.isValid()) { + if (project != null && file != null && file.isValid()) { return ReadonlyStatusHandler.ensureFilesWritable(project, file); } if (document.isWritable()) { diff --git a/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java b/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java index 428503a9a228..85e71ab3ac19 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vcs/readOnlyHandler/ReadonlyStatusHandlerImpl.java @@ -44,6 +44,7 @@ import com.intellij.openapi.util.MultiValuesMap; import com.intellij.openapi.vfs.ReadonlyStatusHandler; import com.intellij.openapi.vfs.VirtualFile; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import java.util.*; @@ -78,7 +79,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements myState = state; } - public OperationStatus ensureFilesWritable(VirtualFile... files) { + public OperationStatus ensureFilesWritable(@NotNull VirtualFile... files) { if (files.length == 0) { return new OperationStatusImpl(VirtualFile.EMPTY_ARRAY); } @@ -173,6 +174,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements myReadonlyFiles = readonlyFiles; } + @NotNull public VirtualFile[] getReadonlyFiles() { return myReadonlyFiles; } @@ -181,6 +183,7 @@ public class ReadonlyStatusHandlerImpl extends ReadonlyStatusHandler implements return myReadonlyFiles.length > 0; } + @NotNull public String getReadonlyFilesMessage() { if (hasReadonlyFiles()) { StringBuffer buf = new StringBuffer(); diff --git a/platform/usageView/src/com/intellij/usages/impl/UsagePreviewPanel.java b/platform/usageView/src/com/intellij/usages/impl/UsagePreviewPanel.java index c68a4de95f9f..a5d0988ed9d4 100644 --- a/platform/usageView/src/com/intellij/usages/impl/UsagePreviewPanel.java +++ b/platform/usageView/src/com/intellij/usages/impl/UsagePreviewPanel.java @@ -114,7 +114,8 @@ public class UsagePreviewPanel extends JPanel implements Disposable { TextRange elementRange = psiElement.getTextRange(); TextRange infoRange = info.getRange(); - TextRange textRange = elementRange.contains(infoRange) ? elementRange.cutOut(infoRange) : elementRange; + TextRange textRange = elementRange.intersection(infoRange); + if (textRange == null) textRange = elementRange; // hack to determine element range to highlight if (psiElement instanceof PsiNamedElement && !(psiElement instanceof PsiFile)) { PsiFile psiFile = psiElement.getContainingFile();