annotations, listener leak

This commit is contained in:
Alexey Kudravtsev
2012-10-30 15:14:54 +04:00
parent 283d06e005
commit 7b78474e69
4 changed files with 58 additions and 4 deletions
@@ -436,4 +436,29 @@
<item name='javax.swing.JTable void sorterChanged(javax.swing.event.RowSorterEvent) 0'>
<annotation name='org.jetbrains.annotations.NotNull'/>
</item>
<item name='javax.swing.JTabbedPane JTabbedPane(int) 0'>
<annotation name='org.intellij.lang.annotations.MagicConstant'>
<val name="intValues" val="{javax.swing.SwingConstants.TOP, javax.swing.SwingConstants.BOTTOM, javax.swing.SwingConstants.LEFT, javax.swing.SwingConstants.RIGHT}"/>
</annotation>
</item>
<item name='javax.swing.JTabbedPane JTabbedPane(int, int) 0'>
<annotation name='org.intellij.lang.annotations.MagicConstant'>
<val name="intValues" val="{javax.swing.SwingConstants.TOP, javax.swing.SwingConstants.BOTTOM, javax.swing.SwingConstants.LEFT, javax.swing.SwingConstants.RIGHT}"/>
</annotation>
</item>
<item name='javax.swing.JTable int getTabPlacement()'>
<annotation name='org.intellij.lang.annotations.MagicConstant'>
<val name="intValues" val="{javax.swing.SwingConstants.TOP, javax.swing.SwingConstants.BOTTOM, javax.swing.SwingConstants.LEFT, javax.swing.SwingConstants.RIGHT}"/>
</annotation>
</item>
<item name='javax.swing.JTabbedPane JTabbedPane(int, int) 1'>
<annotation name='org.intellij.lang.annotations.MagicConstant'>
<val name="intValues" val="{javax.swing.JTabbedPane.WRAP_TAB_LAYOUT, javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT}"/>
</annotation>
</item>
<item name='javax.swing.JTable int getTabLayoutPolicy()'>
<annotation name='org.intellij.lang.annotations.MagicConstant'>
<val name="intValues" val="{javax.swing.JTabbedPane.WRAP_TAB_LAYOUT, javax.swing.JTabbedPane.SCROLL_TAB_LAYOUT}"/>
</annotation>
</item>
</root>
@@ -63,4 +63,10 @@ public class JdkConstants {
@MagicConstant(intValues = {TitledBorder.DEFAULT_POSITION, TitledBorder.ABOVE_TOP, TitledBorder.TOP, TitledBorder.BELOW_TOP, TitledBorder.ABOVE_BOTTOM, TitledBorder.BOTTOM, TitledBorder.BELOW_BOTTOM})
public @interface TitledBorderTitlePosition{}
@MagicConstant(intValues = {SwingConstants.TOP, SwingConstants.BOTTOM, SwingConstants.LEFT, SwingConstants.RIGHT})
public @interface TabPlacement{}
@MagicConstant(intValues = {JTabbedPane.WRAP_TAB_LAYOUT, JTabbedPane.SCROLL_TAB_LAYOUT})
public @interface TabLayoutPolicy{}
}
@@ -2,6 +2,8 @@ package com.intellij.ui.components;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.util.ui.UIUtil;
import org.intellij.lang.annotations.JdkConstants;
import org.jetbrains.annotations.NonNls;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
@@ -13,17 +15,17 @@ import java.awt.event.HierarchyListener;
* @author evgeny.zakrevsky
*/
public class JBTabbedPane extends JTabbedPane implements HierarchyListener {
public static final String LABEL_FROM_TABBED_PANE = "JBTabbedPane.labelFromTabbedPane";
@NonNls public static final String LABEL_FROM_TABBED_PANE = "JBTabbedPane.labelFromTabbedPane";
private int previousSelectedIndex = -1;
public JBTabbedPane() {
}
public JBTabbedPane(int tabPlacement) {
public JBTabbedPane(@JdkConstants.TabPlacement int tabPlacement) {
super(tabPlacement);
}
public JBTabbedPane(int tabPlacement, int tabLayoutPolicy) {
public JBTabbedPane(@JdkConstants.TabPlacement int tabPlacement, @JdkConstants.TabLayoutPolicy int tabLayoutPolicy) {
super(tabPlacement, tabLayoutPolicy);
}
@@ -88,4 +90,12 @@ public class JBTabbedPane extends JTabbedPane implements HierarchyListener {
UIUtil.setNotOpaqueRecursively(e.getComponent());
repaint();
}
@Override
public void removeNotify() {
super.removeNotify();
for (int i=0; i<getTabCount(); i++) {
getComponentAt(i).removeHierarchyListener(this);
}
}
}
@@ -22,6 +22,7 @@ import com.intellij.openapi.actionSystem.IdeActions;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.components.JBTabbedPane;
import org.intellij.lang.annotations.JdkConstants;
import org.jetbrains.annotations.NonNls;
import javax.swing.*;
@@ -47,11 +48,12 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
private AnAction myPreviousTabAction = null;
public PrevNextActionsDescriptor myInstallKeyboardNavigation = null;
public TabbedPaneImpl(final int tabPlacement) {
public TabbedPaneImpl(@JdkConstants.TabPlacement int tabPlacement) {
super(tabPlacement);
setFocusable(false);
addMouseListener(
new MouseAdapter() {
@Override
public void mousePressed(final MouseEvent e) {
_requestDefaultFocus();
}
@@ -59,10 +61,12 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
);
}
@Override
public void setKeyboardNavigation(PrevNextActionsDescriptor installKeyboardNavigation) {
myInstallKeyboardNavigation = installKeyboardNavigation;
}
@Override
public JComponent getComponent() {
return this;
}
@@ -90,6 +94,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
setEnabledInModalContext(true);
}
@Override
public void actionPerformed(final AnActionEvent e) {
int index = getSelectedIndex() + 1;
if (index >= getTabCount()) {
@@ -107,6 +112,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
setEnabledInModalContext(true);
}
@Override
public void actionPerformed(final AnActionEvent e) {
int index = getSelectedIndex() - 1;
if (index < 0) {
@@ -132,6 +138,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
}
@Override
public void setUI(final TabbedPaneUI ui){
super.setUI(ui);
if(ui instanceof BasicTabbedPaneUI){
@@ -146,6 +153,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
* the method does nothing.
* @param index index of tab to be scrolled.
*/
@Override
public final void scrollTabToVisible(final int index){
if(myScrollableTabSupport==null|| WRAP_TAB_LAYOUT==getTabLayoutPolicy()){ // tab scrolling isn't supported by UI
return;
@@ -188,6 +196,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
}
}
@Override
public void setSelectedIndex(final int index){
if (index >= getTabCount()) return;
@@ -206,6 +215,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
//http://www.jetbrains.net/jira/browse/IDEADEV-22331
//to let repaint happen since AIOBE is thrown from Mac OSX's UI
@Override
protected void fireStateChanged() {
// Guaranteed to return a non-null array
Object[] listeners = listenerList.getListenerList();
@@ -219,6 +229,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
if (each != null && each.getClass().getName().indexOf("apple.laf.CUIAquaTabbedPane") >= 0) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
revalidate();
repaint();
@@ -234,6 +245,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
}
@Override
public final void removeTabAt (final int index) {
super.removeTabAt (index);
//This event should be fired necessarily because when swing fires an event
@@ -323,6 +335,7 @@ public class TabbedPaneImpl extends JBTabbedPane implements TabbedPane {
}
}
@Override
public boolean isDisposed() {
return false;
}