improve the join order of getAClassReference

This commit is contained in:
Erik Krogh Kristensen
2022-03-24 16:30:52 +01:00
parent 8d21c8b7c5
commit be6c122b27

View File

@@ -786,6 +786,8 @@ class MemberKind extends string {
predicate isAccessor() { this = MemberKind::accessor() }
}
private import internal.StepSummary
module MemberKind {
/** Gets the kind of a method, such as `m() {}` */
MemberKind method() { result = "method" }
@@ -960,7 +962,16 @@ class ClassNode extends DataFlow::SourceNode instanceof ClassNode::Range {
result.getAstNode().getFile() = this.getAstNode().getFile()
)
or
exists(DataFlow::TypeTracker t2 | result = this.getAClassReference(t2).track(t2, t))
result = getAClassReferenceStep(t)
}
pragma[noopt]
private DataFlow::SourceNode getAClassReferenceStep(DataFlow::TypeTracker t) {
exists(DataFlow::TypeTracker t2, StepSummary summary, DataFlow::SourceNode prev |
prev = this.getAClassReference(t2) and
StepSummary::step(prev, result, summary) and
t2 = t.append(summary)
)
}
/**