This is an automated email from the ASF dual-hosted git repository.

matthiasblaesing pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/master by this push:
     new 3d0065135c Improve performance of JS implementation of 
AlternativeLocationImpl
     new 191d64f4f6 Merge pull request #4313 from 
matthiasblaesing/js_goto_declaration
3d0065135c is described below

commit 3d0065135c1495c61451d655c956a11e921dfde2
Author: Matthias Bläsing <mblaes...@doppel-helix.eu>
AuthorDate: Thu Jun 30 19:18:55 2022 +0200

    Improve performance of JS implementation of AlternativeLocationImpl
    
    #getStringLocation reads the original file, but is called from the EDT,
    so invocations must be kept to a minimum. What is more the method is
    used by #compareTo and thus is potentially called often.
    
    Two optimisations are applied:
    
    - the result of #getStringLocation is cached and only calculated once
    - #compareTo was rewritten to use the relative path and offset directly.
      Before relative path and the line number was used to create an
      ordering, as offset and line number are related, switching for
      ordering shoud have no outside result
---
 .../editor/navigation/DeclarationFinderImpl.java          | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git 
a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/navigation/DeclarationFinderImpl.java
 
b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/navigation/DeclarationFinderImpl.java
index 2a1c13278b..332e40a61a 100644
--- 
a/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/navigation/DeclarationFinderImpl.java
+++ 
b/webcommon/javascript2.editor/src/org/netbeans/modules/javascript2/editor/navigation/DeclarationFinderImpl.java
@@ -398,6 +398,7 @@ public class DeclarationFinderImpl implements 
DeclarationFinder {
         private final int offset;
         private final DeclarationLocation location;
         private final IndexedElement element;
+        private String stringLocation;
 
         public AlternativeLocationImpl(IndexResult iResult) {
             this.iResult = iResult;
@@ -412,7 +413,10 @@ public class DeclarationFinderImpl implements 
DeclarationFinder {
             return element;
         }
 
-        private  String getStringLocation() {
+        private String getStringLocation() {
+            if(stringLocation != null) {
+                return stringLocation;
+            }
             int lineNumber = 0;
             int count = 0;
             List<String> asLines;
@@ -435,6 +439,7 @@ public class DeclarationFinderImpl implements 
DeclarationFinder {
             if (lineNumber > 0) {
                 result = result + " : " + lineNumber; //NOI18N
             }
+            stringLocation = result;
             return result;
         }
 
@@ -452,7 +457,13 @@ public class DeclarationFinderImpl implements 
DeclarationFinder {
         @Override
         public int compareTo(AlternativeLocation o) {
             AlternativeLocationImpl ali = (AlternativeLocationImpl)o;
-            return getStringLocation().compareTo(ali.getStringLocation());
+            String relPath1 = iResult.getRelativePath();
+            String relPath2 = ali.iResult.getRelativePath();
+            int comparison = relPath1.compareTo(relPath2);
+            if(comparison != 0) {
+                return comparison;
+            }
+            return offset - ali.offset;
         }
 
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org
For additional commands, e-mail: commits-h...@netbeans.apache.org

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to