Skip to content

Commit 9cc7424

Browse files
committed
C#: Simplify TypeMentions in PrintAST
1 parent c2e8d3f commit 9cc7424

1 file changed

Lines changed: 16 additions & 13 deletions

File tree

csharp/ql/src/semmle/code/csharp/PrintAst.qll

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,15 @@ abstract class TypeMentionNode extends PrintAstNode {
260260
*/
261261
final TypeMention getTypeMention() { result = typeMention }
262262

263+
/**
264+
* Gets the `Element` targetted by the `TypeMention`.
265+
*/
266+
final Element getTarget() { result = typeMention.getTarget() }
267+
263268
override NestedTypeMentionNode getChild(int childIndex) {
264269
result.getTypeMention() =
265270
rank[childIndex](TypeMention t, Location l |
266-
t = any(TypeMention tm | tm.getParent() = typeMention) and
271+
t.getParent() = typeMention and
267272
l = t.getLocation()
268273
|
269274
t order by l.getFile().toString(), l.getStartLine(), l.getStartColumn()
@@ -316,7 +321,7 @@ class ControlFlowElementNode extends ElementNode {
316321
or
317322
not exists(controlFlowElement.getAChild()) and childIndex = 0
318323
) and
319-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = controlFlowElement
324+
result.(TopLevelTypeMentionNode).getTarget() = controlFlowElement
320325
or
321326
result.(ElementNode).getElement() = controlFlowElement.getChild(childIndex)
322327
}
@@ -348,7 +353,7 @@ final class AssignmentNode extends ControlFlowElementNode {
348353

349354
override PrintAstNode getChild(int childIndex) {
350355
childIndex = -1 and
351-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = controlFlowElement
356+
result.(TopLevelTypeMentionNode).getTarget() = controlFlowElement
352357
or
353358
childIndex = 0 and
354359
result.(ElementNode).getElement() = assignment.getLValue()
@@ -389,7 +394,7 @@ final class CallableNode extends ElementNode {
389394

390395
override PrintAstNode getChild(int childIndex) {
391396
childIndex = -1 and
392-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = callable
397+
result.(TopLevelTypeMentionNode).getTarget() = callable
393398
or
394399
childIndex = 0 and
395400
result.(AttributesNode).getAttributable() = callable
@@ -421,7 +426,7 @@ final class DeclarationWithAccessorsNode extends ElementNode {
421426

422427
override PrintAstNode getChild(int childIndex) {
423428
childIndex = -1 and
424-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = declaration
429+
result.(TopLevelTypeMentionNode).getTarget() = declaration
425430
or
426431
childIndex = 0 and
427432
result.(AttributesNode).getAttributable() = declaration
@@ -457,7 +462,7 @@ final class FieldNode extends ElementNode {
457462

458463
override PrintAstNode getChild(int childIndex) {
459464
childIndex = -1 and
460-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = field
465+
result.(TopLevelTypeMentionNode).getTarget() = field
461466
or
462467
childIndex = 0 and
463468
result.(AttributesNode).getAttributable() = field
@@ -499,7 +504,7 @@ final class ParameterNode extends ElementNode {
499504

500505
override PrintAstNode getChild(int childIndex) {
501506
childIndex = -1 and
502-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = param
507+
result.(TopLevelTypeMentionNode).getTarget() = param
503508
or
504509
childIndex = 0 and
505510
result.(AttributesNode).getAttributable() = param
@@ -526,7 +531,7 @@ final class AttributeNode extends ElementNode {
526531
or
527532
not exists(attr.getAChild()) and childIndex = 0
528533
) and
529-
result.(TopLevelTypeMentionNode).getTypeMention().getTarget() = attr
534+
result.(TopLevelTypeMentionNode).getTarget() = attr
530535
or
531536
result.(ElementNode).getElement() = attr.getChild(childIndex)
532537
}
@@ -693,14 +698,12 @@ final class BaseTypesNode extends PrintAstNode, TBaseTypesNode {
693698
override TopLevelTypeMentionNode getChild(int childIndex) {
694699
childIndex = 0 and
695700
result.getTypeMention().getType() = valueOrRefType.getBaseClass() and
696-
result.getTypeMention().getTarget() = valueOrRefType
701+
result.getTarget() = valueOrRefType
697702
or
698703
result.getTypeMention() =
699704
rank[childIndex](TypeMention t, Location l |
700-
t =
701-
any(TypeMention tm |
702-
tm.getType() = valueOrRefType.getABaseInterface() and tm.getTarget() = valueOrRefType
703-
) and
705+
t.getType() = valueOrRefType.getABaseInterface() and
706+
t.getTarget() = valueOrRefType and
704707
l = t.getLocation()
705708
|
706709
t order by l.getFile().toString(), l.getStartLine(), l.getStartColumn()

0 commit comments

Comments
 (0)