diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java index a994be84e76c..d920f3993df3 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java @@ -333,8 +333,12 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder { } // constructs binary evaluator handling unboxing and numeric promotion issues - private static BinaryExpressionEvaluator createBinaryEvaluator( - Evaluator lResult, final PsiType lType, Evaluator rResult, final PsiType rType, final IElementType operation, final @NotNull PsiType expressionExpectedType) { + private static BinaryExpressionEvaluator createBinaryEvaluator(Evaluator lResult, + PsiType lType, + Evaluator rResult, + @NotNull PsiType rType, + @NotNull IElementType operation, + @NotNull PsiType expressionExpectedType) { // handle unboxing if neccesary if (isUnboxingInBinaryExpressionApplicable(lType, rType, operation)) { if (rType instanceof PsiClassType && UnBoxingEvaluator.isTypeUnboxable(rType.getCanonicalText())) { diff --git a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java index cff648ff5360..8c8d28edbbcd 100644 --- a/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/vfs/impl/VirtualFileManagerImpl.java @@ -71,7 +71,7 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx { bus.connect().subscribe(VFS_CHANGES, new BulkVirtualFileListenerAdapter(myVirtualFileListenerMulticaster.getMulticaster())); } - public void registerFileSystem(VirtualFileSystem fileSystem) { + public void registerFileSystem(@NotNull VirtualFileSystem fileSystem) { myCollector.addExplicitExtension(fileSystem.getProtocol(), fileSystem); if (!(fileSystem instanceof CachingVirtualFileSystem)) { fileSystem.addVirtualFileListener(myVirtualFileListenerMulticaster.getMulticaster()); @@ -79,7 +79,7 @@ public class VirtualFileManagerImpl extends VirtualFileManagerEx { myPhysicalFileSystems.add(fileSystem); } - public void unregisterFileSystem(VirtualFileSystem fileSystem) { + public void unregisterFileSystem(@NotNull VirtualFileSystem fileSystem) { myCollector.removeExplicitExtension(fileSystem.getProtocol(), fileSystem); fileSystem.removeVirtualFileListener(myVirtualFileListenerMulticaster.getMulticaster()); myPhysicalFileSystems.remove(fileSystem); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java index 02724a20566e..0e9b8d0fed42 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LineMarkersPass.java @@ -121,7 +121,7 @@ public class LineMarkersPass extends ProgressableTextEditorHighlightingPass impl myMarkers = mergeLineMarkers(lineMarkers); } - private List mergeLineMarkers(List markers) { + private List mergeLineMarkers(@NotNull List markers) { List forMerge = new ArrayList(); final Iterator iterator = markers.iterator(); while (iterator.hasNext()) { @@ -154,7 +154,7 @@ public class LineMarkersPass extends ProgressableTextEditorHighlightingPass impl return result; } - public static List getMarkerProviders(Language language, Project project) { + public static List getMarkerProviders(@NotNull Language language, @NotNull Project project) { return DumbService.getInstance(project).filterByDumbAwareness(LineMarkerProviders.INSTANCE.allForLanguage(language)); } @@ -239,6 +239,7 @@ public class LineMarkersPass extends ProgressableTextEditorHighlightingPass impl } } + @NotNull public Collection queryLineMarkers() { if (myFile.getNode() == null) { // binary file? see IDEADEV-2809 @@ -255,7 +256,7 @@ public class LineMarkersPass extends ProgressableTextEditorHighlightingPass impl } @NotNull - public static LineMarkerInfo createMethodSeparatorLineMarker(PsiElement startFrom, EditorColorsManager colorsManager) { + public static LineMarkerInfo createMethodSeparatorLineMarker(@NotNull PsiElement startFrom, @NotNull EditorColorsManager colorsManager) { LineMarkerInfo info = new LineMarkerInfo( startFrom, startFrom.getTextRange(), diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java index 0fe77b6ab7a3..ffb3c91d618a 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/quickfix/QuickFixAction.java @@ -117,7 +117,7 @@ public final class QuickFixAction { } private static void addAvailableActionsForGroups(@NotNull HighlightInfo info, - Editor editor, + @NotNull Editor editor, @NotNull PsiFile file, @NotNull List outList, int group, diff --git a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java index 2f25cbf6732d..c8d1b63fb577 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/smartPointers/SelfElementInfo.java @@ -278,7 +278,8 @@ public class SelfElementInfo implements SmartPointerElementInfo { @Override public int elementHashCode() { - return myVirtualFile == null ? 0 : myVirtualFile.hashCode(); + VirtualFile virtualFile = myVirtualFile; + return virtualFile == null ? 0 : virtualFile.hashCode(); } @Override diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java index 93b19edb27b4..06a2018a7f5f 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/tree/injected/InjectedLanguageUtil.java @@ -182,23 +182,26 @@ public class InjectedLanguageUtil { public static PsiFile findInjectedPsiNoCommit(@NotNull PsiFile host, int offset) { PsiElement injected = findInjectedElementNoCommit(host, offset); - if (injected != null) { - return injected.getContainingFile(); - } - return null; + return injected == null ? null : injected.getContainingFile(); } // consider injected elements public static PsiElement findElementAtNoCommit(@NotNull PsiFile file, int offset) { - if (!InjectedLanguageManager.getInstance(file.getProject()).isInjectedFragment(file)) { - PsiElement injected = findInjectedElementNoCommit(file, offset); + FileViewProvider viewProvider = file.getViewProvider(); + Trinity result = null; + if (!(viewProvider instanceof InjectedFileViewProvider)) { + PsiDocumentManager documentManager = PsiDocumentManager.getInstance(file.getProject()); + result = tryOffset(file, offset, documentManager); + PsiElement injected = result.first; if (injected != null) { return injected; } } - //PsiElement at = file.findElementAt(offset); - FileViewProvider viewProvider = file.getViewProvider(); - return viewProvider.findElementAt(offset, viewProvider.getBaseLanguage()); + Language baseLanguage = viewProvider.getBaseLanguage(); + if (result != null && baseLanguage == result.third) { + return result.second; // already queried + } + return viewProvider.findElementAt(offset, baseLanguage); } private static final InjectedPsiCachedValueProvider INJECTED_PSI_PROVIDER = new InjectedPsiCachedValueProvider(); @@ -271,24 +274,39 @@ public class InjectedLanguageUtil { Project project = hostFile.getProject(); if (InjectedLanguageManager.getInstance(project).isInjectedFragment(hostFile)) return null; final PsiDocumentManager documentManager = PsiDocumentManager.getInstance(project); + Trinity result = tryOffset(hostFile, offset, documentManager); + PsiElement injected = result.first; + return injected; + } + // returns (injected psi, leaf element at the offset, language of the leaf element) + // since findElementAt() is expensive, we trying to reuse its result + @NotNull + private static Trinity tryOffset(@NotNull PsiFile hostFile, final int offset, @NotNull PsiDocumentManager documentManager) { FileViewProvider provider = hostFile.getViewProvider(); + Language leafLanguage = null; + PsiElement leafElement = null; for (Language language : provider.getLanguages()) { PsiElement element = provider.findElementAt(offset, language); if (element != null) { + if (leafLanguage == null) { + leafLanguage = language; + leafElement = element; + } PsiElement injected = findInside(element, hostFile, offset, documentManager); - if (injected != null) return injected; + if (injected != null) return Trinity.create(injected,element, language); } // maybe we are at the border between two psi elements, then try to find injection at the end of the left element - if (offset != 0) { - element = provider.findElementAt(offset-1, language); - if (element != null && element.getTextRange().getEndOffset() == offset) { - PsiElement injected = findInside(element, hostFile, offset, documentManager); - if (injected != null) return injected; + if (offset != 0 && (element == null || element.getTextRange().getStartOffset() == offset)) { + PsiElement leftElement = provider.findElementAt(offset-1, language); + if (leftElement != null && leftElement.getTextRange().getEndOffset() == offset) { + PsiElement injected = findInside(leftElement, hostFile, offset, documentManager); + if (injected != null) return Trinity.create(injected, element, language); } } } - return null; + + return Trinity.create(null, leafElement, leafLanguage); } private static PsiElement findInside(@NotNull PsiElement element, @NotNull PsiFile hostFile, final int hostOffset, @NotNull final PsiDocumentManager documentManager) { diff --git a/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java b/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java index 09020968f919..3087b66e0e9c 100644 --- a/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java +++ b/platform/platform-api/src/com/intellij/openapi/fileEditor/OpenFileDescriptor.java @@ -110,6 +110,7 @@ public class OpenFileDescriptor implements Navigatable { return myLogicalColumn; } + @Override public void navigate(boolean requestFocus) { if (!canNavigate()) { throw new IllegalStateException("Navigation is not possible with null project"); @@ -157,21 +158,25 @@ public class OpenFileDescriptor implements Navigatable { private void navigateInProjectView() { SelectInContext context = new SelectInContext() { + @Override @NotNull public Project getProject() { return myProject; } + @Override @NotNull public VirtualFile getVirtualFile() { return myFile; } + @Override @Nullable public Object getSelectorInFile() { return null; } + @Override @Nullable public FileEditorProvider getFileEditorProvider() { return null; @@ -217,6 +222,7 @@ public class OpenFileDescriptor implements Navigatable { int end = editor.getDocument().getLineEndOffset(line); final TextRange range = new TextRange(start, end); editor.getFoldingModel().runBatchFoldingOperation(new Runnable() { + @Override public void run() { for (FoldRegion region : allRegions) { if (!region.isExpanded() && range.intersects(TextRange.create(region))) /*region.getStartOffset() <= offset && offset <= region.getEndOffset()*/ { @@ -231,10 +237,12 @@ public class OpenFileDescriptor implements Navigatable { e.getScrollingModel().scrollToCaret(ScrollType.CENTER); } + @Override public boolean canNavigate() { return myProject != null; } + @Override public boolean canNavigateToSource() { return myProject != null; } diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java index 5280652f8858..57ee27c7a0ea 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectImpl.java @@ -400,7 +400,7 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx { component.projectOpened(); } catch (Throwable e) { - LOG.error(e); + LOG.error(component.toString(), e); } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java index 1f741d6a3c9b..eeda75d1f985 100644 --- a/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/project/impl/ProjectManagerImpl.java @@ -962,7 +962,7 @@ public class ProjectManagerImpl extends ProjectManagerEx implements NamedJDOMExt return closeProject(project, true, false, true); } - public boolean closeProject(final Project project, final boolean save, final boolean dispose, boolean checkCanClose) { + public boolean closeProject(@NotNull final Project project, final boolean save, final boolean dispose, boolean checkCanClose) { if (isLight(project)) { throw new AssertionError("must not close light project"); } diff --git a/platform/platform-resources/src/DefaultColorSchemesManager.xml b/platform/platform-resources/src/DefaultColorSchemesManager.xml index c87696c7beae..a5c720af6b5a 100644 --- a/platform/platform-resources/src/DefaultColorSchemesManager.xml +++ b/platform/platform-resources/src/DefaultColorSchemesManager.xml @@ -25,7 +25,7 @@