Class ParserManager

  • All Implemented Interfaces:
    java.awt.event.ActionListener, java.beans.PropertyChangeListener, java.util.EventListener, javax.swing.event.DocumentListener, javax.swing.event.HyperlinkListener

    class ParserManager
    extends java.lang.Object
    implements javax.swing.event.DocumentListener, java.awt.event.ActionListener, javax.swing.event.HyperlinkListener, java.beans.PropertyChangeListener
    Manages running a parser object for an RSyntaxTextArea.
    Version:
    0.9
    • Field Detail

      • parsers

        private java.util.List<Parser> parsers
      • timer

        private javax.swing.Timer timer
      • running

        private boolean running
      • parserForTip

        private Parser parserForTip
      • firstOffsetModded

        private javax.swing.text.Position firstOffsetModded
      • lastOffsetModded

        private javax.swing.text.Position lastOffsetModded
      • noticeHighlightPairs

        private java.util.List<ParserManager.NoticeHighlightPair> noticeHighlightPairs
        Mapping of notices to their highlights in the editor. Can't use a Map since parsers could return two ParserNotices that compare equally via equals(). Real-world example: The Perl compiler will return 2+ identical error messages if the same error is committed in a single line more than once.
      • PROPERTY_DEBUG_PARSING

        private static final java.lang.String PROPERTY_DEBUG_PARSING
        If this system property is set to true, debug messages will be printed to stdout to help diagnose parsing issues.
        See Also:
        Constant Field Values
      • DEBUG_PARSING

        private static final boolean DEBUG_PARSING
        Whether to print debug messages while running parsers.
      • DEFAULT_DELAY_MS

        private static final int DEFAULT_DELAY_MS
        The default delay between the last key press and when the document is parsed, in milliseconds.
        See Also:
        Constant Field Values
    • Constructor Detail

      • ParserManager

        ParserManager​(RSyntaxTextArea textArea)
        Constructor.
        Parameters:
        textArea - The text area whose document the parser will be parsing.
      • ParserManager

        ParserManager​(int delay,
                      RSyntaxTextArea textArea)
        Constructor.
        Parameters:
        delay - The delay between the last key press and when the document is parsed.
        textArea - The text area whose document the parser will be parsing.
    • Method Detail

      • actionPerformed

        public void actionPerformed​(java.awt.event.ActionEvent e)
        Called when the timer fires (e.g. it's time to parse the document).
        Specified by:
        actionPerformed in interface java.awt.event.ActionListener
        Parameters:
        e - The event.
      • addParser

        public void addParser​(Parser parser)
        Adds a parser for the text area.
        Parameters:
        parser - The new parser. If this is null, nothing happens.
        See Also:
        getParser(int), removeParser(Parser)
      • addParserNoticeHighlights

        private void addParserNoticeHighlights​(ParseResult res)
        Adds highlights for a list of parser notices. Any current notices from the same Parser, in the same parsed range, are removed.
        Parameters:
        res - The result of a parsing.
        See Also:
        clearParserNoticeHighlights()
      • changedUpdate

        public void changedUpdate​(javax.swing.event.DocumentEvent e)
        Called when the document is modified.
        Specified by:
        changedUpdate in interface javax.swing.event.DocumentListener
        Parameters:
        e - The document event.
      • clearParserNoticeHighlights

        private void clearParserNoticeHighlights()
      • clearParserNoticeHighlights

        private void clearParserNoticeHighlights​(Parser parser)
        Removes all parser notice highlights for a specific parser.
        Parameters:
        parser - The parser whose highlights to remove.
      • clearParsers

        public void clearParsers()
        Removes all parsers and any highlights they have created.
        See Also:
        addParser(Parser)
      • forceReparsing

        public void forceReparsing​(int parser)
        Forces the given Parser to reparse the content of this text area.

        This method can be useful when a Parser can be configured as to what notices it returns. For example, if a Java language parser can be configured to set whether no serialVersionUID is a warning, error, or ignored, this method can be called after changing the expected notice type to have the document reparsed.

        Parameters:
        parser - The index of the Parser to re-run.
        See Also:
        getParser(int)
      • getDelay

        public int getDelay()
        Returns the delay between the last "concurrent" edit and when the document is reparsed.
        Returns:
        The delay, in milliseconds.
        See Also:
        setDelay(int)
      • getParserCount

        public int getParserCount()
        Returns the number of registered parsers.
        Returns:
        The number of registered parsers.
      • getParserNotices

        public java.util.List<ParserNotice> getParserNotices()
        Returns a list of the current parser notices for this text area. This method (like most Swing methods) should only be called on the EDT.
        Returns:
        The list of notices. This will be an empty list if there are none.
      • getToolTipText

        public ToolTipInfo getToolTipText​(java.awt.event.MouseEvent e)
        Returns the tool tip to display for a mouse event at the given location. This method is overridden to give a registered parser a chance to display a tool tip (such as an error description when the mouse is over an error highlight).
        Parameters:
        e - The mouse event.
        Returns:
        The tool tip to display, and possibly a hyperlink event handler.
      • handleDocumentEvent

        public void handleDocumentEvent​(javax.swing.event.DocumentEvent e)
        Called when the document is modified.
        Parameters:
        e - The document event.
      • hyperlinkUpdate

        public void hyperlinkUpdate​(javax.swing.event.HyperlinkEvent e)
        Called when the user clicks a hyperlink in a FocusableTip.
        Specified by:
        hyperlinkUpdate in interface javax.swing.event.HyperlinkListener
        Parameters:
        e - The event.
      • insertUpdate

        public void insertUpdate​(javax.swing.event.DocumentEvent e)
        Called when the document is modified.
        Specified by:
        insertUpdate in interface javax.swing.event.DocumentListener
        Parameters:
        e - The document event.
      • noticeContainsPosition

        private boolean noticeContainsPosition​(ParserNotice notice,
                                               int offs)
        Returns whether a parser notice contains the specified offset.
        Parameters:
        notice - The notice.
        offs - The offset.
        Returns:
        Whether the notice contains the offset.
      • noticeContainsPointInView

        private boolean noticeContainsPointInView​(ParserNotice notice,
                                                  java.awt.Point p)
        Since viewToModel() returns the closest model position, and the position doesn't necessarily contain the point passed in as an argument, this method checks whether the point is indeed contained in the view rectangle for the specified offset.
        Parameters:
        notice - The parser notice.
        p - The point possibly contained in the view range of the parser notice.
        Returns:
        Whether the parser notice actually contains the specified point in the view.
      • propertyChange

        public void propertyChange​(java.beans.PropertyChangeEvent e)
        Called when a property we're interested in changes.
        Specified by:
        propertyChange in interface java.beans.PropertyChangeListener
        Parameters:
        e - The property change event.
      • removeParser

        public boolean removeParser​(Parser parser)
        Removes a parser.
        Parameters:
        parser - The parser to remove.
        Returns:
        Whether the parser was found.
        See Also:
        addParser(Parser), getParser(int)
      • removeParserNotices

        private void removeParserNotices​(Parser parser)
        Removes all parser notices (and clears highlights in the editor) from a particular parser.
        Parameters:
        parser - The parser.
      • removeParserNotices

        private void removeParserNotices​(ParseResult res)
        Removes any currently stored notices (and the corresponding highlights from the editor) from the same Parser, and in the given line range, as in the results.
        Parameters:
        res - The results.
      • removeUpdate

        public void removeUpdate​(javax.swing.event.DocumentEvent e)
        Called when the document is modified.
        Specified by:
        removeUpdate in interface javax.swing.event.DocumentListener
        Parameters:
        e - The document event.
      • restartParsing

        public void restartParsing()
        Restarts parsing the document.
        See Also:
        stopParsing()
      • setDelay

        public void setDelay​(int millis)
        Sets the delay between the last "concurrent" edit and when the document is reparsed.
        Parameters:
        millis - The new delay, in milliseconds. This must be greater than 0.
        See Also:
        getDelay()
      • shouldRemoveNotice

        private boolean shouldRemoveNotice​(ParserNotice notice,
                                           ParseResult res)
        Returns whether a parser notice should be removed, based on a parse result.
        Parameters:
        notice - The notice in question.
        res - The result.
        Returns:
        Whether the notice should be removed.
      • stopParsing

        public void stopParsing()
        Stops parsing the document.
        See Also:
        restartParsing()