Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a9e93e5

Browse files
committed
C#: Fix GenericType locations in jump-to-definition
1 parent 64b584b commit a9e93e5

2 files changed

Lines changed: 29 additions & 10 deletions

File tree

csharp/ql/src/definitions.qll

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,25 @@ private class TypeMentionUse extends Use, TypeMention {
151151
)
152152
}
153153

154+
override predicate hasLocationInfo(
155+
string filepath, int startline, int startcolumn, int endline, int endcolumn
156+
) {
157+
this.getType() instanceof ConstructedType and
158+
Use.super.hasLocationInfo(filepath, startline, startcolumn, endline, _) and
159+
endcolumn =
160+
startcolumn +
161+
this.getType().(ConstructedType).getUnboundGeneric().getNameWithoutBrackets().length() - 1
162+
or
163+
this.getType() instanceof UnboundGenericType and
164+
Use.super.hasLocationInfo(filepath, startline, startcolumn, endline, _) and
165+
endcolumn =
166+
startcolumn + this.getType().(UnboundGenericType).getNameWithoutBrackets().length() - 1
167+
or
168+
not this.getType() instanceof ConstructedType and
169+
not this.getType() instanceof UnboundGenericType and
170+
Use.super.hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn)
171+
}
172+
154173
override Type getDefinition() { result = this.getType().getSourceDeclaration() }
155174

