diff --git a/README.md b/README.md
index a8a5f3459c58..764cf9196914 100644
--- a/README.md
+++ b/README.md
@@ -18,3 +18,10 @@ To develop IntelliJ IDEA, you can use either IntelliJ IDEA Community Edition or
Pull requests are welcome. Please make sure that you follow the [IntelliJ Coding Guidelines](http://www.jetbrains.org/display/IJOS/IntelliJ+Coding+Guidelines).
Note that you'll need to submit a [Contributor Agreement](http://www.jetbrains.org/display/IJOS/Contributor+Agreement) before we can accept your pull request.
+
+See http://www.jetbrains.org/ for more information.
+
+## Developer Documentation
+
+You can find information on the internal architecture of IntelliJ IDEA and plugin development at the
+[PluginDevelopment](http://confluence.jetbrains.com/display/IDEADEV/PluginDevelopment) site.
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java
index c6acaa59212e..71492c9aaf0c 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointPropertiesPanel.java
@@ -367,13 +367,26 @@ public abstract class BreakpointPropertiesPanel {
}
};
- ButtonGroup checkboxesGroup = new ButtonGroup();
- checkboxesGroup.add(myPassCountCheckbox);
- checkboxesGroup.add(myConditionCheckbox);
- myPassCountCheckbox.addActionListener(updateListener);
+ myPassCountCheckbox.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent event) {
+ if (myPassCountCheckbox.isSelected()) {
+ myConditionCheckbox.setSelected(false);
+ }
+ updateCheckboxes();
+ }
+ });
myInstanceFiltersCheckBox.addActionListener(updateListener);
myClassFiltersCheckBox.addActionListener(updateListener);
- myConditionCheckbox.addActionListener(updateListener);
+ myConditionCheckbox.addActionListener(new ActionListener() {
+ @Override
+ public void actionPerformed(ActionEvent event) {
+ if (myConditionCheckbox.isSelected()) {
+ myPassCountCheckbox.setSelected(false);
+ }
+ updateCheckboxes();
+ }
+ });
DebuggerUIUtil.focusEditorOnCheck(myPassCountCheckbox, myPassCountField);
DebuggerUIUtil.focusEditorOnCheck(myLogExpressionCheckBox, myLogExpressionCombo);
DebuggerUIUtil.focusEditorOnCheck(myInstanceFiltersCheckBox, myInstanceFiltersField.getTextField());
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java
index 0cf455de5068..c4b242756dc4 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java
+++ b/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointWithHighlighter.java
@@ -226,15 +226,15 @@ public abstract class BreakpointWithHighlighter extends Breakpoint {
}
buf.append("
");
buf.append(DebuggerBundle.message("breakpoint.property.name.suspend.policy")).append(" : ");
- if (DebuggerSettings.SUSPEND_ALL.equals(SUSPEND_POLICY)) {
+ if (DebuggerSettings.SUSPEND_NONE.equals(SUSPEND_POLICY) || !SUSPEND) {
+ buf.append(DebuggerBundle.message("breakpoint.properties.panel.option.suspend.none"));
+ }
+ else if (DebuggerSettings.SUSPEND_ALL.equals(SUSPEND_POLICY)) {
buf.append(DebuggerBundle.message("breakpoint.properties.panel.option.suspend.all"));
}
else if (DebuggerSettings.SUSPEND_THREAD.equals(SUSPEND_POLICY)) {
buf.append(DebuggerBundle.message("breakpoint.properties.panel.option.suspend.thread"));
}
- else if (DebuggerSettings.SUSPEND_NONE.equals(SUSPEND_POLICY)) {
- buf.append(DebuggerBundle.message("breakpoint.properties.panel.option.suspend.none"));
- }
buf.append("
");
buf.append(DebuggerBundle.message("breakpoint.property.name.log.message")).append(": ");
buf.append(LOG_ENABLED ? CommonBundle.getYesButtonText() : CommonBundle.getNoButtonText());
@@ -433,7 +433,7 @@ public abstract class BreakpointWithHighlighter extends Breakpoint {
}
private void setupGutterRenderer(@NotNull RangeHighlighter highlighter) {
- MyGutterIconRenderer renderer = new MyGutterIconRenderer(getIcon(), getDescription());
+ MyGutterIconRenderer renderer = new MyGutterIconRenderer(this);
highlighter.setGutterIconRenderer(renderer);
}
@@ -597,23 +597,21 @@ public abstract class BreakpointWithHighlighter extends Breakpoint {
}
private class MyGutterIconRenderer extends GutterIconRenderer {
- private final Icon myIcon;
- private final String myDescription;
+ private BreakpointWithHighlighter myBreakpoint;
- public MyGutterIconRenderer(@NotNull Icon icon, @NotNull String description) {
- myIcon = icon;
- myDescription = description;
+ public MyGutterIconRenderer(BreakpointWithHighlighter breakpoint) {
+ myBreakpoint = breakpoint;
}
@Override
@NotNull
public Icon getIcon() {
- return myIcon;
+ return myBreakpoint.getIcon();
}
@Override
public String getTooltipText() {
- return myDescription;
+ return myBreakpoint.getDescription();
}
@Override
diff --git a/java/java-tests/testSrc/com/intellij/projectView/NavigateFromSourceTest.java b/java/java-tests/testSrc/com/intellij/projectView/NavigateFromSourceTest.java
index dd7d1fe6daf9..39868f87f180 100644
--- a/java/java-tests/testSrc/com/intellij/projectView/NavigateFromSourceTest.java
+++ b/java/java-tests/testSrc/com/intellij/projectView/NavigateFromSourceTest.java
@@ -46,7 +46,6 @@ import com.intellij.openapi.wm.ToolWindowId;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.*;
import com.intellij.testFramework.PlatformTestUtil;
-import com.intellij.testFramework.ProjectViewTestUtil;
import javax.swing.*;
import java.io.IOException;
@@ -63,7 +62,7 @@ public class NavigateFromSourceTest extends BaseProjectViewTestCase {
final PsiFile containingFile = psiClass.getContainingFile();
final VirtualFile virtualFile = containingFile.getVirtualFile();
- ProjectViewTestUtil.checkNavigateFromSourceBehaviour(psiClass, virtualFile, pane);
+ myStructure.checkNavigateFromSourceBehaviour(psiClass, virtualFile, pane);
PlatformTestUtil.assertTreeEqual(pane.getTree(), "-Project\n" +
" -PsiDirectory: showClassMembers\n" +
diff --git a/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeBuilderTest.java b/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeBuilderTest.java
index ac415e46241b..17c557ff49ba 100644
--- a/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeBuilderTest.java
+++ b/java/java-tests/testSrc/com/intellij/projectView/ProjectTreeBuilderTest.java
@@ -26,7 +26,7 @@ public class ProjectTreeBuilderTest extends BaseProjectViewTestCase {
PsiFile element = aClass.getContainingFile();
- ProjectViewTestUtil.checkNavigateFromSourceBehaviour(element, element.getVirtualFile(), myStructure.createPane());
+ myStructure.checkNavigateFromSourceBehaviour(element, element.getVirtualFile(), myStructure.createPane());
}
public void testShowClassMembers() throws IncorrectOperationException, IOException {
@@ -51,7 +51,7 @@ public class ProjectTreeBuilderTest extends BaseProjectViewTestCase {
final AbstractProjectViewPSIPane pane = myStructure.createPane();
- ProjectViewTestUtil.checkNavigateFromSourceBehaviour(innerClass2Field, innerClass2Field.getContainingFile().getVirtualFile(), pane);
+ myStructure.checkNavigateFromSourceBehaviour(innerClass2Field, innerClass2Field.getContainingFile().getVirtualFile(), pane);
IdeaTestUtil.assertTreeEqual(pane.getTree(), "-Project\n" +
" -PsiDirectory: showClassMembers\n" +
diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java
index 2d96145a20c9..3b0c1731ba2d 100644
--- a/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java
+++ b/jps/jps-builders/src/org/jetbrains/jps/javac/OptimizedFileManager17.java
@@ -47,6 +47,12 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager {
private final Map myDirectoryCache = new HashMap();
public static final File[] NULL_FILE_ARRAY = new File[0];
+ private static final String _OS_NAME = System.getProperty("os.name").toLowerCase(Locale.US);
+ private static final boolean isWindows = _OS_NAME.startsWith("windows");
+ private static final boolean isOS2 = _OS_NAME.startsWith("os/2") || _OS_NAME.startsWith("os2");
+ private static final boolean isMac = _OS_NAME.startsWith("mac");
+ private static final boolean isFileSystemCaseSensitive = !isWindows && !isOS2 && !isMac;
+
public OptimizedFileManager17() throws Throwable {
super(new Context(), true, null);
final Field archivesField = com.sun.tools.javac.file.JavacFileManager.class.getDeclaredField("archives");
@@ -214,7 +220,7 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager {
private class InputFileObject extends BaseFileObject {
private String name;
- final File file;
+ private final File file;
private Reference absFileRef;
public InputFileObject(JavacFileManager fileManager, File f) {
@@ -285,20 +291,38 @@ class OptimizedFileManager17 extends com.sun.tools.javac.file.JavacFileManager {
@Override
protected String inferBinaryName(Iterable extends File> path) {
- String fPath = file.getPath();
- //System.err.println("RegularFileObject " + file + " " +r.getPath());
+ final String fPath = file.getPath();
for (File dir: path) {
- //System.err.println("dir: " + dir);
- String dPath = dir.getPath();
- if (dPath.length() == 0)
- dPath = System.getProperty("user.dir");
- if (!dPath.endsWith(File.separator))
- dPath += File.separator;
- if (fPath.regionMatches(true, 0, dPath, 0, dPath.length())
- && new File(fPath.substring(0, dPath.length())).equals(new File(dPath))) {
- String relativeName = fPath.substring(dPath.length());
- return removeExtension(relativeName).replace(File.separatorChar, '.');
+ String dirPath = dir.getPath();
+ if (dirPath.length() == 0) {
+ dirPath = System.getProperty("user.dir");
}
+ if (!fPath.regionMatches(!isFileSystemCaseSensitive, 0, dirPath, 0, dirPath.length())) {
+ continue;
+ }
+ final int pathLength = fPath.length();
+ final boolean endsWithSeparator = dirPath.endsWith(File.separator);
+ if (!endsWithSeparator) {
+ // need to check if the next char in fPath is file separator
+ final int separatorIdx = dirPath.length();
+ if (pathLength <= separatorIdx || fPath.charAt(separatorIdx) != File.separatorChar) {
+ continue;
+ }
+ }
+ // fPath starts with dirPath
+ final int startIndex = endsWithSeparator ? dirPath.length() : dirPath.length() + 1;
+ int endIndex = fPath.lastIndexOf('.');
+ if (endIndex <= startIndex) {
+ endIndex = fPath.length();
+ }
+ final int length = endIndex - startIndex;
+ final StringBuilder buf = new StringBuilder(length).append(fPath, startIndex, endIndex);
+ for (int idx = 0; idx < length; idx++) {
+ if (buf.charAt(idx) == File.separatorChar) {
+ buf.setCharAt(idx, '.');
+ }
+ }
+ return buf.toString();
}
return null;
}
diff --git a/jps/lib/optimizedFileManager.jar b/jps/lib/optimizedFileManager.jar
index cc5355bc32a6..ce76aa5dbc8d 100644
Binary files a/jps/lib/optimizedFileManager.jar and b/jps/lib/optimizedFileManager.jar differ
diff --git a/platform/lang-api/src/com/intellij/find/FindModel.java b/platform/lang-api/src/com/intellij/find/FindModel.java
index f0890a47fdcd..c149c2754ae2 100644
--- a/platform/lang-api/src/com/intellij/find/FindModel.java
+++ b/platform/lang-api/src/com/intellij/find/FindModel.java
@@ -211,7 +211,6 @@ public class FindModel extends UserDataHolderBase implements Cloneable {
if (directoryName != null ? !directoryName.equals(findModel.directoryName) : findModel.directoryName != null) return false;
if (fileFilter != null ? !fileFilter.equals(findModel.fileFilter) : findModel.fileFilter != null) return false;
if (moduleName != null ? !moduleName.equals(findModel.moduleName) : findModel.moduleName != null) return false;
- if (myPattern != null ? !myPattern.equals(findModel.myPattern) : findModel.myPattern != null) return false;
if (myStringToFind != null ? !myStringToFind.equals(findModel.myStringToFind) : findModel.myStringToFind != null) return false;
if (myStringToReplace != null ? !myStringToReplace.equals(findModel.myStringToReplace) : findModel.myStringToReplace != null) {
return false;
diff --git a/platform/lang-impl/src/com/intellij/find/EditorSearchComponent.java b/platform/lang-impl/src/com/intellij/find/EditorSearchComponent.java
index 54aa37abcf2a..a89f21f16704 100644
--- a/platform/lang-impl/src/com/intellij/find/EditorSearchComponent.java
+++ b/platform/lang-impl/src/com/intellij/find/EditorSearchComponent.java
@@ -25,6 +25,7 @@ import com.intellij.find.impl.livePreview.LivePreviewControllerBase;
import com.intellij.find.impl.livePreview.SearchResults;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.actionSystem.ex.CustomComponentAction;
import com.intellij.openapi.actionSystem.impl.ActionToolbarImpl;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.editor.Editor;
@@ -35,11 +36,14 @@ import com.intellij.openapi.editor.event.SelectionListener;
import com.intellij.openapi.editor.impl.EditorHeaderComponent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Getter;
+import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.TextRange;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.wm.IdeFocusManager;
+import com.intellij.ui.IdeBorderFactory;
import com.intellij.ui.LightColors;
+import com.intellij.ui.SearchTextField;
import com.intellij.ui.TextComponentUndoProvider;
import com.intellij.ui.components.JBList;
import com.intellij.ui.components.JBScrollPane;
@@ -48,6 +52,7 @@ import com.intellij.ui.components.labels.LinkListener;
import com.intellij.ui.components.panels.NonOpaquePanel;
import com.intellij.ui.speedSearch.SpeedSearchSupply;
import com.intellij.util.ArrayUtil;
+import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.Nullable;
@@ -57,6 +62,7 @@ import javax.swing.event.DocumentListener;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.event.*;
+import java.util.Arrays;
import java.util.regex.Pattern;
/**
@@ -84,10 +90,30 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
return mySearchField;
}
+ private JSplitPane mySplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+ private JPanel myLeftComponent = new JPanel(new BorderLayout());
+ private JPanel myRightComponent = new JPanel(new BorderLayout());
+
+ {
+ mySplitPane.setOpaque(false);
+ mySplitPane.setBorder(IdeBorderFactory.createEmptyBorder(1, 0, 2, 0));
+ mySplitPane.setContinuousLayout(true);
+ myLeftComponent.setOpaque(false);
+ myRightComponent.setOpaque(false);
+
+ mySplitPane.setLeftComponent(myLeftComponent);
+ mySplitPane.setRightComponent(myRightComponent);
+ add(mySplitPane, BorderLayout.NORTH);
+ }
+
private JTextComponent mySearchField;
+ private SearchTextField mySearchSearchTextField;
+
private JTextComponent myReplaceField;
- private TextComponentUndoProvider mySearchUndo;
- private TextComponentUndoProvider myReplaceUndo;
+ private SearchTextField myReplaceSearchTextField;
+
+ private MyUndoProvider mySearchUndo;
+ private MyUndoProvider myReplaceUndo;
private Getter mySearchFieldGetter = new Getter() {
@Override
@@ -273,13 +299,20 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
private void configureLeadPanel() {
JPanel myLeadPanel = createLeadPane();
- add(myLeadPanel, BorderLayout.WEST);
+ myRightComponent.add(myLeadPanel, BorderLayout.WEST);
if (mySearchUndo != null) {
mySearchUndo.dispose();
}
- mySearchField = createTextField(myLeadPanel);
- mySearchUndo = new TextComponentUndoProvider(mySearchField);
+
+ Ref ref = Ref.create();
+ mySearchField = createTextField(BorderLayout.NORTH, ref);
+ mySearchSearchTextField = ref.get();
+ if (mySearchSearchTextField != null) {
+ setupHistoryToSearchField(mySearchSearchTextField, FindSettings.getInstance().getRecentFindStrings());
+ }
+
+ mySearchUndo = new MyUndoProvider(mySearchField);
setupSearchFieldListener();
@@ -287,7 +320,11 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
initToolbar();
}
- myLeadPanel.add(myToolbarComponent);
+ JPanel centerPanel = new JPanel(new BorderLayout());
+ centerPanel.setOpaque(false);
+ centerPanel.add(myToolbarComponent, BorderLayout.CENTER);
+
+ myRightComponent.add(centerPanel, BorderLayout.CENTER);
if (secondaryActionsAvailable()) {
if (myToolbarComponent instanceof ActionToolbarImpl) {
@@ -299,21 +336,7 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
JPanel tailPanel = new NonOpaquePanel(new BorderLayout(5, 0));
JPanel tailContainer = new NonOpaquePanel(new BorderLayout(5, 0));
tailContainer.add(tailPanel, BorderLayout.EAST);
- add(tailContainer, BorderLayout.CENTER);
-
- myMatchInfoLabel = new JLabel();
- setSmallerFontAndOpaque(myMatchInfoLabel);
-
-
- myClickToHighlightLabel = new LinkLabel("Click to highlight", null, new LinkListener() {
- @Override
- public void linkSelected(LinkLabel aSource, Object aLinkData) {
- setMatchesLimit(Integer.MAX_VALUE);
- updateResults(true);
- }
- });
- setSmallerFontAndOpaque(myClickToHighlightLabel);
- myClickToHighlightLabel.setVisible(false);
+ centerPanel.add(tailContainer, BorderLayout.EAST);
JLabel closeLabel = new JLabel(" ", AllIcons.Actions.Cross, SwingConstants.RIGHT);
closeLabel.addMouseListener(new MouseAdapter() {
@@ -325,11 +348,6 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
closeLabel.setToolTipText("Close search bar (Escape)");
- JPanel labelsPanel = new NonOpaquePanel(new FlowLayout());
-
- labelsPanel.add(myMatchInfoLabel);
- labelsPanel.add(myClickToHighlightLabel);
- tailPanel.add(labelsPanel, BorderLayout.CENTER);
tailPanel.add(closeLabel, BorderLayout.EAST);
Utils.setSmallerFont(mySearchField);
@@ -362,6 +380,11 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
Utils.setSmallerFontForChildren(myToolbarComponent);
}
+ private void setupHistoryToSearchField(SearchTextField field, String[] strings) {
+ field.setHistorySize(strings.length);
+ field.setHistory(ContainerUtil.reverse(Arrays.asList(strings)));
+ }
+
private void initToolbar() {
DefaultActionGroup actionGroup = new DefaultActionGroup("search bar", false);
actionGroup.add(new ShowHistoryAction(mySearchFieldGetter, this));
@@ -372,6 +395,17 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
actionGroup.add(new ToggleMatchCase(this));
actionGroup.add(new ToggleRegex(this));
+ myMatchInfoLabel = new JLabel();
+
+ myClickToHighlightLabel = new LinkLabel("Click to highlight", null, new LinkListener() {
+ @Override
+ public void linkSelected(LinkLabel aSource, Object aLinkData) {
+ setMatchesLimit(Integer.MAX_VALUE);
+ updateResults(true);
+ }
+ });
+ myClickToHighlightLabel.setVisible(false);
+
myActionsToolbar = ActionManager.getInstance().createActionToolbar("SearchBar", actionGroup, true);
myActionsToolbar.setSecondaryActionsTooltip("More Options(" + ShowMoreOptions.SHORT_CUT + ")");
@@ -383,6 +417,25 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
actionGroup.addAction(new TogglePreserveCaseAction(this));
actionGroup.addAction(new ToggleSelectionOnlyAction(this));
+ class MyCustomComponentDoNothingAction extends AnAction implements CustomComponentAction {
+ private JComponent c;
+
+ MyCustomComponentDoNothingAction(JComponent c) {
+ this.c = c;
+ c.setBorder(IdeBorderFactory.createEmptyBorder(new Insets(0, 10, 0, 0)));
+ }
+
+ @Override
+ public void actionPerformed(AnActionEvent e) {
+ }
+
+ @Override
+ public JComponent createCustomComponent(Presentation presentation) {
+ return c;
+ }
+ }
+ actionGroup.add(new MyCustomComponentDoNothingAction(myMatchInfoLabel));
+ actionGroup.add(new MyCustomComponentDoNothingAction(myClickToHighlightLabel));
myActionsToolbar.setLayoutPolicy(ActionToolbar.AUTO_LAYOUT_POLICY);
myToolbarComponent = myActionsToolbar.getComponent();
@@ -453,7 +506,8 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
myActionsToolbar.updateActionsImmediately();
if ((myFindModel.isMultiline() && mySearchField instanceof JTextField) || (!myFindModel.isMultiline() && mySearchField instanceof JTextArea)) {
- removeAll();
+ myLeftComponent.removeAll();
+ myRightComponent.removeAll();
configureLeadPanel();
if (myReplacementPane != null) {
myReplacementPane = null;
@@ -471,7 +525,8 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
if (myFindModel.isReplaceState() && myReplacementPane == null) {
configureReplacementPane();
} else if (!myFindModel.isReplaceState() && myReplacementPane != null) {
- remove(myReplacementPane);
+ myLeftComponent.remove(myReplaceField);
+ myRightComponent.remove(myReplacementPane);
myReplacementPane = null;
}
if (myFindModel.isReplaceState()) {
@@ -483,8 +538,8 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
}
updateReplaceButton();
-
Utils.setSmallerFontForChildren(myToolbarComponent);
+ revalidate();
}
private static boolean wholeWordsApplicable(String stringToFind) {
@@ -501,17 +556,21 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
}
private void configureReplacementPane() {
- myReplacementPane = createLeadPane();
+ myReplacementPane = new NonOpaquePanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
if (myReplaceUndo != null) {
myReplaceUndo.dispose();
}
- myReplaceField = createTextField(myReplacementPane);
- myReplaceUndo = new TextComponentUndoProvider(myReplaceField);
- //if (myToolbarComponent instanceof ActionToolbarImpl) {
- // new ShowMoreOptions(myToolbarComponent, myReplaceField);
- //}
+ Ref ref = Ref.create();
+ myReplaceField = createTextField(BorderLayout.SOUTH, ref);
+ myReplaceSearchTextField = ref.get();
+ if (myReplaceSearchTextField != null) {
+ setupHistoryToSearchField(myReplaceSearchTextField, FindSettings.getInstance().getRecentReplaceStrings());
+ }
+ myReplaceUndo = new MyUndoProvider(myReplaceField);
+
+ revalidate();
DocumentListener replaceFieldListener = new DocumentListener() {
@Override
@@ -536,7 +595,7 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
}
myReplaceField.setText(myFindModel.getStringToReplace());
- add(myReplacementPane, BorderLayout.SOUTH);
+ myRightComponent.add(myReplacementPane, BorderLayout.SOUTH);
myReplaceButton = new JButton("Replace");
myReplaceButton.setFocusable(false);
@@ -591,7 +650,6 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
new VariantsCompletionAction(this, myReplaceFieldGetter);
new NextOccurrenceAction(this, myReplaceFieldGetter);
new PrevOccurrenceAction(this, myReplaceFieldGetter);
-
}
private void replaceFieldDocumentChanged() {
@@ -633,7 +691,7 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
}
private static JPanel createLeadPane() {
- return new NonOpaquePanel(new FlowLayout(FlowLayout.LEFT, 5, 0));
+ return new NonOpaquePanel(new BorderLayout());
}
public void showHistory(final boolean byClickingToolbarButton, JTextComponent textField) {
@@ -661,7 +719,7 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
}
}
- private JTextComponent createTextField(JPanel leadPanel) {
+ private JTextComponent createTextField(Object constraint, Ref searchTextField) {
final JTextComponent editorTextField;
if (myFindModel.isMultiline()) {
editorTextField = new JTextArea("") {
@@ -676,22 +734,19 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
final JScrollPane scrollPane = new JBScrollPane(editorTextField,
ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER,
ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
- leadPanel.add(scrollPane);
+ myLeftComponent.add(scrollPane, constraint);
}
else {
- editorTextField = new JTextField("") {
- @Override
- protected void paintBorder(final Graphics g) {
- super.paintBorder(g);
- paintBorderOfTextField(g);
- }
- };
- ((JTextField)editorTextField).setColumns(25);
+ SearchTextField stf = new SearchTextField(true);
+ stf.setOpaque(false);
+ editorTextField = stf.getTextEditor();
if (UIUtil.isUnderGTKLookAndFeel()) {
editorTextField.setOpaque(false);
}
- leadPanel.add(editorTextField);
+ myLeftComponent.add(stf, constraint);
+ searchTextField.set(stf);
}
+ editorTextField.setMinimumSize(new Dimension(200, -1));
editorTextField.putClientProperty("AuxEditorComponent", Boolean.TRUE);
editorTextField.addFocusListener(new FocusListener() {
@@ -738,8 +793,14 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
if (text.length() > 0) {
if (textField == mySearchField) {
FindSettings.getInstance().addStringToFind(text);
+ if (mySearchSearchTextField != null) {
+ mySearchSearchTextField.addCurrentTextToHistory();
+ }
} else {
FindSettings.getInstance().addStringToReplace(text);
+ if (myReplaceSearchTextField != null) {
+ myReplaceSearchTextField.addCurrentTextToHistory();
+ }
}
}
}
@@ -904,6 +965,34 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
return insets;
}
+ private static class MyUndoProvider extends TextComponentUndoProvider {
+ private boolean myEnabled = true;
+ public MyUndoProvider(JTextComponent textComponent) {
+ super(textComponent);
+ textComponent.getDocument().addDocumentListener(new com.intellij.ui.DocumentAdapter() {
+ @Override
+ protected void textChanged(javax.swing.event.DocumentEvent e) {
+ myEnabled = true;
+ }
+ });
+ }
+
+ @Override
+ protected boolean canUndo() {
+ return super.canUndo() && myEnabled;
+ }
+
+ @Override
+ protected boolean canRedo() {
+ return super.canRedo() && myEnabled;
+ }
+
+ public void disable() {
+ myEnabled = false;
+ myUndoManager.discardAllEdits();
+ }
+ }
+
private class MyLivePreviewController extends LivePreviewControllerBase {
public MyLivePreviewController() {
super(EditorSearchComponent.this.mySearchResults, EditorSearchComponent.this.myLivePreview);
@@ -941,7 +1030,8 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
mySuppressUpdate = false;
}
//getFocusBack();
- addTextToRecent(myReplaceField) ;
+ addTextToRecent(myReplaceField);
+ clearUndoInTextFields();
}
public void exclude() {
@@ -952,4 +1042,9 @@ public class EditorSearchComponent extends EditorHeaderComponent implements Data
performReplaceAll(myEditor);
}
}
+
+ private void clearUndoInTextFields() {
+ myReplaceUndo.disable();
+ mySearchUndo.disable();
+ }
}
diff --git a/platform/lang-impl/src/com/intellij/find/editorHeaderActions/ShowHistoryAction.java b/platform/lang-impl/src/com/intellij/find/editorHeaderActions/ShowHistoryAction.java
index 4d807d11e7d8..1fe84cd7a9fe 100644
--- a/platform/lang-impl/src/com/intellij/find/editorHeaderActions/ShowHistoryAction.java
+++ b/platform/lang-impl/src/com/intellij/find/editorHeaderActions/ShowHistoryAction.java
@@ -42,16 +42,11 @@ public class ShowHistoryAction extends EditorHeaderAction implements DumbAware {
shortcuts.add(new KeyboardShortcut(KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_DOWN_MASK), null));
registerCustomShortcutSet(new CustomShortcutSet(shortcuts.toArray(new Shortcut[shortcuts.size()])), getTextField());
- if (!editorSearchComponent.getFindModel().isMultiline()) {
- getTextField().registerKeyboardAction(new ActionListener() {
- @Override
- public void actionPerformed(ActionEvent actionEvent) {
- if (getTextField().getText().isEmpty()) {
- getEditorSearchComponent().showHistory(false, getTextField());
- }
- }
- }, KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), JComponent.WHEN_FOCUSED);
- }
+ }
+
+ @Override
+ public void update(AnActionEvent e) {
+ e.getPresentation().setVisible(getEditorSearchComponent().getFindModel().isMultiline());
}
@Override
diff --git a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java
index 2745789a55ff..d0c7cf627dbf 100644
--- a/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java
+++ b/platform/lang-impl/src/com/intellij/ide/favoritesTreeView/FavoritesTreeViewPanel.java
@@ -245,16 +245,19 @@ public class FavoritesTreeViewPanel extends JPanel implements DataProvider, Dock
@Override
public void rootsChanged() {
myBuilder.updateFromRoot();
+ myTree.repaint();
}
@Override
public void listAdded(String listName) {
myBuilder.updateFromRoot();
+ myTree.repaint();
}
@Override
public void listRemoved(String listName) {
myBuilder.updateFromRoot();
+ myTree.repaint();
}
});
}
diff --git a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
index 4baf41c7a5ef..d8e769b99fb3 100644
--- a/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
+++ b/platform/lang-impl/src/com/intellij/ide/structureView/newStructureView/StructureViewComponent.java
@@ -413,8 +413,8 @@ public class StructureViewComponent extends SimpleToolWindowPanel implements Tre
public AnAction[] getTitleActions() {
return new AnAction[]{
- CommonActionsManager.getInstance().createCollapseAllHeaderAction(getTree()),
CommonActionsManager.getInstance().createExpandAllHeaderAction(getTree()),
+ CommonActionsManager.getInstance().createCollapseAllHeaderAction(getTree()),
};
}
diff --git a/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java b/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java
index 747e8c765b75..087b6461839f 100644
--- a/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java
+++ b/platform/lang-impl/src/com/intellij/util/ui/tree/AbstractFileTreeTable.java
@@ -78,8 +78,8 @@ public abstract class AbstractFileTreeTable extends TreeTable {
}
});
final DefaultTreeExpander treeExpander = new DefaultTreeExpander(getTree());
- CommonActionsManager.getInstance().createCollapseAllAction(treeExpander, this);
CommonActionsManager.getInstance().createExpandAllAction(treeExpander, this);
+ CommonActionsManager.getInstance().createCollapseAllAction(treeExpander, this);
getTree().setShowsRootHandles(true);
getTree().setLineStyleAngled();
diff --git a/platform/platform-api/src/com/intellij/ui/SearchTextField.java b/platform/platform-api/src/com/intellij/ui/SearchTextField.java
index 9a35c10c3a28..97020b4fb177 100644
--- a/platform/platform-api/src/com/intellij/ui/SearchTextField.java
+++ b/platform/platform-api/src/com/intellij/ui/SearchTextField.java
@@ -100,7 +100,9 @@ public class SearchTextField extends JPanel {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
- if (myPopup == null || !myPopup.isVisible()) {
+ if (hasNativeLeopardSearchControl()) {
+ myNativeSearchPopup.show(myTextField, 5, myTextField.getHeight());
+ } else if (myPopup == null || !myPopup.isVisible()) {
showPopup();
}
}
@@ -372,7 +374,7 @@ public class SearchTextField extends JPanel {
}
protected void showPopup() {
- if (myPopup == null) {
+ if (myPopup == null || !myPopup.isVisible()) {
final JList list = new JBList(myModel);
final Runnable chooseRunnable = createItemChosenCallback(list);
myPopup = JBPopupFactory.getInstance().createListPopupBuilder(list)
diff --git a/platform/platform-api/src/com/intellij/ui/TextComponentUndoProvider.java b/platform/platform-api/src/com/intellij/ui/TextComponentUndoProvider.java
index 060fe3504c69..ce95057bb2cd 100644
--- a/platform/platform-api/src/com/intellij/ui/TextComponentUndoProvider.java
+++ b/platform/platform-api/src/com/intellij/ui/TextComponentUndoProvider.java
@@ -29,8 +29,8 @@ import javax.swing.undo.UndoManager;
* @author yole
*/
public class TextComponentUndoProvider implements Disposable {
- private final JTextComponent myTextComponent;
- private final UndoManager myUndoManager = new UndoManager();
+ protected final JTextComponent myTextComponent;
+ protected final UndoManager myUndoManager = new UndoManager();
private UndoableEditListener myUndoableEditListener;
public TextComponentUndoProvider(final JTextComponent textComponent) {
@@ -47,27 +47,53 @@ public class TextComponentUndoProvider implements Disposable {
Shortcut[] redoShortcuts = activeKeymap.getShortcuts(IdeActions.ACTION_REDO);
AnAction undoAction = new AnAction() {
+ @Override
+ public void update(AnActionEvent e) {
+ super.update(e);
+ e.getPresentation().setEnabled(canUndo());
+ }
+
@Override
public void actionPerformed(AnActionEvent e) {
- if (myUndoManager.canUndo()) {
- myUndoManager.undo();
- }
+ undo();
}
};
AnAction redoAction = new AnAction() {
+ @Override
+ public void update(AnActionEvent e) {
+ super.update(e);
+ e.getPresentation().setEnabled(canRedo());
+ }
+
@Override
public void actionPerformed(AnActionEvent e) {
- if (myUndoManager.canRedo()) {
- myUndoManager.redo();
- }
+ redo();
}
};
undoAction.registerCustomShortcutSet(new CustomShortcutSet(undoShortcuts), myTextComponent);
redoAction.registerCustomShortcutSet(new CustomShortcutSet(redoShortcuts), myTextComponent);
+ }
+ protected boolean canUndo() {
+ return myUndoManager.canUndo();
+ }
+ protected boolean canRedo() {
+ return myUndoManager.canRedo();
+ }
+
+ protected void redo() {
+ if (myUndoManager.canRedo()) {
+ myUndoManager.redo();
+ }
+ }
+
+ protected void undo() {
+ if (myUndoManager.canUndo()) {
+ myUndoManager.undo();
+ }
}
public void dispose() {
diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml
index 49facb201cfa..7bfd2960e027 100644
--- a/platform/platform-resources/src/META-INF/LangExtensions.xml
+++ b/platform/platform-resources/src/META-INF/LangExtensions.xml
@@ -827,6 +827,9 @@
+
+
+
diff --git a/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java b/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java
index 816ed4b97e7f..e6b8dee21ce2 100644
--- a/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java
+++ b/platform/testFramework/src/com/intellij/projectView/TestProjectTreeStructure.java
@@ -21,6 +21,10 @@ import com.intellij.ide.projectView.impl.AbstractProjectViewPSIPane;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Disposer;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiElement;
+import com.intellij.testFramework.ProjectViewTestUtil;
+import junit.framework.Assert;
public class TestProjectTreeStructure extends AbstractProjectTreeStructure implements Disposable {
protected boolean myShowMembers = false;
@@ -32,6 +36,15 @@ public class TestProjectTreeStructure extends AbstractProjectTreeStructure imple
Disposer.register(parentDisposable, this);
}
+ public void checkNavigateFromSourceBehaviour(PsiElement element, VirtualFile virtualFile, AbstractProjectViewPSIPane pane) {
+ Disposer.dispose(pane);
+ pane.createComponent();
+ Disposer.register(this, pane);
+ Assert.assertNull(ProjectViewTestUtil.getNodeForElement(element, pane));
+ pane.select(element, virtualFile, true);
+ Assert.assertTrue(ProjectViewTestUtil.isExpanded(element, pane));
+ }
+
public AbstractProjectViewPSIPane createPane() {
final AbstractProjectViewPSIPane pane = new TestProjectViewPSIPane(myProject, this);
pane.createComponent();
diff --git a/platform/testFramework/src/com/intellij/testFramework/ProjectViewTestUtil.java b/platform/testFramework/src/com/intellij/testFramework/ProjectViewTestUtil.java
index 1e091e0ca62a..681a5c7e5626 100644
--- a/platform/testFramework/src/com/intellij/testFramework/ProjectViewTestUtil.java
+++ b/platform/testFramework/src/com/intellij/testFramework/ProjectViewTestUtil.java
@@ -21,7 +21,6 @@ import com.intellij.ide.projectView.impl.nodes.BasePsiNode;
import com.intellij.ide.util.treeView.AbstractTreeNode;
import com.intellij.ide.util.treeView.AbstractTreeStructure;
import com.intellij.openapi.ui.Queryable;
-import com.intellij.openapi.util.Disposer;
import com.intellij.openapi.util.MultiValuesMap;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiElement;
@@ -126,7 +125,7 @@ public class ProjectViewTestUtil {
return pane.getTree().isExpanded(path.getParentPath());
}
- protected static DefaultMutableTreeNode getNodeForElement(PsiElement element, AbstractProjectViewPSIPane pane) {
+ public static DefaultMutableTreeNode getNodeForElement(PsiElement element, AbstractProjectViewPSIPane pane) {
JTree tree = pane.getTree();
TreeModel model = tree.getModel();
Object root = model.getRoot();
@@ -148,14 +147,6 @@ public class ProjectViewTestUtil {
return null;
}
- public static void checkNavigateFromSourceBehaviour(PsiElement element, VirtualFile virtualFile, AbstractProjectViewPSIPane pane) {
- Disposer.dispose(pane);
- pane.createComponent();
- Assert.assertNull(getNodeForElement(element, pane));
- pane.select(element, virtualFile, true);
- Assert.assertTrue(isExpanded(element, pane));
- }
-
public static boolean isExpanded(PsiElement element, AbstractProjectViewPSIPane pane) {
DefaultMutableTreeNode nodeForElement = getNodeForElement(element, pane);
return nodeForElement != null && isExpanded((DefaultMutableTreeNode)nodeForElement.getParent(), pane);
diff --git a/platform/testRunner/src/com/intellij/execution/testframework/ToolbarPanel.java b/platform/testRunner/src/com/intellij/execution/testframework/ToolbarPanel.java
index 06f530090813..5b2526781e0e 100644
--- a/platform/testRunner/src/com/intellij/execution/testframework/ToolbarPanel.java
+++ b/platform/testRunner/src/com/intellij/execution/testframework/ToolbarPanel.java
@@ -75,12 +75,12 @@ public class ToolbarPanel extends JPanel implements OccurenceNavigator, Disposab
properties, TestConsoleProperties.SORT_ALPHABETICALLY));
actionGroup.addSeparator();
- AnAction action = CommonActionsManager.getInstance().createCollapseAllAction(myTreeExpander, parent);
- action.getTemplatePresentation().setDescription(ExecutionBundle.message("junit.runing.info.collapse.test.action.name"));
+ AnAction action = CommonActionsManager.getInstance().createExpandAllAction(myTreeExpander, parent);
+ action.getTemplatePresentation().setDescription(ExecutionBundle.message("junit.runing.info.expand.test.action.name"));
actionGroup.add(action);
- action = CommonActionsManager.getInstance().createExpandAllAction(myTreeExpander, parent);
- action.getTemplatePresentation().setDescription(ExecutionBundle.message("junit.runing.info.expand.test.action.name"));
+ action = CommonActionsManager.getInstance().createCollapseAllAction(myTreeExpander, parent);
+ action.getTemplatePresentation().setDescription(ExecutionBundle.message("junit.runing.info.collapse.test.action.name"));
actionGroup.add(action);
actionGroup.addSeparator();
diff --git a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java
index 683187e2e845..58ccf7caaea2 100644
--- a/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java
+++ b/platform/usageView/src/com/intellij/usages/impl/UsageViewImpl.java
@@ -539,8 +539,8 @@ public class UsageViewImpl implements UsageView, UsageModelTracker.UsageModelTra
scheduleDisposeOnClose(new Disposable() {
@Override
public void dispose() {
- collapseAllAction.unregisterCustomShortcutSet(component);
expandAllAction.unregisterCustomShortcutSet(component);
+ collapseAllAction.unregisterCustomShortcutSet(component);
}
});
diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointsFavoriteListProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointsFavoriteListProvider.java
similarity index 97%
rename from java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointsFavoriteListProvider.java
rename to platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointsFavoriteListProvider.java
index f6852bb00ab3..41caa63947c1 100644
--- a/java/debugger/impl/src/com/intellij/debugger/ui/breakpoints/BreakpointsFavoriteListProvider.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/BreakpointsFavoriteListProvider.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.intellij.debugger.ui.breakpoints;
+package com.intellij.xdebugger.impl.breakpoints;
import com.intellij.icons.AllIcons;
import com.intellij.ide.favoritesTreeView.AbstractFavoritesListProvider;
@@ -29,9 +29,6 @@ import com.intellij.xdebugger.XDebuggerManager;
import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroup;
import com.intellij.xdebugger.breakpoints.ui.XBreakpointGroupingRule;
import com.intellij.xdebugger.impl.DebuggerSupport;
-import com.intellij.xdebugger.impl.breakpoints.XBreakpointManagerImpl;
-import com.intellij.xdebugger.impl.breakpoints.XBreakpointUtil;
-import com.intellij.xdebugger.impl.breakpoints.XBreakpointsDialogState;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointItem;
import com.intellij.xdebugger.impl.breakpoints.ui.BreakpointPanelProvider;
import com.intellij.xdebugger.impl.breakpoints.ui.tree.BreakpointItemsTreeController;
@@ -75,20 +72,12 @@ public class BreakpointsFavoriteListProvider extends AbstractFavoritesListProvid
myTreeController = new BreakpointItemsTreeController(myRulesAvailable);
myTree = new BreakpointsSimpleTree(myProject, myTreeController);
myTreeController.setTreeView(myTree);
+ updateChildren();
}
@Override
public void breakpointsChanged() {
- List items = new ArrayList();
- for (final BreakpointPanelProvider provider : myBreakpointPanelProviders) {
- provider.provideBreakpointItems(myProject, items);
- }
- getEnabledGroupingRules(myRulesEnabled);
- myTreeController.setGroupingRules(myRulesEnabled);
- myTreeController.rebuildTree(items);
-
updateChildren();
- FavoritesManager.getInstance(myProject).fireListeners(getListName(myProject));
}
private void getEnabledGroupingRules(Collection rules) {
@@ -103,7 +92,16 @@ public class BreakpointsFavoriteListProvider extends AbstractFavoritesListProvid
}
private void updateChildren() {
+ List items = new ArrayList();
+ for (final BreakpointPanelProvider provider : myBreakpointPanelProviders) {
+ provider.provideBreakpointItems(myProject, items);
+ }
+ getEnabledGroupingRules(myRulesEnabled);
+ myTreeController.setGroupingRules(myRulesEnabled);
+ myTreeController.rebuildTree(items);
+
myChildren.clear();
+
CheckedTreeNode root = myTreeController.getRoot();
for (int i = 0; i < root.getChildCount(); i++) {
TreeNode child = root.getChildAt(i);
@@ -111,6 +109,7 @@ public class BreakpointsFavoriteListProvider extends AbstractFavoritesListProvid
replicate((DefaultMutableTreeNode)child, myNode, myChildren);
}
}
+ FavoritesManager.getInstance(myProject).fireListeners(getListName(myProject));
}
private void replicate(DefaultMutableTreeNode source, AbstractTreeNode destination, final List> destinationChildren) {
diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java
index 0dfc420586d3..c3f153f23063 100644
--- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java
+++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XBreakpointPanelProvider.java
@@ -148,6 +148,7 @@ public class XBreakpointPanelProvider extends BreakpointPanelProvider breakpoint) {
+ myListener.breakpointsChanged();
}
}
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/JavaFxFileReferenceProvider.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/JavaFxFileReferenceProvider.java
index e6a2669c955a..f371c317476a 100644
--- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/JavaFxFileReferenceProvider.java
+++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/JavaFxFileReferenceProvider.java
@@ -15,22 +15,28 @@ import java.util.Collections;
* Date: 4/3/13
*/
public class JavaFxFileReferenceProvider extends PsiReferenceProvider {
+
@NotNull
@Override
public PsiReference[] getReferencesByElement(@NotNull final PsiElement element, @NotNull ProcessingContext context) {
final Object value = ((PsiLiteralExpression)element).getValue();
final PsiDirectory directory = element.getContainingFile().getOriginalFile().getParent();
if (!(value instanceof String) || directory == null) return PsiReference.EMPTY_ARRAY;
+ final boolean startsWithSlash = ((String)value).startsWith("/");
final VirtualFileSystem fs = directory.getVirtualFile().getFileSystem();
- return new FileReferenceSet((String)value, element, 1, null, ((NewVirtualFileSystem)fs).isCaseSensitive()) {
+ final FileReferenceSet fileReferenceSet = new FileReferenceSet((String)value, element, 1, null, ((NewVirtualFileSystem)fs).isCaseSensitive()) {
@NotNull
@Override
public Collection getDefaultContexts() {
- if (!directory.isValid()) {
+ if (startsWithSlash || !directory.isValid()) {
return super.getDefaultContexts();
}
return Collections.singletonList(directory);
}
- }.getAllReferences();
+ };
+ if (startsWithSlash) {
+ fileReferenceSet.addCustomization(FileReferenceSet.DEFAULT_PATH_EVALUATOR_OPTION, FileReferenceSet.ABSOLUTE_TOP_LEVEL);
+ }
+ return fileReferenceSet.getAllReferences();
}
}
diff --git a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxReferencesContributor.java b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxReferencesContributor.java
index 658e99aa051a..c17d71567c40 100644
--- a/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxReferencesContributor.java
+++ b/plugins/javaFX/src/org/jetbrains/plugins/javaFX/fxml/refs/JavaFxReferencesContributor.java
@@ -15,6 +15,7 @@
*/
package org.jetbrains.plugins.javaFX.fxml.refs;
+import com.intellij.patterns.PsiJavaElementPattern;
import com.intellij.psi.*;
import com.intellij.psi.filters.ElementFilter;
import com.intellij.psi.filters.position.FilterPattern;
@@ -30,10 +31,40 @@ import static com.intellij.patterns.PsiJavaPatterns.literalExpression;
* Date: 2/22/13
*/
public class JavaFxReferencesContributor extends PsiReferenceContributor {
+ public static final PsiJavaElementPattern.Capture STYLESHEET_PATTERN =
+ literalExpression().and(new FilterPattern(new ElementFilter() {
+ public boolean isAcceptable(Object element, PsiElement context) {
+ final PsiLiteralExpression literalExpression = (PsiLiteralExpression)context;
+ PsiMethodCallExpression methodCallExpression = PsiTreeUtil.getParentOfType(literalExpression, PsiMethodCallExpression.class);
+ if (methodCallExpression != null) {
+ final PsiMethod psiMethod = methodCallExpression.resolveMethod();
+ if (psiMethod != null && "add".equals(psiMethod.getName())) {
+ final PsiClass containingClass = psiMethod.getContainingClass();
+ if (containingClass != null ) {
+ final PsiExpression qualifierExpression = methodCallExpression.getMethodExpression().getQualifierExpression();
+ if (qualifierExpression instanceof PsiMethodCallExpression) {
+ final PsiReferenceExpression getStylesheetsMethodExpression = ((PsiMethodCallExpression)qualifierExpression).getMethodExpression();
+ if ("getStylesheets".equals(getStylesheetsMethodExpression.getReferenceName())) {
+ final PsiExpression stageExpr = getStylesheetsMethodExpression.getQualifierExpression();
+ if (stageExpr != null) {
+ final PsiType psiType = stageExpr.getType();
+ return psiType != null && psiType.equalsToText(JavaFxCommonClassNames.JAVA_FX_PARENT);
+ }
+ }
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public boolean isClassAcceptable(Class hintClass) {
+ return true;
+ }
+ }));
- @Override
- public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
- registrar.registerReferenceProvider(literalExpression().and(new FilterPattern(new ElementFilter() {
+ public static final PsiJavaElementPattern.Capture FXML_PATTERN =
+ literalExpression().and(new FilterPattern(new ElementFilter() {
public boolean isAcceptable(Object element, PsiElement context) {
final PsiLiteralExpression literalExpression = (PsiLiteralExpression)context;
PsiMethodCallExpression callExpression = PsiTreeUtil.getParentOfType(literalExpression, PsiMethodCallExpression.class);
@@ -72,6 +103,11 @@ public class JavaFxReferencesContributor extends PsiReferenceContributor {
public boolean isClassAcceptable(Class hintClass) {
return true;
}
- })), new JavaFxFileReferenceProvider());
+ }));
+
+ @Override
+ public void registerReferenceProviders(PsiReferenceRegistrar registrar) {
+ registrar.registerReferenceProvider(FXML_PATTERN, new JavaFxFileReferenceProvider());
+ registrar.registerReferenceProvider(STYLESHEET_PATTERN, new JavaFxFileReferenceProvider());
}
}
diff --git a/plugins/ui-designer/testSrc/com/intellij/uiDesigner/projectView/FormMergerTreeStructureProviderTest.java b/plugins/ui-designer/testSrc/com/intellij/uiDesigner/projectView/FormMergerTreeStructureProviderTest.java
index f889fe6cee5e..a9801c8573a7 100644
--- a/plugins/ui-designer/testSrc/com/intellij/uiDesigner/projectView/FormMergerTreeStructureProviderTest.java
+++ b/plugins/ui-designer/testSrc/com/intellij/uiDesigner/projectView/FormMergerTreeStructureProviderTest.java
@@ -23,7 +23,6 @@ import com.intellij.projectView.BaseProjectViewTestCase;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiJavaFile;
-import com.intellij.testFramework.ProjectViewTestUtil;
public class FormMergerTreeStructureProviderTest extends BaseProjectViewTestCase {
@@ -49,11 +48,11 @@ public class FormMergerTreeStructureProviderTest extends BaseProjectViewTestCase
" PsiFile(plain text):Form1.form\n");
PsiClass psiClass = ((PsiJavaFile)getPackageDirectory().findFile("Form1.java")).getClasses()[0];
- ProjectViewTestUtil.checkNavigateFromSourceBehaviour(psiClass, psiClass.getContainingFile().getVirtualFile(), pane);
+ myStructure.checkNavigateFromSourceBehaviour(psiClass, psiClass.getContainingFile().getVirtualFile(), pane);
PsiFile psiFile = getPackageDirectory().findFile("Form1.form");
VirtualFile virtualFile = psiFile.getContainingFile().getVirtualFile();
- ProjectViewTestUtil.checkNavigateFromSourceBehaviour(psiFile, virtualFile, pane);
+ myStructure.checkNavigateFromSourceBehaviour(psiFile, virtualFile, pane);
}
}
diff --git a/resources/src/META-INF/IdeaPlugin.xml b/resources/src/META-INF/IdeaPlugin.xml
index 16ffa42d2855..e1254dc9e581 100644
--- a/resources/src/META-INF/IdeaPlugin.xml
+++ b/resources/src/META-INF/IdeaPlugin.xml
@@ -1125,10 +1125,6 @@
-
-
-
-