]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/completions/PrefixUtil.java
New SCL completion implementation
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / completions / PrefixUtil.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/completions/PrefixUtil.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/completions/PrefixUtil.java
new file mode 100644 (file)
index 0000000..a4ce9ad
--- /dev/null
@@ -0,0 +1,37 @@
+package org.simantics.scl.compiler.completions;
+
+public class PrefixUtil {
+    public static String findPrefix(String sourceText, int end) {
+        int position;
+        for(position=end-1;position >= 0 && isPrefixChar(sourceText.charAt(position));--position);
+        ++position;
+        while(position < end && !isPrefixStart(sourceText.charAt(position)))
+            ++position;
+        return sourceText.substring(position, end);
+    }
+
+    private static boolean isPrefixStart(char c) {
+        return Character.isJavaIdentifierStart(c);
+    }
+
+    private static boolean isPrefixChar(char c) {
+        return Character.isJavaIdentifierPart(c) || c=='.';
+    }
+    
+    public static String[] splitPrefix(String prefix) {
+        int partCount = 1;
+        for(int i=0;i<prefix.length();++i)
+            if(prefix.charAt(i) == '.')
+                ++partCount;
+        String[] result = new String[partCount];
+        int partId = 0;
+        int begin = 0;
+        for(int i=0;i<prefix.length();++i)
+            if(prefix.charAt(i) == '.') {
+                result[partId++] = prefix.substring(begin, i);
+                begin = i+1;
+            }
+        result[partId] = prefix.substring(begin);
+        return result;
+    }
+}