Merge pull request #15700 from geoffw0/extensions

Swift: Workaround for TypeDecl.getFullName issue.
This commit is contained in:
Geoffrey White
2024-02-27 11:14:33 +00:00
committed by GitHub
3 changed files with 10 additions and 5 deletions

View File

@@ -0,0 +1,4 @@
---
category: fix
---
* Fixed an issue where `TypeDecl.getFullName` would get stuck in an loop and fail when minor database inconsistencies are present.

View File

@@ -2,9 +2,10 @@ private import codeql.swift.generated.decl.ExtensionDecl
class ExtensionDecl extends Generated::ExtensionDecl {
override string toString() {
result = "extension of " + this.getExtendedTypeDecl().toString()
result =
"extension of " + unique(NominalTypeDecl td | td = this.getExtendedTypeDecl()).toString()
or
not exists(this.getExtendedTypeDecl()) and
count(this.getExtendedTypeDecl()) != 1 and
result = "extension"
}
}

View File

@@ -109,13 +109,13 @@ class TypeDecl extends Generated::TypeDecl {
cached
string getFullName() {
not this.getEnclosingDecl() instanceof TypeDecl and
not this.getEnclosingDecl() instanceof ExtensionDecl and
not count(this.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl()) = 1 and
result = this.getName()
or
result = this.getEnclosingDecl().(TypeDecl).getFullName() + "." + this.getName()
or
result =
this.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl().getFullName() + "." +
this.getName()
unique(NominalTypeDecl td | td = this.getEnclosingDecl().(ExtensionDecl).getExtendedTypeDecl())
.getFullName() + "." + this.getName()
}
}