From 82f152ba1cfcbeabdbdd490982de1658749943dd Mon Sep 17 00:00:00 2001 From: Alexey Pegov Date: Wed, 1 Jun 2011 14:36:32 +0400 Subject: [PATCH 01/12] ide.tree.deferredicon.invalidates.cache in Registry option for IDEA-70087 IDEA constantly eats 30-50% of CPU under MacOSX 10.6.7 --- platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java | 3 ++- platform/platform-resources-en/src/misc/registry.properties | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java b/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java index 5ac031be579c..cd86d79f50e0 100644 --- a/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java +++ b/platform/lang-impl/src/com/intellij/ui/DeferredIconImpl.java @@ -24,6 +24,7 @@ import com.intellij.concurrency.JobUtil; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.IndexNotReadyException; import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.registry.Registry; import com.intellij.util.Alarm; import com.intellij.util.Function; import com.intellij.util.ui.EmptyIcon; @@ -110,7 +111,7 @@ public class DeferredIconImpl implements DeferredIcon { int oldWidth = myDelegateIcon.getIconWidth(); myDelegateIcon = evaluate(); - final boolean shouldRevalidate = myDelegateIcon.getIconWidth() != oldWidth; + final boolean shouldRevalidate = Registry.is("ide.tree.deferredicon.invalidates.cache") && myDelegateIcon.getIconWidth() != oldWidth; //noinspection SSBasedInspection SwingUtilities.invokeLater(new Runnable() { diff --git a/platform/platform-resources-en/src/misc/registry.properties b/platform/platform-resources-en/src/misc/registry.properties index 23ec4bb6653f..a0af20c3f42e 100644 --- a/platform/platform-resources-en/src/misc/registry.properties +++ b/platform/platform-resources-en/src/misc/registry.properties @@ -63,6 +63,7 @@ ide.tree.autoExpandMaxDepth=5 ide.tree.expandRecursionDepth=50 ide.tree.checkStructure=false ide.tree.uiLockAttempt=250 +ide.tree.deferredicon.invalidates.cache=true ide.splitter.mouseZone=6 ide.smart.horizontal.scrolling=true From dc607fff9c86a064b48cf0ebea1cf06f5b729930 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 1 Jun 2011 14:48:27 +0400 Subject: [PATCH 02/12] force repaint on category change --- .../com/intellij/openapi/diff/impl/dir/DirDiffPanel.java | 9 ++------- .../openapi/diff/impl/dir/DirDiffTableModel.java | 1 + 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java index 6e5c52d614bb..fccaa4c8f214 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java @@ -33,7 +33,6 @@ import com.intellij.ui.TableSpeedSearch; import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBLoadingPanel; import com.intellij.ui.table.JBTable; -import com.intellij.util.containers.Convertor; import com.intellij.util.ui.UIUtil; import javax.swing.*; @@ -277,8 +276,6 @@ public class DirDiffPanel implements Disposable { myCurrentElement = element.getSource(); } else { myDiffPanel.add(getErrorLabel(), BorderLayout.CENTER); - myDiffPanel.revalidate(); - myDiffPanel.repaint(); } } else { final DiffElement object; @@ -293,14 +290,12 @@ public class DirDiffPanel implements Disposable { myCurrentElement = object; myDiffPanel.add(myViewComponent, BorderLayout.CENTER); DataManager.registerDataProvider(myDiffPanel, myCurrentElement.getDataProvider(project)); - myDiffPanel.revalidate(); - myDiffPanel.repaint(); } else { myDiffPanel.add(getErrorLabel(), BorderLayout.CENTER); - myDiffPanel.revalidate(); - myDiffPanel.repaint(); } } + myDiffPanel.revalidate(); + myDiffPanel.repaint(); } private void registerCustomShortcuts(DirDiffToolbarActions actions, JPanel rootPanel) { diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java index 461f762aac41..95ebb8b9ca04 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffTableModel.java @@ -113,6 +113,7 @@ public class DirDiffTableModel extends AbstractTableModel implements DirDiffMode myUpdating.set(false); selectFirstRow(); myPanel.focusTable(); + myPanel.update(true); } private void selectFirstRow() { From 82ed80cffa96120c68a49b3cbcb5e5df76bde712 Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Wed, 1 Jun 2011 14:58:32 +0400 Subject: [PATCH 03/12] IDEA-70492 Javadoc Smart Complete Statement: Improve processing in case of the last parameter --- .../smartEnter/JavadocFixer.java | 42 ++++++++++++++++++- .../com/intellij/javadoc/JavadocHelper.java | 17 ++++++-- .../LastJavadocParameterDescription.java | 10 +++++ ...stJavadocParameterDescriptionToReturn.java | 11 +++++ ...docParameterDescriptionToReturn_after.java | 11 +++++ ...LastJavadocParameterDescription_after.java | 11 +++++ .../codeInsight/CompleteStatementTest.java | 4 ++ 7 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java create mode 100644 java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java create mode 100644 java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java create mode 100644 java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavadocFixer.java b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavadocFixer.java index 3d92eb5850fc..c42ae65171fd 100644 --- a/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavadocFixer.java +++ b/java/java-impl/src/com/intellij/codeInsight/editorActions/smartEnter/JavadocFixer.java @@ -2,6 +2,7 @@ package com.intellij.codeInsight.editorActions.smartEnter; import com.intellij.javadoc.JavadocHelper; import com.intellij.openapi.editor.CaretModel; +import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.LogicalPosition; import com.intellij.openapi.util.Pair; @@ -44,7 +45,33 @@ public class JavadocFixer { final JavadocHelper.JavadocParameterInfo next = findNext(pair.second, pair.first); if (next == null) { - return false; + final int line = pair.first.lastLine + 1; + final Document document = editor.getDocument(); + if (line < document.getLineCount()) { + StringBuilder indent = new StringBuilder(); + boolean insertIndent = true; + final CharSequence text = document.getCharsSequence(); + for (int i = document.getLineStartOffset(line), max = document.getLineEndOffset(line); i < max; i++) { + final char c = text.charAt(i); + if (c == ' ' || c == '\t') { + indent.append(c); + continue; + } + else if (c == '*') { + indent.append("* "); + if (i < max - 1 && text.charAt(i + 1) != '/') { + insertIndent = false; + } + } + indent.append("\n"); + break; + } + if (insertIndent) { + document.insertString(document.getLineStartOffset(line), indent); + } + } + moveCaretToTheLineEndIfPossible(editor, line); + return true; } if (next.parameterDescriptionStartPosition != null) { @@ -57,6 +84,19 @@ public class JavadocFixer { return true; } + private static void moveCaretToTheLineEndIfPossible(@NotNull Editor editor, int line) { + final Document document = editor.getDocument(); + final CaretModel caretModel = editor.getCaretModel(); + int offset; + if (line >= document.getLineCount()) { + offset = document.getTextLength(); + } + else { + offset = document.getLineEndOffset(line); + } + caretModel.moveToOffset(offset); + } + @Nullable private static JavadocHelper.JavadocParameterInfo findNext(@NotNull Collection data, @NotNull JavadocHelper.JavadocParameterInfo anchor) diff --git a/java/java-impl/src/com/intellij/javadoc/JavadocHelper.java b/java/java-impl/src/com/intellij/javadoc/JavadocHelper.java index 276039f22a52..3055eab56c23 100644 --- a/java/java-impl/src/com/intellij/javadoc/JavadocHelper.java +++ b/java/java-impl/src/com/intellij/javadoc/JavadocHelper.java @@ -205,14 +205,19 @@ public class JavadocHelper { if (elementType == JavaDocTokenType.DOC_COMMENT_DATA) { return new JavadocParameterInfo( editor.offsetToLogicalPosition(paramRef.getTextRange().getEndOffset()), - editor.offsetToLogicalPosition(e.getTextRange().getStartOffset()) + editor.offsetToLogicalPosition(e.getTextRange().getStartOffset()), + editor.getDocument().getLineNumber(e.getTextRange().getEndOffset()) ); } else if (elementType == JavaDocTokenType.DOC_COMMENT_LEADING_ASTERISKS) { break; } } - return new JavadocParameterInfo(editor.offsetToLogicalPosition(paramRef.getTextRange().getEndOffset()), null); + return new JavadocParameterInfo( + editor.offsetToLogicalPosition(paramRef.getTextRange().getEndOffset()), + null, + editor.getDocument().getLineNumber(paramRef.getTextRange().getEndOffset()) + ); } /** @@ -232,10 +237,16 @@ public class JavadocHelper { */ @NotNull public final LogicalPosition parameterNameEndPosition; @Nullable public final LogicalPosition parameterDescriptionStartPosition; + /** Last logical line occupied by the current javadoc parameter. */ + public final int lastLine; - public JavadocParameterInfo(@NotNull LogicalPosition parameterNameEndPosition, LogicalPosition parameterDescriptionStartPosition) { + public JavadocParameterInfo(@NotNull LogicalPosition parameterNameEndPosition, + LogicalPosition parameterDescriptionStartPosition, + int lastLine) + { this.parameterNameEndPosition = parameterNameEndPosition; this.parameterDescriptionStartPosition = parameterDescriptionStartPosition; + this.lastLine = lastLine; } @Override diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java new file mode 100644 index 000000000000..361f8ba6d17b --- /dev/null +++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription.java @@ -0,0 +1,10 @@ +class Foo { + + /** + * + * @param i desc + * @param j desc + */ + void test(int i, int j) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java new file mode 100644 index 000000000000..8b86b2a8dfca --- /dev/null +++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn.java @@ -0,0 +1,11 @@ +class Foo { + + /** + * + * @param i desc + * @param j desc + * @return + */ + int test(int i, int j) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java new file mode 100644 index 000000000000..1669c998d873 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescriptionToReturn_after.java @@ -0,0 +1,11 @@ +class Foo { + + /** + * + * @param i desc + * @param j desc + * @return + */ + int test(int i, int j) { + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java new file mode 100644 index 000000000000..fae825de5b42 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completeStatement/LastJavadocParameterDescription_after.java @@ -0,0 +1,11 @@ +class Foo { + + /** + * + * @param i desc + * @param j desc + * + */ + void test(int i, int j) { + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java index 4befb13a86af..cd8c8c1ce58f 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/CompleteStatementTest.java @@ -223,6 +223,10 @@ public class CompleteStatementTest extends EditorActionTestCase { public void testFromJavadocParameterDescriptionEndToNextParameter() throws Exception { doTest(); } public void testFromJavadocParameterDescriptionMiddleToNextParameter() throws Exception { doTest(); } + + public void testLastJavadocParameterDescription() throws Exception { doTest(); } + + public void testLastJavadocParameterDescriptionToReturn() throws Exception { doTest(); } private void doTestBracesNextLineStyle() throws Exception { CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()); From f5ee63099bc7483cdda0e8b6b1b6fe2dd10bec92 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 1 Jun 2011 13:57:36 +0200 Subject: [PATCH 04/12] a better NPE fix, some space around the log icon --- .../wm/impl/status/InfoAndProgressPanel.java | 5 ++--- .../openapi/wm/impl/status/StatusPanel.java | 17 +++++++++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java index f44f9ca99c19..6b185d885e99 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/InfoAndProgressPanel.java @@ -364,9 +364,8 @@ public class InfoAndProgressPanel extends JPanel implements CustomStatusBarWidge return Pair.create(myInfoPanel.getText(), myCurrentRequestor); } - final boolean logMode = StringUtil.isEmpty(text) && !hasProgressIndicators(); - myInfoPanel.updateText(logMode, text); - myCurrentRequestor = logMode ? requestor : null; + boolean logMode = myInfoPanel.updateText(!hasProgressIndicators(), text); + myCurrentRequestor = logMode ? null : requestor; return Pair.create(text, requestor); } diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java index 570702fcc902..5f30f587d386 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/status/StatusPanel.java @@ -16,6 +16,7 @@ package com.intellij.openapi.wm.impl.status; import com.intellij.notification.impl.NotificationsManagerImpl; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.util.IconLoader; @@ -38,6 +39,7 @@ import java.util.Date; * @author peter */ class StatusPanel extends JPanel { + private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.status.StatusPanel"); private static final Icon ourShowLogIcon = IconLoader.getIcon("/general/hideSideUp.png"); private static final Icon ourHideLogIcon = IconLoader.getIcon("/general/hideSideDown.png"); private boolean myLogMode; @@ -53,6 +55,8 @@ class StatusPanel extends JPanel { setOpaque(isOpaque() && !SystemInfo.isMac); + myShowLog.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 5)); + myShowLog.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { @@ -89,17 +93,18 @@ class StatusPanel extends JPanel { myDirty = false; } - public void updateText(boolean logMode, @Nullable String nonLogText) { - myLogMode = logMode; + public boolean updateText(boolean logAllowed, @Nullable String nonLogText) { + myLogMode = logAllowed && StringUtil.isEmpty(nonLogText) && myLogMessage != null; - myShowLog.setVisible(logMode); + myShowLog.setVisible(myLogMode); - if (logMode) { + if (myLogMode) { + LOG.assertTrue(myLogTime != null); new Runnable() { @Override public void run() { String text = myLogMessage; - if (myLogTime != null && (myDirty || System.currentTimeMillis() - myLogTime.getTime() >= DateFormatUtil.MINUTE)) { + if (myDirty || System.currentTimeMillis() - myLogTime.getTime() >= DateFormatUtil.MINUTE) { text += " (" + StringUtil.decapitalize(DateFormatUtil.formatPrettyDateTime(myLogTime)) + ")"; } myTextPanel.setText(text); @@ -127,7 +132,7 @@ class StatusPanel extends JPanel { myTextPanel.setText(nonLogText); myLogAlarm.cancelAllRequests(); } - + return myLogMode; } public void hideLog() { From 8832f1c3dc73ed4f5797b8b2bfe462e73fdbc223 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Wed, 1 Jun 2011 16:34:44 +0400 Subject: [PATCH 05/12] Rollback for now, to fix tests --- .../com/intellij/lexer/LookAheadLexer.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/platform/platform-api/src/com/intellij/lexer/LookAheadLexer.java b/platform/platform-api/src/com/intellij/lexer/LookAheadLexer.java index 87bb7e0c9d9c..4c70406b5941 100644 --- a/platform/platform-api/src/com/intellij/lexer/LookAheadLexer.java +++ b/platform/platform-api/src/com/intellij/lexer/LookAheadLexer.java @@ -17,7 +17,8 @@ package com.intellij.lexer; import com.intellij.psi.tree.IElementType; import com.intellij.util.containers.ImmutableUserMap; -import com.intellij.util.containers.Queue; + +import java.util.LinkedList; /** * @author peter @@ -28,8 +29,8 @@ public abstract class LookAheadLexer extends LexerBase{ private final Lexer myBaseLexer; private int myTokenStart; - private final Queue myTypeCache = new Queue(50); - private final Queue myEndOffsetCache = new Queue(50); + private final LinkedList myTypeCache = new LinkedList(); + private final LinkedList myEndOffsetCache = new LinkedList(); public LookAheadLexer(final Lexer baseLexer) { myBaseLexer = baseLexer; @@ -40,8 +41,8 @@ public abstract class LookAheadLexer extends LexerBase{ } protected void addToken(int endOffset, IElementType type) { - myTypeCache.addLast(type); - myEndOffsetCache.addLast(endOffset); + myTypeCache.add(type); + myEndOffsetCache.add(endOffset); } protected void lookAhead(Lexer baseLexer) { @@ -50,8 +51,8 @@ public abstract class LookAheadLexer extends LexerBase{ public void advance() { if (!myTypeCache.isEmpty()) { - myTypeCache.pullFirst(); - myTokenStart = myEndOffsetCache.pullFirst(); + myTypeCache.removeFirst(); + myTokenStart = myEndOffsetCache.removeFirst(); } if (myTypeCache.isEmpty()) { doLookAhead(); @@ -80,8 +81,8 @@ public abstract class LookAheadLexer extends LexerBase{ protected void resetCacheSize(int size) { while (myTypeCache.size() > size) { - myTypeCache.pullFirst(); - myEndOffsetCache.pullFirst(); + myTypeCache.removeLast(); + myEndOffsetCache.removeLast(); } } @@ -91,7 +92,7 @@ public abstract class LookAheadLexer extends LexerBase{ } public int getTokenEnd() { - return myEndOffsetCache.peekFirst(); + return myEndOffsetCache.getFirst(); } public int getTokenStart() { @@ -114,7 +115,7 @@ public abstract class LookAheadLexer extends LexerBase{ } public IElementType getTokenType() { - return myTypeCache.peekFirst(); + return myTypeCache.getFirst(); } @Override From abd37e0659c0eefc72a58976146a0a976ee4dd27 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 1 Jun 2011 16:49:56 +0400 Subject: [PATCH 06/12] allows compare dirs inside jars --- .../openapi/diff/actions/CompareDirectoriesAction.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareDirectoriesAction.java b/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareDirectoriesAction.java index 1da987aebbda..7bb751765ced 100644 --- a/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareDirectoriesAction.java +++ b/platform/platform-impl/src/com/intellij/openapi/diff/actions/CompareDirectoriesAction.java @@ -25,7 +25,6 @@ import com.intellij.openapi.diff.DirDiffManager; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserFactory; import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; /** @@ -63,7 +62,7 @@ public class CompareDirectoriesAction extends AnAction { public void update(AnActionEvent e) { final VirtualFile[] files = e.getData(PlatformDataKeys.VIRTUAL_FILE_ARRAY); if (files != null && files.length > 0 && files.length < 3) { - if (files[0].isDirectory() && (files.length == 1 || files[1].isDirectory()) && files[0].getFileSystem() == LocalFileSystem.getInstance()) { + if (files[0].isDirectory() && (files.length == 1 || files[1].isDirectory())) { e.getPresentation().setEnabled(true); e.getPresentation().setVisible(true); e.getPresentation().setText(files.length == 1 ? "Compare Directory with..." : "Compare Directories"); From 597dd6d93405c8772527268219a2fc3365ed3ba9 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 1 Jun 2011 17:12:38 +0400 Subject: [PATCH 07/12] PgUp/PgDn fix --- .../intellij/openapi/diff/impl/dir/DirDiffPanel.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java index fccaa4c8f214..44209937abc1 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffPanel.java @@ -93,14 +93,16 @@ public class DirDiffPanel implements Disposable { myTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { @Override public void valueChanged(ListSelectionEvent e) { - final DirDiffElement last = myModel.getElementAt(e.getLastIndex()); - final DirDiffElement first = myModel.getElementAt(e.getFirstIndex()); + final int lastIndex = e.getLastIndex(); + final int firstIndex = e.getFirstIndex(); + final DirDiffElement last = myModel.getElementAt(lastIndex); + final DirDiffElement first = myModel.getElementAt(firstIndex); if (last == null || first == null) return; if (last.isSeparator()) { - myTable.getSelectionModel().setLeadSelectionIndex(e.getFirstIndex()); + myTable.getSelectionModel().setLeadSelectionIndex(lastIndex + ((lastIndex < firstIndex) ? 1 : -1)); } else if (first.isSeparator()) { - myTable.getSelectionModel().setLeadSelectionIndex(e.getLastIndex()); + myTable.getSelectionModel().setLeadSelectionIndex(firstIndex + ((firstIndex < lastIndex) ? 1 : -1)); } else { update(false); From d4d1581399b34f02c7fbaee6d37cb7cfa44f160e Mon Sep 17 00:00:00 2001 From: Denis Zhdanov Date: Wed, 1 Jun 2011 17:30:34 +0400 Subject: [PATCH 08/12] IDEA-70507 Correct Enter processing when caret is before javadoc param --- .../javadoc/EnterInJavadocParamDescriptionHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/java/java-impl/src/com/intellij/javadoc/EnterInJavadocParamDescriptionHandler.java b/java/java-impl/src/com/intellij/javadoc/EnterInJavadocParamDescriptionHandler.java index 75c962351837..438cc49ec4ad 100644 --- a/java/java-impl/src/com/intellij/javadoc/EnterInJavadocParamDescriptionHandler.java +++ b/java/java-impl/src/com/intellij/javadoc/EnterInJavadocParamDescriptionHandler.java @@ -39,6 +39,11 @@ public class EnterInJavadocParamDescriptionHandler extends EnterHandlerDelegateA } final LogicalPosition caretPosition = caretModel.getLogicalPosition(); + final LogicalPosition nameEndPosition = pair.first.parameterNameEndPosition; + if (nameEndPosition.line == caretPosition.line && caretPosition.column <= nameEndPosition.column) { + return Result.Continue; + } + final int descriptionStartColumn = pair.first.parameterDescriptionStartPosition.column; final LogicalPosition desiredPosition = new LogicalPosition(caretPosition.line, descriptionStartColumn); final Document document = editor.getDocument(); From 3ef32c6a39d64e004bd5da1f56d89f42a29710e6 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 1 Jun 2011 17:10:58 +0400 Subject: [PATCH 09/12] Android migrated to FacetDependentToolWindow --- plugins/android/src/META-INF/plugin.xml | 10 ++-- .../org/jetbrains/android/AndroidPlugin.java | 12 ----- .../AndroidLogcatToolWindowFactory.java | 50 ++----------------- 3 files changed, 9 insertions(+), 63 deletions(-) diff --git a/plugins/android/src/META-INF/plugin.xml b/plugins/android/src/META-INF/plugin.xml index 3c461c017973..d543451f06db 100644 --- a/plugins/android/src/META-INF/plugin.xml +++ b/plugins/android/src/META-INF/plugin.xml @@ -128,11 +128,11 @@ - + diff --git a/plugins/android/src/org/jetbrains/android/AndroidPlugin.java b/plugins/android/src/org/jetbrains/android/AndroidPlugin.java index 4a0d6378f111..289ed66eba41 100644 --- a/plugins/android/src/org/jetbrains/android/AndroidPlugin.java +++ b/plugins/android/src/org/jetbrains/android/AndroidPlugin.java @@ -16,11 +16,6 @@ package org.jetbrains.android; import com.intellij.openapi.components.ApplicationComponent; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.project.ProjectManager; -import com.intellij.openapi.project.ProjectManagerAdapter; -import org.jetbrains.android.logcat.AndroidLogcatToolWindowFactory; import org.jetbrains.android.sdk.AndroidSdk; import org.jetbrains.annotations.NotNull; @@ -28,7 +23,6 @@ import org.jetbrains.annotations.NotNull; * @author coyote */ public class AndroidPlugin implements ApplicationComponent { - private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.AndroidPlugin"); @NotNull public String getComponentName() { @@ -36,12 +30,6 @@ public class AndroidPlugin implements ApplicationComponent { } public void initComponent() { - ProjectManager.getInstance().addProjectManagerListener(new ProjectManagerAdapter() { - @Override - public void projectOpened(final Project project) { - new AndroidLogcatToolWindowFactory().configureToolWindow(project); - } - }); } public void disposeComponent() { diff --git a/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatToolWindowFactory.java b/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatToolWindowFactory.java index 035050e55351..8cafae2c87c3 100644 --- a/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatToolWindowFactory.java +++ b/plugins/android/src/org/jetbrains/android/logcat/AndroidLogcatToolWindowFactory.java @@ -18,21 +18,13 @@ package org.jetbrains.android.logcat; import com.intellij.CommonBundle; import com.intellij.facet.ProjectFacetManager; -import com.intellij.facet.ProjectWideFacetAdapter; -import com.intellij.facet.ProjectWideFacetListenersRegistry; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; -import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Disposer; import com.intellij.openapi.wm.ToolWindow; -import com.intellij.openapi.wm.ToolWindowAnchor; import com.intellij.openapi.wm.ToolWindowFactory; -import com.intellij.openapi.wm.ToolWindowManager; -import com.intellij.openapi.wm.ex.ToolWindowManagerEx; import com.intellij.openapi.wm.ex.ToolWindowManagerAdapter; -import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.wm.ex.ToolWindowManagerEx; import com.intellij.ui.content.Content; import com.intellij.ui.content.ContentManager; import org.jetbrains.android.facet.AndroidFacet; @@ -46,10 +38,11 @@ import java.util.List; /** * @author Eugene.Kudelevsky */ -public class AndroidLogcatToolWindowFactory implements ToolWindowFactory, Condition { +public class AndroidLogcatToolWindowFactory implements ToolWindowFactory { public static final String TOOL_WINDOW_ID = AndroidBundle.message("android.logcat.title"); public void createToolWindowContent(final Project project, final ToolWindow toolWindow) { + toolWindow.setSplitMode(true, null); toolWindow.setIcon(AndroidUtils.ANDROID_ICON); toolWindow.setAvailable(true, null); toolWindow.setToHideOnEmptyContent(true); @@ -108,39 +101,4 @@ public class AndroidLogcatToolWindowFactory implements ToolWindowFactory, Condit Messages.showErrorDialog(project, AndroidBundle.message("specify.platform.error"), CommonBundle.getErrorTitle()); } } - - public boolean value(Project project) { - ModuleManager manager = ModuleManager.getInstance(project); - for (Module module : manager.getModules()) { - AndroidFacet facet = AndroidFacet.getInstance(module); - if (facet != null) return true; - } - return false; - } - - public void configureToolWindow(final Project project) { - ProjectWideFacetListenersRegistry.getInstance(project) - .registerListener(AndroidFacet.ID, new ProjectWideFacetAdapter() { - @Override - public void firstFacetAdded() { - final ToolWindowManager manager = ToolWindowManager.getInstance(project); - final ToolWindow toolWindow = manager.getToolWindow(AndroidLogcatToolWindowFactory.TOOL_WINDOW_ID); - if (toolWindow == null) { - final ToolWindow window = - manager.registerToolWindow(AndroidLogcatToolWindowFactory.TOOL_WINDOW_ID, false, ToolWindowAnchor.BOTTOM, project); - window.setSplitMode(true, null); - createToolWindowContent(project, window); - } - } - - @Override - public void allFacetsRemoved() { - final ToolWindow toolWindow = ToolWindowManager.getInstance(project).getToolWindow(AndroidLogcatToolWindowFactory.TOOL_WINDOW_ID); - if (toolWindow != null) { - ToolWindowManager.getInstance(project).unregisterToolWindow(AndroidLogcatToolWindowFactory.TOOL_WINDOW_ID); - Disposer.dispose(toolWindow.getContentManager()); - } - } - }); - } } From 6172a3e2be84e6bbcd32818a1d7df50ed419120f Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 1 Jun 2011 16:59:10 +0400 Subject: [PATCH 10/12] performance --- .../impl/javaCompiler/api/CompAPIDriver.java | 6 +++++ .../javaCompiler/api/CompilationEvent.java | 25 ++++++++++--------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompAPIDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompAPIDriver.java index 5891af40f1cc..49a467b5cffc 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompAPIDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompAPIDriver.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.NotNull; import javax.tools.*; import java.io.File; +import java.io.IOException; import java.io.PrintWriter; import java.net.URI; import java.util.List; @@ -108,6 +109,11 @@ class CompAPIDriver { finally { compiling = false; myCompilationResults.offer(GUARD); + try { + manager.close(); + } + catch (IOException ignored) { + } } } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilationEvent.java b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilationEvent.java index 957eca7949d5..0ca1e2b3729e 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilationEvent.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/javaCompiler/api/CompilationEvent.java @@ -30,7 +30,6 @@ import java.net.URI; /** * @author cdr */ -@SuppressWarnings({"Since15"}) abstract class CompilationEvent { protected abstract void process(OutputParser.Callback callback); static CompilationEvent progress(final String title, final JavaFileObject fileObject) { @@ -111,16 +110,18 @@ abstract class CompilationEvent { } public static CompilationEvent fileProcessed() { - return new CompilationEvent() { - @Override - protected void process(OutputParser.Callback callback) { - callback.fileProcessed(null); - } - @NonNls - @Override - public String toString() { - return "Processed"; - } - }; + return FILE_PROCESSED; } + private static final CompilationEvent FILE_PROCESSED = new CompilationEvent() { + @Override + protected void process(OutputParser.Callback callback) { + callback.fileProcessed(null); + } + + @NonNls + @Override + public String toString() { + return "Processed"; + } + }; } From 4ce5fc3460d1b4697cc6e62e032e08fbc0596270 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 1 Jun 2011 17:12:33 +0400 Subject: [PATCH 11/12] NPE --- .../src/com/siyeh/ipp/base/MutablyNamedIntention.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java index 33ae829f0b93..e78900fd09a8 100644 --- a/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java +++ b/plugins/IntentionPowerPak/src/com/siyeh/ipp/base/MutablyNamedIntention.java @@ -29,7 +29,7 @@ public abstract class MutablyNamedIntention extends Intention{ @Override @NotNull public final String getText(){ - return m_text; + return m_text == null ? "" : m_text; } @Override From d3fefc9e1a0a69443fd8f79dcf84708a606ac16d Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 1 Jun 2011 17:22:17 +0400 Subject: [PATCH 12/12] ignore exceptions while print diag --- .../src/com/intellij/testFramework/LeakHunter.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/platform/testFramework/src/com/intellij/testFramework/LeakHunter.java b/platform/testFramework/src/com/intellij/testFramework/LeakHunter.java index a5624bb91e69..241f58bda73a 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LeakHunter.java +++ b/platform/testFramework/src/com/intellij/testFramework/LeakHunter.java @@ -194,7 +194,14 @@ public class LeakHunter { String place = leaked instanceof Project ? PlatformTestCase.getCreationPlace((Project)leaked) : ""; System.out.println("LEAK: hash: "+System.identityHashCode(leaked) + "; place: "+ place); while (backLink != null) { - System.out.println("-->"+backLink.field+"; Value: "+backLink.value+"; "+backLink.aClass); + String valueStr; + try { + valueStr = String.valueOf(leaked); + } + catch (Exception e) { + valueStr = "("+e.getMessage()+" while computing .toString())"; + } + System.out.println("-->"+backLink.field+"; Value: "+ valueStr +"; "+backLink.aClass); backLink = backLink.backLink; } System.out.println(";-----");