156175
override string getUseType() {

csharp/ql/test/library-tests/definitions/definitions.expected

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,10 @@
5353
| definitions.cs:114:28:114:28 | T | definitions.cs:114:17:114:17 | T | T |
5454
| definitions.cs:114:32:114:32 | A | definitions.cs:97:11:97:11 | A | T |
5555
| definitions.cs:117:27:117:27 | T | definitions.cs:117:18:117:18 | T | T |
56-
| definitions.cs:119:20:119:29 | I2<Object> | definitions.cs:117:15:117:19 | I2<> | T |
56+
| definitions.cs:119:20:119:21 | I2<Object> | definitions.cs:117:15:117:19 | I2<> | T |
5757
| definitions.cs:121:18:121:18 | A | definitions.cs:97:11:97:11 | A | T |
5858
| definitions.cs:121:21:121:22 | I1 | definitions.cs:112:15:112:16 | I1 | T |
59-
| definitions.cs:121:25:121:29 | I2<A> | definitions.cs:117:15:117:19 | I2<> | T |
59+
| definitions.cs:121:25:121:26 | I2<A> | definitions.cs:117:15:117:19 | I2<> | T |
6060
| definitions.cs:121:28:121:28 | A | definitions.cs:97:11:97:11 | A | T |
6161
| definitions.cs:121:37:121:37 | T | definitions.cs:121:13:121:13 | T | T |
6262
| definitions.cs:121:41:121:41 | A | definitions.cs:97:11:97:11 | A | T |
@@ -66,12 +66,12 @@
6666
| definitions.cs:130:24:130:25 | I3 | definitions.cs:119:15:119:16 | I3 | T |
6767
| definitions.cs:130:33:130:34 | T2 | definitions.cs:130:18:130:19 | T2 | T |
6868
| definitions.cs:132:10:132:11 | I1 | definitions.cs:112:15:112:16 | I1 | T |
69-
| definitions.cs:132:14:132:17 | B<A> | definitions.cs:121:11:121:14 | B<> | T |
69+
| definitions.cs:132:14:132:14 | B<A> | definitions.cs:121:11:121:14 | B<> | T |
7070
| definitions.cs:132:16:132:16 | A | definitions.cs:97:11:97:11 | A | T |
71-
| definitions.cs:134:9:134:12 | B<A> | definitions.cs:121:11:121:14 | B<> | T |
71+
| definitions.cs:134:9:134:9 | B<A> | definitions.cs:121:11:121:14 | B<> | T |
7272
| definitions.cs:134:11:134:11 | A | definitions.cs:97:11:97:11 | A | T |
7373
| definitions.cs:134:19:134:19 | A | definitions.cs:97:11:97:11 | A | T |
74-
| definitions.cs:134:47:134:50 | B<A> | definitions.cs:121:11:121:14 | B<> | T |
74+
| definitions.cs:134:47:134:47 | B<A> | definitions.cs:121:11:121:14 | B<> | T |
7575
| definitions.cs:134:49:134:49 | A | definitions.cs:97:11:97:11 | A | T |
7676
| definitions.cs:140:9:140:9 | E | definitions.cs:139:14:139:14 | E | T |
7777
| definitions.cs:140:52:140:52 | E | definitions.cs:139:14:139:14 | E | T |
@@ -94,15 +94,15 @@
9494
| definitions.cs:156:22:156:33 | EventHandler | definitions.cs:99:30:99:41 | EventHandler | T |
9595
| definitions.cs:156:55:156:56 | S1 | definitions.cs:78:12:78:13 | S1 | T |
9696
| definitions.cs:156:62:156:63 | S1 | definitions.cs:78:12:78:13 | S1 | M |
97-
| definitions.cs:160:27:160:35 | Nested<> | definitions.cs:158:22:158:30 | Nested<> | T |
97+
| definitions.cs:160:27:160:32 | Nested<> | definitions.cs:158:22:158:30 | Nested<> | T |
9898
| definitions.cs:160:34:160:34 | T | definitions.cs:158:29:158:29 | T | T |
99-
| definitions.cs:160:59:160:67 | Nested<> | definitions.cs:158:22:158:30 | Nested<> | M |
99+
| definitions.cs:160:59:160:64 | Nested<> | definitions.cs:158:22:158:30 | Nested<> | M |
100100
| definitions.cs:160:66:160:66 | T | definitions.cs:158:29:158:29 | T | T |
101101
| definitions.cs:166:12:166:13 | C4 | definitions.cs:151:11:151:12 | C4 | T |
102-
| definitions.cs:166:15:166:24 | Nested<I4> | definitions.cs:158:22:158:30 | Nested<> | T |
102+
| definitions.cs:166:15:166:20 | Nested<I4> | definitions.cs:158:22:158:30 | Nested<> | T |
103103
| definitions.cs:166:22:166:23 | I4 | definitions.cs:143:15:143:16 | I4 | T |
104104
| definitions.cs:166:30:166:31 | C4 | definitions.cs:151:11:151:12 | C4 | T |
105-
| definitions.cs:166:33:166:42 | Nested<I4> | definitions.cs:158:22:158:30 | Nested<> | T |
105+
| definitions.cs:166:33:166:38 | Nested<I4> | definitions.cs:158:22:158:30 | Nested<> | T |
106106
| definitions.cs:166:40:166:41 | I4 | definitions.cs:143:15:143:16 | I4 | T |
107107
| definitions.cs:166:44:166:49 | call to method Create | definitions.cs:160:37:160:42 | Create | M |
108108
| definitions.cs:167:9:167:10 | C1 | definitions.cs:18:11:18:12 | C1 | T |
@@ -120,7 +120,7 @@
120120
| definitions.cs:174:19:174:27 | access to property property1 | definitions.cs:24:20:24:28 | property1 | M |
121121
| definitions.cs:175:24:175:25 | access to local variable c5 | definitions.cs:173:17:173:18 | c5 | V |
122122
| definitions.cs:175:33:175:34 | C4 | definitions.cs:151:11:151:12 | C4 | T |
123-
| definitions.cs:175:36:175:45 | Nested<I4> | definitions.cs:158:22:158:30 | Nested<> | T |
123+
| definitions.cs:175:36:175:41 | Nested<I4> | definitions.cs:158:22:158:30 | Nested<> | T |
124124
| definitions.cs:175:43:175:44 | I4 | definitions.cs:143:15:143:16 | I4 | T |
125125
| definitions.cs:181:41:181:42 | C5 | definitions.cs:164:11:164:12 | C5 | T |
126126
| definitions.cs:181:45:181:46 | MyAttribute | definitions.cs:194:11:194:21 | MyAttribute | T |

0 commit comments

Comments
 (0)