From: Alan E. <ala...@gm...> - 2011-08-28 14:15:13
|
Why should the javasidekick be responsible for removing its own services? If the service is not unloaded automatically by the servicemanager, shouldn't it be done by SideKick instead of each individual parser? You may have stumbled upon one of the reasons sidekick doesn't unload properly via plugin manager anymore. On Sun, Aug 28, 2011 at 6:50 AM, <dal...@us...> wrote: > Revision: 19851 > http://jedit.svn.sourceforge.net/jedit/?rev=19851&view=rev > Author: daleanson > Date: 2011-08-28 13:50:59 +0000 (Sun, 28 Aug 2011) > Log Message: > ----------- > Remove java parser from edit bus when view closes or plugin reloaded. > > Modified Paths: > -------------- > plugins/JavaSideKick/trunk/services.xml > plugins/JavaSideKick/trunk/src/sidekick/java/JavaParser.java > plugins/JavaSideKick/trunk/src/sidekick/java/JavaSideKickPlugin.java > > Modified: plugins/JavaSideKick/trunk/services.xml > =================================================================== > --- plugins/JavaSideKick/trunk/services.xml 2011-08-28 11:25:50 UTC > (rev 19850) > +++ plugins/JavaSideKick/trunk/services.xml 2011-08-28 13:50:59 UTC > (rev 19851) > @@ -3,10 +3,10 @@ > > <SERVICES> > <SERVICE CLASS="sidekick.SideKickParser" NAME="java"> > - new sidekick.java.JavaParser(); > + > sidekick.java.JavaSideKickPlugin.createParser(sidekick.java.JavaParser.JAVA_PARSER); > </SERVICE> > <SERVICE CLASS="sidekick.SideKickParser" NAME="javacc"> > - new > sidekick.java.JavaParser(sidekick.java.JavaParser.JAVACC_PARSER); > + > sidekick.java.JavaSideKickPlugin.createParser(sidekick.java.JavaParser.JAVACC_PARSER); > </SERVICE> > <SERVICE CLASS="sidekick.SideKickParser" NAME="properties"> > new sidekick.property.PropertyParser(); > > Modified: plugins/JavaSideKick/trunk/src/sidekick/java/JavaParser.java > =================================================================== > --- plugins/JavaSideKick/trunk/src/sidekick/java/JavaParser.java > 2011-08-28 11:25:50 UTC (rev 19850) > +++ plugins/JavaSideKick/trunk/src/sidekick/java/JavaParser.java > 2011-08-28 13:50:59 UTC (rev 19851) > @@ -87,7 +87,6 @@ > default: > parser_type = JAVA_PARSER; > } > - EditBus.addToBus( this ); > } > > /** > > Modified: > plugins/JavaSideKick/trunk/src/sidekick/java/JavaSideKickPlugin.java > =================================================================== > --- plugins/JavaSideKick/trunk/src/sidekick/java/JavaSideKickPlugin.java > 2011-08-28 11:25:50 UTC (rev 19850) > +++ plugins/JavaSideKick/trunk/src/sidekick/java/JavaSideKickPlugin.java > 2011-08-28 13:50:59 UTC (rev 19851) > @@ -26,76 +26,132 @@ > SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. > */ > package sidekick.java; > -//{{{ imports > +// {{{ imports > import java.util.*; > import java.awt.event.*; > import org.gjt.sp.jedit.*; > +import org.gjt.sp.jedit.buffer.*; > +import org.gjt.sp.jedit.msg.ViewUpdate; > import org.gjt.sp.jedit.textarea.*; > -import org.gjt.sp.jedit.buffer.*; > import classpath.*; > import errorlist.*; > import sidekick.*; > import sidekick.java.util.*; > import sidekick.java.node.*; > -//}}} > +// }}} > public class JavaSideKickPlugin extends EBPlugin { > > - public final static String NAME = "sidekick.java"; > - public final static String OPTION_PREFIX = > "options.sidekick.java."; > - public final static String PROPERTY_PREFIX = > "plugin.sidekick.java."; > - public final static DefaultErrorSource ERROR_SOURCE = new > DefaultErrorSource( "JavaSideKick" ); > + public static final String NAME = "sidekick.java"; > + public static final String OPTION_PREFIX = "options.sidekick.java."; > + public static final String PROPERTY_PREFIX = "plugin.sidekick.java."; > + public static final DefaultErrorSource ERROR_SOURCE = new > DefaultErrorSource("JavaSideKick"); > > - public void start() { > - ErrorSource.registerErrorSource( ERROR_SOURCE ); > - } > - public void stop() { > - ErrorSource.unregisterErrorSource( ERROR_SOURCE ); > - } > + private static HashMap<View, JavaParser> javaParsers = new > HashMap<View, JavaParser>(); > + private static HashMap<View, JavaParser> javaccParsers = new > HashMap<View, JavaParser>(); > > - public static void insertImportAtCursor(EditPane editPane) { > - // Get some position information > - View view = editPane.getView(); > - JEditTextArea textArea = editPane.getTextArea(); > - JEditBuffer buffer = textArea.getBuffer(); > + public void start() { > + ErrorSource.registerErrorSource(ERROR_SOURCE); > + } > > - int line = textArea.getCaretLine(); > - int offset = textArea.getLineStartOffset(line); > - int caret = textArea.getCaretPosition()-offset; > - String lineText = textArea.getLineText(line); > - if (caret == lineText.length()) caret--; > - String noWordSep = (String) > textArea.getBuffer().getMode().getProperty("noWordSep"); > - int start = TextUtilities.findWordStart(lineText, caret-1, > noWordSep); > - int end = TextUtilities.findWordEnd(lineText, caret, > noWordSep); > - if (end == -1) end = lineText.length(); > - // Get the word > - String word = lineText.substring(start, end); > + public void stop() { > + ErrorSource.unregisterErrorSource(ERROR_SOURCE); > + for (JavaParser parser : javaParsers.values()) { > + EditBus.removeFromBus(parser); > + } > + for (JavaParser parser : javaccParsers.values()) { > + EditBus.removeFromBus(parser); > + } > + } > > - List<String> classes = > Locator.getInstance().getClassName(word); > - if (classes.size() == 0) { > - return; > - } > + /** > + * Create a java parser sidekick. > + * @param view The view for the parser > + * @param type One of JavaParser.JAVA_PARSER or > JavaParser.JAVACC_PARSER); > + * @return A java parser for the given view. > + */ > + public static JavaParser createParser(int type) { > + JavaParser parser = null; > + View view = jEdit.getActiveView(); > + switch (type) { > + case JavaParser.JAVA_PARSER: > + parser = javaParsers.get(view); > + if (parser == null) { > + parser = new JavaParser(type); > + javaParsers.put(view, parser); > + EditBus.addToBus(parser); > + } > + break; > + case JavaParser.JAVACC_PARSER: > + parser = javaccParsers.get(view); > + if (parser == null) { > + parser = new JavaParser(type); > + javaccParsers.put(view, parser); > + EditBus.addToBus(parser); > + } > + } > + return parser; > + } > > - List candids = new ArrayList(classes.size()); > - for (String clazz : classes) { > - candids.add(new > JavaCompletionFinder.JavaCompletionCandidate(clazz, > - > TigerLabeler.getClassIcon())); > - } > + public static void insertImportAtCursor(EditPane editPane) { > + // Get some position information > + View view = editPane.getView(); > + JEditTextArea textArea = editPane.getTextArea(); > > - JavaImportCompletion complete = new > JavaImportCompletion(view, word, candids); > + int line = textArea.getCaretLine(); > + int offset = textArea.getLineStartOffset(line); > + int caret = textArea.getCaretPosition() - offset; > + String lineText = textArea.getLineText(line); > + if (caret == lineText.length()) { > + caret--; > + } > + String noWordSep = (String) > textArea.getBuffer().getMode().getProperty("noWordSep"); > + int start = TextUtilities.findWordStart(lineText, caret - 1, > noWordSep); > + int end = TextUtilities.findWordEnd(lineText, caret, noWordSep); > + if (end == -1) { > + end = lineText.length(); > + } > + // Get the word > + String word = lineText.substring(start, end); > > - if (classes.size() == 1) { > - // Just insert it > - complete.insert(0); > - } else { > - // Construct the popup > - new SideKickCompletionPopup(view, null, offset+end, > complete, false); > - } > - } > + List<String> classes = Locator.getInstance().getClassName(word); > + if (classes.size() == 0) { > + return; > + } > > - public void handleMessage(EBMessage message) { > - if (message instanceof ClasspathUpdate) { > - Locator.getInstance().refresh(); > - } > - } > + List candids = new ArrayList(classes.size()); > + for (String clazz : classes) { > + candids.add(new > JavaCompletionFinder.JavaCompletionCandidate(clazz, > TigerLabeler.getClassIcon())); > + } > + > + JavaImportCompletion complete = new JavaImportCompletion(view, > word, candids); > + > + if (classes.size() == 1) { > + // Just insert it > + complete.insert(0); > + } else { > + // Construct the popup > + new SideKickCompletionPopup(view, null, offset + end, > complete, false); > + } > + } > + > + public void handleMessage(EBMessage message) { > + if (message instanceof ClasspathUpdate) { > + Locator.getInstance().refresh(); > + } > + if (message instanceof ViewUpdate) { > + ViewUpdate vu = (ViewUpdate) message; > + if (ViewUpdate.CLOSED.equals(vu.getWhat())) { > + View view = vu.getView(); > + JavaParser parser = javaParsers.remove(view); > + if (parser != null) { > + EditBus.removeFromBus(parser); > + } > + parser = javaccParsers.remove(view); > + if (parser != null) { > + EditBus.removeFromBus(parser); > + } > + } > + } > + } > } > > > This was sent by the SourceForge.net collaborative development platform, > the world's largest Open Source development site. > > > > ------------------------------------------------------------------------------ > EMC VNX: the world's simplest storage, starting under $10K > The only unified storage solution that offers unified management > Up to 160% more powerful than alternatives and 25% more efficient. > Guaranteed. http://p.sf.net/sfu/emc-vnx-dev2dev > _______________________________________________ > jEdit-CVS mailing list > jEd...@li... > https://lists.sourceforge.net/lists/listinfo/jedit-cvs > |