diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java index 9f9cf4a34075..b2d4f24c7aa2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/DebuggerExpressionComboBox.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2013 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,9 +22,11 @@ import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBox; import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.ui.EditorComboBoxEditor; import com.intellij.ui.EditorComboBoxRenderer; +import com.intellij.ui.EditorTextField; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -90,6 +92,7 @@ public class DebuggerExpressionComboBox extends DebuggerEditorImpl { myComboBox.setLightWeightPopupEnabled(false); myEditor = new MyEditorComboBoxEditor(getProject(), getCurrentFactory().getFileType()); + //noinspection GtkPreferredJComboBoxRenderer myComboBox.setRenderer(new EditorComboBoxRenderer(myEditor)); myComboBox.setEditable(true); @@ -98,7 +101,7 @@ public class DebuggerExpressionComboBox extends DebuggerEditorImpl { } public void selectPopupValue() { - selectAll(); + //selectAll(); final Object currentPopupValue = getCurrentPopupValue(); if (currentPopupValue != null) { myComboBox.getModel().setSelectedItem(currentPopupValue); @@ -133,7 +136,7 @@ public class DebuggerExpressionComboBox extends DebuggerEditorImpl { final String itemText = item.getText().replace('\n', ' '); restoreFactory(item); item.setText(itemText); - if (!"".equals(itemText)) { + if (!StringUtil.isEmpty(itemText)) { if (myComboBox.getItemCount() == 0 || !item.equals(myComboBox.getItemAt(0))) { myComboBox.insertItemAt(item, 0); } @@ -204,16 +207,29 @@ public class DebuggerExpressionComboBox extends DebuggerEditorImpl { } public JComponent getEditorComponent() { - return (JComponent)myEditor.getEditorComponent(); + return myEditor.getEditorComponent(); } public void addRecent(TextWithImports text) { if (text.getText().length() != 0) { - final Component editorComponent = myComboBox.getEditor().getEditorComponent(); + Component editorComponent = myComboBox.getEditor().getEditorComponent(); final boolean focusOwner = editorComponent.isFocusOwner(); + int offset = -1; + if (editorComponent instanceof EditorTextField) { + offset = ((EditorTextField)editorComponent).getCaretModel().getOffset(); + } super.addRecent(text); myComboBox.insertItemAt(text, 0); myComboBox.setSelectedIndex(0); + editorComponent = myComboBox.getEditor().getEditorComponent(); + if (offset != -1 && editorComponent instanceof EditorTextField) { + final EditorTextField textField = (EditorTextField)editorComponent; + textField.getCaretModel().moveToOffset(offset); + final Editor editor = textField.getEditor(); + if (editor != null) { + editor.getSelectionModel().setSelection(offset, offset); + } + } if (focusOwner) { editorComponent.requestFocus(); diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java index 61738b40f4d4..63d55511f488 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionSorting.java @@ -107,7 +107,7 @@ public class JavaCompletionSorting { final PsiReferenceExpression reference = expression != null ? expression.getMethodExpression() : PsiTreeUtil.getParentOfType(position, PsiReferenceExpression.class); if (reference == null) return null; - return new RecursionWeigher(position, reference, expression, expectedInfos); + return new RecursionWeigher(position, parameters.getCompletionType(), reference, expression, expectedInfos); } @Nullable diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java b/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java index 847dbd29b233..79a8b0423c64 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/RecursionWeigher.java @@ -48,12 +48,15 @@ class RecursionWeigher extends LookupElementWeigher { private final PsiExpression myCallQualifier; private final PsiExpression myPositionQualifier; private final boolean myDelegate; + private final CompletionType myCompletionType; public RecursionWeigher(PsiElement position, + CompletionType completionType, @NotNull PsiReferenceExpression reference, @Nullable PsiMethodCallExpression expression, ExpectedTypeInfo[] expectedInfos) { super("recursion"); + myCompletionType = completionType; myFilter = recursionFilter(position); myPosition = position; myReference = reference; @@ -121,7 +124,7 @@ class RecursionWeigher extends LookupElementWeigher { return Result.recursive; } - if (isPassingObjectToItself(object)) { + if (isPassingObjectToItself(object) && myCompletionType == CompletionType.SMART) { return Result.passingObjectToItself; } diff --git a/platform/icons/src/diff/rightDiff.png b/platform/icons/src/diff/rightDiff.png index 246e9ec76271..5ccecc202ead 100644 Binary files a/platform/icons/src/diff/rightDiff.png and b/platform/icons/src/diff/rightDiff.png differ diff --git a/platform/icons/src/diff/rightDiff@2x.png b/platform/icons/src/diff/rightDiff@2x.png new file mode 100644 index 000000000000..0d3506bc7dd6 Binary files /dev/null and b/platform/icons/src/diff/rightDiff@2x.png differ diff --git a/platform/icons/src/diff/rightDiff@2x_dark.png b/platform/icons/src/diff/rightDiff@2x_dark.png new file mode 100644 index 000000000000..13f68a471755 Binary files /dev/null and b/platform/icons/src/diff/rightDiff@2x_dark.png differ diff --git a/platform/icons/src/diff/rightDiff_dark.png b/platform/icons/src/diff/rightDiff_dark.png index 6d903ecc1c6f..e15bf57aac25 100644 Binary files a/platform/icons/src/diff/rightDiff_dark.png and b/platform/icons/src/diff/rightDiff_dark.png differ