]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/errors/Locations.java
Merge "Testing SonarQube with Simantics Platform SDK"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / errors / Locations.java
1 package org.simantics.scl.compiler.errors;\r
2 \r
3 public class Locations {\r
4 \r
5     public static final long NO_LOCATION = 0x7fffffff80000000L;\r
6     \r
7     public static long location(int begin, int end) {\r
8         return (((long)begin) << 32) | (((long)end) );\r
9     }\r
10     \r
11     public static int beginOf(long location) {\r
12         return (int)(location >>> 32);\r
13     }\r
14     \r
15     public static int endOf(long location) {\r
16         return (int)location;\r
17     }\r
18     \r
19     public static int length(long location) {\r
20         return endOf(location) - beginOf(location);\r
21     }\r
22 \r
23     \r
24     public static long combine(long a, long b) {\r
25         return location(Math.min(beginOf(a), beginOf(b)), Math.max(endOf(a), endOf(b)));\r
26     }\r
27     \r
28     public static int compare(long a, long b) {\r
29         if(a < b) \r
30             return -1;\r
31         if(a > b) \r
32             return 1;\r
33         return 0;\r
34     }\r
35 \r
36     public static String annotatate(String annotationBegin, String annotationEnd, String formula, long location) {\r
37         if(location == NO_LOCATION)\r
38             return annotationBegin + formula + annotationEnd;\r
39         int begin = beginOf(location);\r
40         int end = endOf(location);\r
41         return formula.substring(0, begin) + annotationBegin + formula.substring(begin, end) + annotationEnd + formula.substring(end);\r
42     }\r
43 }\r