• Login
Community
  • Login

Java function list: problems with "implements"

Scheduled Pinned Locked Moved Notepad++ & Plugin Development
function listjava implementsparsing
7 Posts 2 Posters 3.3k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G
    Geert Vancompernolle
    last edited by Feb 10, 2018, 12:08 PM

    When parsing a Java file that contains an implements with a subclass (separated by a dot), the function list does not get populated anymore.

    Example that works perfect:

    public class Graph extends SuperGraph implements IGraph {
        private static final String TAG = Graph.class.getSimpleName();
    

    Same example fails when adding dot-separated implements:

    public class Graph extends SuperGraph implements IGraph.ISubGraph {
        private static final String TAG = Graph.class.getSimpleName();
    

    Function list also fails when implements are on a different line, like so:

    Works fine:

    public class Graph extends SuperGraph implements IGraph, ITelephone {
        private static final String TAG = Graph.class.getSimpleName();
    

    Fails:

    public class Graph extends SuperGraph implements IGraph
        , ITelephone {
        private static final String TAG = Graph.class.getSimpleName();
    
    M 1 Reply Last reply Feb 10, 2018, 12:59 PM Reply Quote 0
    • M
      MAPJe71 @Geert Vancompernolle
      last edited by Feb 10, 2018, 12:59 PM

      @Geert-Vancompernolle your example classes don’t contain function/method definitions so it’s no surprice to me the function list tree is not populated.

      1 Reply Last reply Reply Quote 0
      • G
        Geert Vancompernolle
        last edited by Geert Vancompernolle Feb 11, 2018, 8:23 AM Feb 11, 2018, 8:21 AM

        @MAPJe71

        Obviously, those classes do contain methods. I just wanted to show both situations where the function list works/doesn’t work with as minimal as possible code. Overloading the issue with redundant information is not the way to show the pain points of an issue.

        Adding/not adding methods to those examples is totally irrelevant here. But OK, if you want a complete code example (compiles, but really doesn’t do anything useful), here it is (and I don’t want to be blamed of making this thread too long…):

        Situation where functionlist works fine:

        Graph.java source file without the dot in the implements section:

        package graph;
        
        public class Graph implements IGraph, ITelephone {
        
            public static void main(String[] args) {
                Graph myGraph = new Graph();
                myGraph.doStart();
            }
        
            private void doStart() {
            }
        
            @Override
            public void doDraw(String string) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doColour(int colour) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doRing(int number) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doAnswer(int number) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        }
        

        Situation where functionlist doesn’t work:

        Graph.java with the dot in the implements section:

        The last two methods in the code example below are from an internal interface, hence the presence of the dot in one of the implements section:

        package graph;
        
        public class Graph implements IGraph, IGraph.IGraphInternal, ITelephone {
        
            public static void main(String[] args) {
                Graph myGraph = new Graph();
                myGraph.doStart();
            }
        
            private void doStart() {
            }
        
            @Override
            public void doDraw(String string) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doColour(int colour) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doRing(int number) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doAnswer(int number) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        
            @Override
            public void doDetailedDrawing() {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doDetailedColouring() {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        }
        

        And here’s the two interface files (in case you want to compile the stuff):

        IGraph iface with its internal IGraphInternal iface:

        package graph;
        
        public interface IGraph {
            void doDraw(String string);
            void doColour(int colour);
        
            interface IGraphInternals {
                void doDetailedDrawing();
                void doDetailedColouring();
            }
        }
        

        ITelephone iface:

        package graph;
        
        public interface ITelephone {
            void doRing(int number);
            void doAnswer(int number);
        }
        

        And to be complete: if I put some of the interfaces of the implements section on a new line (with or without the presence of the dot, doesn’t matter), the functionlist also doesn’t work. Like so:

        Graph.java source file without the dot in the implements section but with the implements section spread over different lines:

        package graph;
        
        public class Graph implements IGraph
            , ITelephone {
        
            public static void main(String[] args) {
                Graph myGraph = new Graph();
                myGraph.doStart();
            }
        
            private void doStart() {
            }
        
            @Override
            public void doDraw(String string) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doColour(int colour) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doRing(int number) {
                throw new UnsupportedOperationException("Not supported yet."); 
            }
        
            @Override
            public void doAnswer(int number) {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        }
        

        Hope the above is sufficient now.

        If you have time, feel free to copy/paste the Graph.java file into NPP and see for yourself (with and without the dot in the implements part / with and without the implements section on same or separate lines).

        Would like to hear your judgement.

        M 1 Reply Last reply Feb 11, 2018, 1:26 PM Reply Quote 0
        • M
          MAPJe71 @Geert Vancompernolle
          last edited by Feb 11, 2018, 1:26 PM

          Overloading the issue with redundant information is not the way to show the pain points of an issue.

          True but providing enough information for someone else to be able to analyse/confirm the issue is.
          e.g.

          public class GraphIssue1 implements IGraph, IGraph.IGraphInternal, ITelephone {
              public static void main(String[] args) {
                  // method body        
              }
          }
          public class GraphIssue2 implements IGraph, IGraph
              , ITelephone {
              public static void main(String[] args) {
                  // method body        
              }
          }
          

          Nevertheless, I can’t reproduce the issue with the Java parser provided with Notepad++ as of version 7.5.2.0.
          Notes:

          1. make sure there is a newline after the closing curly brace of a class/interface definition.
          2. the interface definitions will not show up in the tree as they do not contain method definitions. AFAIK interfaces never do so that’s an issue i will have to look into.
          1 Reply Last reply Reply Quote 0
          • G
            Geert Vancompernolle
            last edited by Geert Vancompernolle Feb 18, 2018, 9:43 AM Feb 18, 2018, 9:41 AM

            @MAPJe71 - That is really weird. I’m even using NPP 7.5.4 and still have the issue with this version. I’ve compiled a video to show you the issue. Pls. check here: vimeo.com/256277404 .

            1 Reply Last reply Reply Quote 0
            • M
              MAPJe71
              last edited by Feb 18, 2018, 10:45 PM

              Your system might contain more than one functionList.xml and Notepad++ is using a different one than you’d expect or one of the plugins is interfering, try running N++ without plugins.

              G 1 Reply Last reply Feb 19, 2018, 6:37 PM Reply Quote 1
              • G
                Geert Vancompernolle @MAPJe71
                last edited by Feb 19, 2018, 6:37 PM

                @MAPJe71 said:

                Your system might contain more than one functionList.xml and Notepad++ is using a different one than you’d expect or one of the plugins is interfering, try running N++ without plugins.

                Well, you are absolutely right! There was another functionlist.xml file located in my roaming directory. I’ve kicked out that one and now all is working fine.

                Great catch, didn’t see it myself!

                1 Reply Last reply Reply Quote 0
                3 out of 7
                • First post
                  3/7
                  Last post
                The Community of users of the Notepad++ text editor.
                Powered by NodeBB | Contributors