Revision: 6608
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6608&view=rev
Author: gerdwagner
Date: 2012-04-07 13:08:25 +0000 (Sat, 07 Apr 2012)
Log Message:
-----------
Fixed memory leak: Sessions didn't get garbage collected as soon as a popup (code completion, bookmarks, tools popup) was used.
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/ToolsPopupController.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/ISession.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/Session.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/objecttree/ObjectTree.java
trunk/sql12/doc/src/main/resources/changes.txt
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/Completor.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/PopupManager.java
trunk/sql12/plugins/codecompletion/src/main/java/net/sourceforge/squirrel_sql/plugins/codecompletion/CompleteCodeAction.java
trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLEntryPanelManager.java
trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCompleteCodeAction.java
trunk/sql12/plugins/sqlbookmark/src/main/java/net/sourceforge/squirrel_sql/plugins/sqlbookmark/CompleteBookmarkAction.java
trunk/sql12/squirrelsql-integration-environment/src/test/java/net/sourceforge/squirrel_sql/client/session/MockSession.java
Added Paths:
-----------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SimpleSessionListenerManager.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/event/SimpleSessionListener.java
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/ToolsPopupController.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/ToolsPopupController.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/ToolsPopupController.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -10,6 +10,7 @@
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLPanel;
import net.sourceforge.squirrel_sql.fw.completion.CompletionInfo;
import net.sourceforge.squirrel_sql.fw.completion.Completor;
@@ -37,18 +38,27 @@
_session = session;
_toolsPopupCompletorModel = new ToolsPopupCompletorModel();
- _toolsCompletor = new Completor(_sqlEntryPanel.getTextComponent(), _toolsPopupCompletorModel, new Color(255,204,204), true);
- _toolsCompletor.addCodeCompletorListener
- (
- new CompletorListener()
+ CompletorListener completorListener = new CompletorListener()
+ {
+ public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
{
- public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
- {onToolsPopupActionSelected(completion);}
+ onToolsPopupActionSelected(completion);
}
- );
+ };
+ _toolsCompletor = new Completor(_sqlEntryPanel.getTextComponent(), _toolsPopupCompletorModel, completorListener, new Color(255,204,204), true);
+
+ sqlEntryPanel.getSession().addSimpleSessionListener(new SimpleSessionListener()
+ {
+ public void sessionClosed()
+ {
+ _toolsCompletor.disposePopup();
+ }
+ });
+
+
_ctrlTCount = Preferences.userRoot().getInt(PREFS_KEY_CTRL_T_COUNT, 0);
if(3 > _ctrlTCount)
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/ISession.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/ISession.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/ISession.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -32,6 +32,7 @@
import net.sourceforge.squirrel_sql.client.gui.session.SessionInternalFrame;
import net.sourceforge.squirrel_sql.client.gui.session.SessionPanel;
import net.sourceforge.squirrel_sql.client.plugin.IPlugin;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.client.session.mainpanel.IMainPanelTab;
import net.sourceforge.squirrel_sql.client.session.parser.IParserEventsProcessor;
import net.sourceforge.squirrel_sql.client.session.properties.SessionProperties;
@@ -403,4 +404,14 @@
JdbcConnectionData getJdbcData();
+
+ /**
+ * Simple because it is directly attached to the Session itself
+ * in contrast to SessionListener that is attached to SessionManager.
+ */
+ void addSimpleSessionListener(SimpleSessionListener simpleSessionListener);
+
+ void removeSimpleSessionListener(SimpleSessionListener simpleSessionListener);
+
+
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/Session.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/Session.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/Session.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -52,6 +52,7 @@
import net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommand;
import net.sourceforge.squirrel_sql.client.mainframe.action.OpenConnectionCommandListener;
import net.sourceforge.squirrel_sql.client.plugin.IPlugin;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.client.session.mainpanel.IMainPanelTab;
import net.sourceforge.squirrel_sql.client.session.parser.IParserEventsProcessor;
import net.sourceforge.squirrel_sql.client.session.parser.ParserEventsProcessor;
@@ -155,7 +156,8 @@
private DefaultExceptionFormatter formatter = new DefaultExceptionFormatter();
private SessionConnectionKeepAlive _sessionConnectionKeepAlive = null;
-
+ private SimpleSessionListenerManager _simpleSessionListenerManager;
+
/**
* Create a new session.
*
@@ -173,9 +175,6 @@
SQLConnection conn, String user, String password,
IIdentifier sessionId)
{
- super();
- _schemaInfo = new SchemaInfo(app);
-
if (app == null)
{
throw new IllegalArgumentException("null IApplication passed");
@@ -197,6 +196,8 @@
throw new IllegalArgumentException("sessionId == null");
}
+ _schemaInfo = new SchemaInfo(app);
+
_app = app;
_driver = driver;
@@ -236,6 +237,7 @@
}
});
startKeepAliveTaskIfNecessary();
+ _simpleSessionListenerManager = new SimpleSessionListenerManager(app, this);
}
private void startKeepAliveTaskIfNecessary() {
@@ -1278,4 +1280,15 @@
return cmd.getSQLConnection();
}
+ @Override
+ public void addSimpleSessionListener(SimpleSessionListener simpleSessionListener)
+ {
+ _simpleSessionListenerManager.addListener(simpleSessionListener);
+ }
+
+ @Override
+ public void removeSimpleSessionListener(SimpleSessionListener simpleSessionListener)
+ {
+ _simpleSessionListenerManager.removeListener(simpleSessionListener);
+ }
}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SimpleSessionListenerManager.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SimpleSessionListenerManager.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/SimpleSessionListenerManager.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -0,0 +1,62 @@
+package net.sourceforge.squirrel_sql.client.session;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.session.event.SessionAdapter;
+import net.sourceforge.squirrel_sql.client.session.event.SessionEvent;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
+
+import java.util.ArrayList;
+
+public class SimpleSessionListenerManager
+{
+ private final IApplication _app;
+ private final Session _session;
+ private ArrayList<SimpleSessionListener> _listeners = new ArrayList<SimpleSessionListener>();
+ private final SessionAdapter _sessionAdapter;
+
+ public SimpleSessionListenerManager(IApplication app, Session session)
+ {
+ _app = app;
+ _session = session;
+
+ _sessionAdapter = new SessionAdapter()
+ {
+ @Override
+ public void sessionClosed(SessionEvent evt)
+ {
+ onSessionClosed(evt);
+ }
+ };
+
+ _app.getSessionManager().addSessionListener(_sessionAdapter);
+
+ }
+
+ private void onSessionClosed(SessionEvent evt)
+ {
+ if(false == evt.getSession().getIdentifier().equals(_session.getIdentifier()))
+ {
+ return;
+ }
+
+ SimpleSessionListener[] simpleSessionListeners = _listeners.toArray(new SimpleSessionListener[_listeners.size()]);
+
+ for (SimpleSessionListener simpleSessionListener : simpleSessionListeners)
+ {
+ simpleSessionListener.sessionClosed();
+ }
+
+ _app.getSessionManager().removeSessionListener(_sessionAdapter);
+ }
+
+ public void addListener(SimpleSessionListener simpleSessionListener)
+ {
+ _listeners.add(simpleSessionListener);
+
+ }
+
+ public void removeListener(SimpleSessionListener simpleSessionListener)
+ {
+ _listeners.remove(simpleSessionListener);
+ }
+}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/event/SimpleSessionListener.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/event/SimpleSessionListener.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/event/SimpleSessionListener.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -0,0 +1,11 @@
+package net.sourceforge.squirrel_sql.client.session.event;
+
+
+/**
+ * Simple because it is directly attached to the Session itself
+ * in contrast to SessionListener that is attached to SessionManager.
+ */
+public interface SimpleSessionListener
+{
+ public void sessionClosed();
+}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/objecttree/ObjectTree.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/objecttree/ObjectTree.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/objecttree/ObjectTree.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -83,7 +83,7 @@
private final ObjectTreeModel _model;
/** Current session. */
- transient private final ISession _session;
+ private final ISession _session;
/**
* Collection of popup menus (<TT>JPopupMenu</TT> instances) for the
Modified: trunk/sql12/doc/src/main/resources/changes.txt
===================================================================
--- trunk/sql12/doc/src/main/resources/changes.txt 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/doc/src/main/resources/changes.txt 2012-04-07 13:08:25 UTC (rev 6608)
@@ -64,6 +64,8 @@
Bug fixes:
+Fixed memory leak: Sessions didn't get garbage collected as soon as a popup (code completion, bookmarks, tools popup) was used.
+
Connection/Login timeouts (menu File --> Global Preferences --> Tab SQL) as well as canceling the "Connect to" dialog now works cleanly.
When a Session tab is closed that is not the active tab
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/Completor.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/Completor.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/Completor.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -18,23 +18,20 @@
package net.sourceforge.squirrel_sql.fw.completion;
-
-
import javax.swing.*;
import javax.swing.text.BadLocationException;
import javax.swing.text.JTextComponent;
import javax.swing.text.Keymap;
import java.awt.*;
import java.awt.event.*;
-import java.util.Vector;
public class Completor
{
public static final Color DEFAULT_POP_UP_BACK_GROUND = new Color(255,255,204);
- private Vector<CompletorListener> _listeners = new Vector<CompletorListener>();
- private ICompletorModel _model;
+ private CompletorListener _completorListener;
+ private ICompletorModel _model;
private JPanel _completionPanel;
private JList _completionList;
@@ -67,34 +64,35 @@
private Action[] _originalActions = null;
- public Completor(JTextComponent txtComp, ICompletorModel model)
+ public Completor(JTextComponent txtComp, ICompletorModel model, CompletorListener completorListener)
{
- this(txtComp, model, DEFAULT_POP_UP_BACK_GROUND, false, txtComp); // light yellow
+ this(txtComp, model, completorListener, DEFAULT_POP_UP_BACK_GROUND, false, txtComp); // light yellow
}
- public Completor(JTextComponent txtComp, ICompletorModel model, Color popUpBackGround, boolean useOwnFilterTextField)
+ public Completor(JTextComponent txtComp, ICompletorModel model, CompletorListener completorListener, Color popUpBackGround, boolean useOwnFilterTextField)
{
- this(txtComp, model, popUpBackGround, useOwnFilterTextField, txtComp);
+ this(txtComp, model, completorListener, popUpBackGround, useOwnFilterTextField, txtComp);
}
- public Completor(JTextComponent txtComp, ICompletorModel model, Color popUpBackGround, boolean useOwnFilterTextField, JComponent popupParent)
+ public Completor(JTextComponent txtComp, ICompletorModel model, CompletorListener completorListener, Color popUpBackGround, boolean useOwnFilterTextField, JComponent popupParent)
{
_txtComp = new TextComponentProvider(txtComp, useOwnFilterTextField);
_model = model;
+ _completorListener = completorListener;
+
+
_completionPanel =
new JPanel(new BorderLayout())
{
- private static final long serialVersionUID = 1L;
+ public void setSize(int width, int height)
+ {
+ // without this the completion panel's size will be weird
+ super.setSize(_curCompletionPanelSize.width, _curCompletionPanelSize.height);
+ }
+ };
- public void setSize(int width, int height)
- {
- // without this the completion panel's size will be weird
- super.setSize(_curCompletionPanelSize.width, _curCompletionPanelSize.height);
- }
- };
-
_completionList = new JList(new DefaultListModel());
_completionList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
_completionList.setBackground(popUpBackGround);
@@ -485,30 +483,23 @@
private void fireEvent(CompletionInfo completion, int keyCode, int modifiers)
{
- Vector<CompletorListener> clone = new Vector<CompletorListener>(_listeners);
-
- for (int i = 0; i < clone.size(); i++)
- {
- CompletorListener completorListener = clone.elementAt(i);
- if(_txtComp.editorEqualsFilter())
- {
- completorListener.completionSelected(completion, _currCandidates.getReplacementStart(), keyCode, modifiers);
- }
- else
- {
- completorListener.completionSelected(completion, -1, keyCode, modifiers);
- }
- }
+ if(_txtComp.editorEqualsFilter())
+ {
+ _completorListener.completionSelected(completion, _currCandidates.getReplacementStart(), keyCode, modifiers);
+ }
+ else
+ {
+ _completorListener.completionSelected(completion, -1, keyCode, modifiers);
+ }
}
- public void addCodeCompletorListener(CompletorListener l)
- {
- _listeners.add(l);
- }
-
- public void removeCodeCompletorListener(CompletorListener l)
- {
- _listeners.remove(l);
- }
-
+ public void disposePopup()
+ {
+ //////////////////////////////////////////////////
+ // Both are needed to prevent memory leaks.
+ _popupMan.removeFromRootPane(_completionPanel);
+ _completionPanel.removeAll();
+ //
+ /////////////////////////////////////////////////
+ }
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/PopupManager.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/PopupManager.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/completion/PopupManager.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -113,7 +113,7 @@
}
/** Remove popup panel from previous textComponent root pane */
- private void removeFromRootPane(JComponent c)
+ public void removeFromRootPane(JComponent c)
{
JRootPane rp = c.getRootPane();
if (rp != null)
Modified: trunk/sql12/plugins/codecompletion/src/main/java/net/sourceforge/squirrel_sql/plugins/codecompletion/CompleteCodeAction.java
===================================================================
--- trunk/sql12/plugins/codecompletion/src/main/java/net/sourceforge/squirrel_sql/plugins/codecompletion/CompleteCodeAction.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/plugins/codecompletion/src/main/java/net/sourceforge/squirrel_sql/plugins/codecompletion/CompleteCodeAction.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -17,23 +17,22 @@
*/
package net.sourceforge.squirrel_sql.plugins.codecompletion;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-
-import javax.swing.*;
-
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.action.SquirrelAction;
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.fw.completion.CompletionCandidates;
import net.sourceforge.squirrel_sql.fw.completion.CompletionInfo;
import net.sourceforge.squirrel_sql.fw.completion.Completor;
import net.sourceforge.squirrel_sql.fw.completion.CompletorListener;
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+
public class CompleteCodeAction extends SquirrelAction
{
- private static final long serialVersionUID = 1L;
private ISQLEntryPanel _sqlEntryPanel;
private Completor _cc;
private CodeCompletorModel _model;
@@ -51,25 +50,35 @@
_model = new CodeCompletorModel(session, plugin, codeCompletionInfos, sqlEntryPanel.getIdentifier());
+
+ CompletorListener completorListener = new CompletorListener()
+ {
+ public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
+ {
+ performCompletionSelected((CodeCompletionInfo) completion, replaceBegin, keyCode, modifiers);
+ }
+ };
+
if(null != popupParent)
{
- _cc = new Completor(_sqlEntryPanel.getTextComponent(), _model, Completor.DEFAULT_POP_UP_BACK_GROUND, false, popupParent);
+ _cc = new Completor(_sqlEntryPanel.getTextComponent(), _model, completorListener, Completor.DEFAULT_POP_UP_BACK_GROUND, false, popupParent);
}
else
{
- _cc = new Completor(_sqlEntryPanel.getTextComponent(), _model, Completor.DEFAULT_POP_UP_BACK_GROUND, false);
+ _cc = new Completor(_sqlEntryPanel.getTextComponent(), _model, completorListener, Completor.DEFAULT_POP_UP_BACK_GROUND, false);
}
+ session.addSimpleSessionListener(new SimpleSessionListener()
+ {
+ public void sessionClosed()
+ {
+ _cc.disposePopup();
+ }
+ });
+
+
_sqlEntryPanel.addSQLTokenListener(_model.getSQLTokenListener());
- _cc.addCodeCompletorListener
- (
- new CompletorListener()
- {
- public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
- {performCompletionSelected((CodeCompletionInfo) completion, replaceBegin, keyCode, modifiers);}
- }
- );
}
Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLEntryPanelManager.java
===================================================================
--- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLEntryPanelManager.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/HQLEntryPanelManager.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -122,7 +122,7 @@
private void initCodeCompletion()
{
- HQLCompleteCodeAction hcca = new HQLCompleteCodeAction(getSession().getApplication(), _resources, this, _connectionProvider, _hqlSyntaxHighlightTokenMatcherProxy);
+ HQLCompleteCodeAction hcca = new HQLCompleteCodeAction(getSession().getApplication(), _resources, this, _connectionProvider, _hqlSyntaxHighlightTokenMatcherProxy, getSession());
JMenuItem item = addToSQLEntryAreaMenu(hcca, "complete");
_resources.configureMenuItem(hcca, item);
registerKeyboardAction(hcca, _resources.getKeyStroke(hcca));
Modified: trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCompleteCodeAction.java
===================================================================
--- trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCompleteCodeAction.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/plugins/hibernate/src/main/java/net/sourceforge/squirrel_sql/plugins/hibernate/completion/HQLCompleteCodeAction.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -3,6 +3,8 @@
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.action.SquirrelAction;
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
+import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.fw.completion.CompletionCandidates;
import net.sourceforge.squirrel_sql.fw.completion.CompletionInfo;
import net.sourceforge.squirrel_sql.fw.completion.Completor;
@@ -28,28 +30,35 @@
HibernatePluginResources resources,
HQLEntryPanelManager hqlEntryPanelManager,
IHibernateConnectionProvider hibernateConnectionProvider,
- HqlSyntaxHighlightTokenMatcherProxy hqlSyntaxHighlightTokenMatcherProxy)
+ HqlSyntaxHighlightTokenMatcherProxy hqlSyntaxHighlightTokenMatcherProxy,
+ ISession session)
{
super(app, resources);
_hqlEntryPanel = hqlEntryPanelManager.getEntryPanel();
_hibernateConnectionProvider = hibernateConnectionProvider;
_model = new HQLCodeCompletorModel(hibernateConnectionProvider, new HQLAliasFinder(_hqlEntryPanel), hqlSyntaxHighlightTokenMatcherProxy);
- _cc = new Completor(_hqlEntryPanel.getTextComponent(), _model);
- _cc.addCodeCompletorListener
- (
- new CompletorListener()
- {
- public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
- {
- performCompletionSelected(completion, replaceBegin, keyCode, modifiers);
- }
- }
- );
+ CompletorListener completorListener = new CompletorListener()
+ {
+ public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
+ {
+ performCompletionSelected(completion, replaceBegin, keyCode, modifiers);
+ }
+ };
+ _cc = new Completor(_hqlEntryPanel.getTextComponent(), _model, completorListener);
+ session.addSimpleSessionListener(new SimpleSessionListener()
+ {
+ public void sessionClosed()
+ {
+ _cc.disposePopup();
+ }
+ });
+
+
}
Modified: trunk/sql12/plugins/sqlbookmark/src/main/java/net/sourceforge/squirrel_sql/plugins/sqlbookmark/CompleteBookmarkAction.java
===================================================================
--- trunk/sql12/plugins/sqlbookmark/src/main/java/net/sourceforge/squirrel_sql/plugins/sqlbookmark/CompleteBookmarkAction.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/plugins/sqlbookmark/src/main/java/net/sourceforge/squirrel_sql/plugins/sqlbookmark/CompleteBookmarkAction.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -23,6 +23,7 @@
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.action.SquirrelAction;
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.fw.completion.CompletionInfo;
import net.sourceforge.squirrel_sql.fw.completion.Completor;
import net.sourceforge.squirrel_sql.fw.completion.CompletorListener;
@@ -41,16 +42,23 @@
_sqlEntryPanel = sqlEntryPanel;
_plugin = plugin;
- _cc = new Completor(_sqlEntryPanel.getTextComponent(), plugin.getBookmarkManager(), new Color(204,255,255), true);
+ CompletorListener completorListener = new CompletorListener()
+ {
+ public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
+ {
+ performCompletionSelected(completion);
+ }
+ };
- _cc.addCodeCompletorListener
- (
- new CompletorListener()
+ _cc = new Completor(_sqlEntryPanel.getTextComponent(), plugin.getBookmarkManager(), completorListener, new Color(204,255,255), true);
+
+ sqlEntryPanel.getSession().addSimpleSessionListener(new SimpleSessionListener()
+ {
+ public void sessionClosed()
{
- public void completionSelected(CompletionInfo completion, int replaceBegin, int keyCode, int modifiers)
- {performCompletionSelected(completion);}
+ _cc.disposePopup();
}
- );
+ });
}
Modified: trunk/sql12/squirrelsql-integration-environment/src/test/java/net/sourceforge/squirrel_sql/client/session/MockSession.java
===================================================================
--- trunk/sql12/squirrelsql-integration-environment/src/test/java/net/sourceforge/squirrel_sql/client/session/MockSession.java 2012-03-26 20:12:53 UTC (rev 6607)
+++ trunk/sql12/squirrelsql-integration-environment/src/test/java/net/sourceforge/squirrel_sql/client/session/MockSession.java 2012-04-07 13:08:25 UTC (rev 6608)
@@ -38,6 +38,7 @@
import net.sourceforge.squirrel_sql.client.gui.session.SessionPanel;
import net.sourceforge.squirrel_sql.client.plugin.IPlugin;
import net.sourceforge.squirrel_sql.client.preferences.SquirrelPreferences;
+import net.sourceforge.squirrel_sql.client.session.event.SimpleSessionListener;
import net.sourceforge.squirrel_sql.client.session.mainpanel.IMainPanelTab;
import net.sourceforge.squirrel_sql.client.session.parser.IParserEventsProcessor;
import net.sourceforge.squirrel_sql.client.session.properties.SessionProperties;
@@ -554,4 +555,14 @@
{
System.err.println("MockSession.setTitle: stub not yet implemented");
}
+
+ @Override
+ public void addSimpleSessionListener(SimpleSessionListener simpleSessionListener)
+ {
+ }
+
+ @Override
+ public void removeSimpleSessionListener(SimpleSessionListener simpleSessionListener)
+ {
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|