mirror of
https://github.com/github/codeql.git
synced 2026-04-28 02:05:14 +02:00
Merge pull request #11904 from github/redsun82/swift-extension-protocols
Swift: extract `ExtensionDecl` protocols
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,3 @@
|
||||
description: Revert adding protocols of extensions
|
||||
compatibility: full
|
||||
extension_decl_protocols.rel: delete
|
||||
@@ -265,6 +265,7 @@ std::optional<codeql::SubscriptDecl> DeclTranslator::translateSubscriptDecl(
|
||||
codeql::ExtensionDecl DeclTranslator::translateExtensionDecl(const swift::ExtensionDecl& decl) {
|
||||
auto entry = createEntry(decl);
|
||||
entry.extended_type_decl = dispatcher.fetchLabel(decl.getExtendedNominal());
|
||||
entry.protocols = dispatcher.fetchRepeatedLabels(decl.getLocalProtocols());
|
||||
fillGenericContext(decl, entry);
|
||||
fillIterableDeclContext(decl, entry);
|
||||
return entry;
|
||||
|
||||
@@ -375,9 +375,9 @@ ql/lib/codeql/swift/generated/ErrorElement.qll 4b032abe8ffb71376a29c63e470a52943
|
||||
ql/lib/codeql/swift/generated/File.qll 61454459f5f1ae378bd4970ad1da4f39f3e696bac8a5eebdd162f131995c5316 3e6805f8858cd55dd0e0d0e5aeab923d6a55292dbf98b0029db1ae0208efe684
|
||||
ql/lib/codeql/swift/generated/Locatable.qll bdc98b9fb7788f44a4bf7e487ee5bd329473409950a8e9f116d61995615ad849 0b36b4fe45e2aa195e4bb70c50ea95f32f141b8e01e5f23466c6427dd9ab88fb
|
||||
ql/lib/codeql/swift/generated/Location.qll 851766e474cdfdfa67da42e0031fc42dd60196ff5edd39d82f08d3e32deb84c1 b29b2c37672f5acff15f1d3c5727d902f193e51122327b31bd27ec5f877bca3b
|
||||
ql/lib/codeql/swift/generated/ParentChild.qll f095bf6545c9408f47e630af4d3df9f6ede7c4167951476729e22b1e4f54b79b 80e186d0ee76757a0f86cdb77703c66a7e6e5c4f3602f5bbb75912865004ca46
|
||||
ql/lib/codeql/swift/generated/ParentChild.qll cae61c8f54bd23e0d1faf7e33403020dabed5d34e4ccc89c2bcedbb57c336e0b 80e186d0ee76757a0f86cdb77703c66a7e6e5c4f3602f5bbb75912865004ca46
|
||||
ql/lib/codeql/swift/generated/PureSynthConstructors.qll 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98 173c0dd59396a1de26fe870e3bc2766c46de689da2a4d8807cb62023bbce1a98
|
||||
ql/lib/codeql/swift/generated/Raw.qll 6c68d4d8b51f42a19994476cdf8129bf55b6908dbbc643383506d002bbadb6ba f312416ea50d751501a666c9dc070521055caa5ecc72e460b16ac4fe827a4b6a
|
||||
ql/lib/codeql/swift/generated/Raw.qll 112397ddf13db0b83177c940f6681d2d1cf5224b8931ed8cdaaee63f3e9ce731 fbdd886f151a31709dcb058c790bdb2d8c304ac4183cfd5ddafcd70637bcf5a3
|
||||
ql/lib/codeql/swift/generated/Synth.qll 6a9e6edcc43732b6cf947d88b9562a591a54c651aa8e4f94b8b6139ff3f84b63 a1f37bb361fed57104f8277c8f8b1962a0a54b1f80c2d676e71c40a91d3af529
|
||||
ql/lib/codeql/swift/generated/SynthConstructors.qll 62360813f1419e111732e42e209535a40644997009890d09e4cc70f3918fbf86 62360813f1419e111732e42e209535a40644997009890d09e4cc70f3918fbf86
|
||||
ql/lib/codeql/swift/generated/UnknownFile.qll 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6 0fcf9beb8de79440bcdfff4bb6ab3dd139bd273e6c32754e05e6a632651e85f6
|
||||
@@ -397,7 +397,7 @@ ql/lib/codeql/swift/generated/decl/DestructorDecl.qll 8767e3ddabdf05ea5ee99867e9
|
||||
ql/lib/codeql/swift/generated/decl/EnumCaseDecl.qll f71c9d96db8260462c34e5d2bd86dda9b977aeeda087c235b873128b63633b9c e12ff7c0173e3cf9e2b64de66d8a7f2246bc0b2cb721d25b813d7a922212b35a
|
||||
ql/lib/codeql/swift/generated/decl/EnumDecl.qll fa4490d511ee537751a4fab2478e65250ff3deba43c74db5341184c9ba25b534 fa4490d511ee537751a4fab2478e65250ff3deba43c74db5341184c9ba25b534
|
||||
ql/lib/codeql/swift/generated/decl/EnumElementDecl.qll 5ef4f6839f4f19f29fabd04b653e89484fa68a7e7ec94101a5201aa13d89e9eb 78006fa52b79248302db04348bc40f2f77edf101b6e429613f3089f70750fc11
|
||||
ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll c6c057adadf3682d5d9e58154eaf2a28f769f7df3c2e48f9d2f5bae017917e5f 8aa2d7f20f7452ec25d2a8e1e00a7d3f4465c9c3c21326bfb3fe416c6fe83057
|
||||
ql/lib/codeql/swift/generated/decl/ExtensionDecl.qll 47d0d221deeb2f91346e0fce0bba88ae25da6c2f5f3469f8a279e6de07867110 9596c9f34813e141c970e21a7c3d0987842002db97a3251608d29a1b774b5938
|
||||
ql/lib/codeql/swift/generated/decl/FuncDecl.qll 11ebe386dd06937c84fdb283a73be806763d939c163d3c0fd0c4c3eb1caeda41 6a5b6854818cb3d2bc76f0abdee4933ca839c182abd07fb4d271400f5267f6e2
|
||||
ql/lib/codeql/swift/generated/decl/GenericContext.qll 4c7bd7fd372c0c981b706de3a57988b92c65c8a0d83ea419066452244e6880de 332f8a65a6ae1cad4aa913f2d0a763d07393d68d81b61fb8ff9912b987c181bb
|
||||
ql/lib/codeql/swift/generated/decl/GenericTypeDecl.qll 71f5c9c6078567dda0a3ac17e2d2d590454776b2459267e31fed975724f84aec 669c5dbd8fad8daf007598e719ac0b2dbcb4f9fad698bffb6f1d0bcd2cee9102
|
||||
@@ -687,7 +687,10 @@ ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getBaseType.ql 4ace6176
|
||||
ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getGenericTypeParam.ql 3a0927f87a21d69bfc309f5f7faedb3d0cc2956c071b16c38b2b4acd36f24ea9 aafed56a1744579f05b3817adef6a5fd011d1b5cb7da2db230a43b6f55a04649
|
||||
ql/test/extractor-tests/generated/decl/EnumDecl/EnumDecl_getMember.ql 621870b7dbeaeefa93cbbfc102e97810b15d39b49db685019c9e3cbf2423ffef e110630f0ba8f588e7f8ebc56a1a31c2ca2f22f2cc763baa76854beb3b3a4ece
|
||||
ql/test/extractor-tests/generated/decl/EnumElementDecl/MISSING_SOURCE.txt 7e714762ffb48c436102027d560fb5addc1f7dc6dd6936b06e0d3cca031d67fd 7e714762ffb48c436102027d560fb5addc1f7dc6dd6936b06e0d3cca031d67fd
|
||||
ql/test/extractor-tests/generated/decl/ExtensionDecl/MISSING_SOURCE.txt 7e714762ffb48c436102027d560fb5addc1f7dc6dd6936b06e0d3cca031d67fd 7e714762ffb48c436102027d560fb5addc1f7dc6dd6936b06e0d3cca031d67fd
|
||||
ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl.ql 2c3f12c77bf052a8353c57a693584d3315d34624c3b02c43966dbba4b23ff486 5507c68c10cba000dcd204af9bc0d8ef8d0591f47326911a82c55273734432f9
|
||||
ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getGenericTypeParam.ql e8c9815756cd3d82abfb421b1e38d6381e48938a21f798fd9abd93686acc070b 2574ead6e511f41ba416e831e176ecdaac27dde410157a4ee472a680f922dd20
|
||||
ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getMember.ql 8d1c6a2b7cb381a81d11775f0d1cfb13ee04dd27dc742e00a72d676f21481dde 430e5b9ed7eccd90383e362ffa5e512704883304c711b13c9110a57ae282bb40
|
||||
ql/test/extractor-tests/generated/decl/ExtensionDecl/ExtensionDecl_getProtocol.ql 11fc53f70f6e7f29546337a9f06157baaecd9c7d1d392910e94d18b71a0a9ae2 3591d4ff4108bd3399cecdf444161d770c01af20c14f23afac167beead564998
|
||||
ql/test/extractor-tests/generated/decl/GenericTypeParamDecl/MISSING_SOURCE.txt 7e714762ffb48c436102027d560fb5addc1f7dc6dd6936b06e0d3cca031d67fd 7e714762ffb48c436102027d560fb5addc1f7dc6dd6936b06e0d3cca031d67fd
|
||||
ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl.ql 52e572682b381d6a3c4d38d2902c1fca3a371eec3859c49735fcab8eb5ae23c8 0b5fdf388f887c50ff333f662f6321851e923166ab5916bb07d1613452d495e1
|
||||
ql/test/extractor-tests/generated/decl/IfConfigDecl/IfConfigDecl_getActiveElement.ql 914165306a2eb5c8039750e1e03bda156a684946abc8709d786b4144d9c9eb3b 5e87dfd99858ae257506415369bff937a731b6309dac2242b03ea79ead045fc1
|
||||
|
||||
@@ -97,6 +97,8 @@ module Raw {
|
||||
override string toString() { result = "ExtensionDecl" }
|
||||
|
||||
NominalTypeDecl getExtendedTypeDecl() { extension_decls(this, result) }
|
||||
|
||||
ProtocolDecl getProtocol(int index) { extension_decl_protocols(this, index, result) }
|
||||
}
|
||||
|
||||
class IfConfigDecl extends @if_config_decl, Decl {
|
||||
|
||||
@@ -5,6 +5,7 @@ import codeql.swift.elements.decl.Decl
|
||||
import codeql.swift.elements.decl.GenericContext
|
||||
import codeql.swift.elements.decl.IterableDeclContext
|
||||
import codeql.swift.elements.decl.NominalTypeDecl
|
||||
import codeql.swift.elements.decl.ProtocolDecl
|
||||
|
||||
module Generated {
|
||||
class ExtensionDecl extends Synth::TExtensionDecl, GenericContext, IterableDeclContext, Decl {
|
||||
@@ -29,5 +30,33 @@ module Generated {
|
||||
final NominalTypeDecl getExtendedTypeDecl() {
|
||||
result = getImmediateExtendedTypeDecl().resolve()
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `index`th protocol of this extension declaration (0-based).
|
||||
*
|
||||
* This includes nodes from the "hidden" AST. It can be overridden in subclasses to change the
|
||||
* behavior of both the `Immediate` and non-`Immediate` versions.
|
||||
*/
|
||||
ProtocolDecl getImmediateProtocol(int index) {
|
||||
result =
|
||||
Synth::convertProtocolDeclFromRaw(Synth::convertExtensionDeclToRaw(this)
|
||||
.(Raw::ExtensionDecl)
|
||||
.getProtocol(index))
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the `index`th protocol of this extension declaration (0-based).
|
||||
*/
|
||||
final ProtocolDecl getProtocol(int index) { result = getImmediateProtocol(index).resolve() }
|
||||
|
||||
/**
|
||||
* Gets any of the protocols of this extension declaration.
|
||||
*/
|
||||
final ProtocolDecl getAProtocol() { result = getProtocol(_) }
|
||||
|
||||
/**
|
||||
* Gets the number of protocols of this extension declaration.
|
||||
*/
|
||||
final int getNumberOfProtocols() { result = count(int i | exists(getProtocol(i))) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -219,6 +219,13 @@ extension_decls( //dir=decl
|
||||
int extended_type_decl: @nominal_type_decl_or_none ref
|
||||
);
|
||||
|
||||
#keyset[id, index]
|
||||
extension_decl_protocols( //dir=decl
|
||||
int id: @extension_decl ref,
|
||||
int index: int ref,
|
||||
int protocol: @protocol_decl_or_none ref
|
||||
);
|
||||
|
||||
if_config_decls( //dir=decl
|
||||
unique int id: @if_config_decl
|
||||
);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,2 @@
|
||||
description: Add protocols of extensions
|
||||
compatibility: backwards
|
||||
@@ -0,0 +1,4 @@
|
||||
| extensions.swift:5:1:9:1 | extension | getModule: | file://:0:0:0:0 | extensions | getNumberOfGenericTypeParams: | 0 | getNumberOfMembers: | 3 | getExtendedTypeDecl: | extensions.swift:1:1:1:11 | S | getNumberOfProtocols: | 0 |
|
||||
| extensions.swift:11:1:15:1 | extension | getModule: | file://:0:0:0:0 | extensions | getNumberOfGenericTypeParams: | 0 | getNumberOfMembers: | 3 | getExtendedTypeDecl: | extensions.swift:3:1:3:10 | C | getNumberOfProtocols: | 0 |
|
||||
| extensions.swift:21:1:23:1 | extension | getModule: | file://:0:0:0:0 | extensions | getNumberOfGenericTypeParams: | 0 | getNumberOfMembers: | 1 | getExtendedTypeDecl: | extensions.swift:1:1:1:11 | S | getNumberOfProtocols: | 1 |
|
||||
| extensions.swift:27:1:29:1 | extension | getModule: | file://:0:0:0:0 | extensions | getNumberOfGenericTypeParams: | 0 | getNumberOfMembers: | 1 | getExtendedTypeDecl: | extensions.swift:3:1:3:10 | C | getNumberOfProtocols: | 2 |
|
||||
@@ -0,0 +1,18 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from
|
||||
ExtensionDecl x, ModuleDecl getModule, int getNumberOfGenericTypeParams, int getNumberOfMembers,
|
||||
NominalTypeDecl getExtendedTypeDecl, int getNumberOfProtocols
|
||||
where
|
||||
toBeTested(x) and
|
||||
not x.isUnknown() and
|
||||
getModule = x.getModule() and
|
||||
getNumberOfGenericTypeParams = x.getNumberOfGenericTypeParams() and
|
||||
getNumberOfMembers = x.getNumberOfMembers() and
|
||||
getExtendedTypeDecl = x.getExtendedTypeDecl() and
|
||||
getNumberOfProtocols = x.getNumberOfProtocols()
|
||||
select x, "getModule:", getModule, "getNumberOfGenericTypeParams:", getNumberOfGenericTypeParams,
|
||||
"getNumberOfMembers:", getNumberOfMembers, "getExtendedTypeDecl:", getExtendedTypeDecl,
|
||||
"getNumberOfProtocols:", getNumberOfProtocols
|
||||
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from ExtensionDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getGenericTypeParam(index)
|
||||
@@ -0,0 +1,8 @@
|
||||
| extensions.swift:5:1:9:1 | extension | 0 | extensions.swift:6:5:6:37 | var ... = ... |
|
||||
| extensions.swift:5:1:9:1 | extension | 1 | extensions.swift:6:9:6:9 | x |
|
||||
| extensions.swift:5:1:9:1 | extension | 2 | extensions.swift:8:5:8:17 | foo() |
|
||||
| extensions.swift:11:1:15:1 | extension | 0 | extensions.swift:12:5:12:38 | var ... = ... |
|
||||
| extensions.swift:11:1:15:1 | extension | 1 | extensions.swift:12:9:12:9 | y |
|
||||
| extensions.swift:11:1:15:1 | extension | 2 | extensions.swift:14:5:14:17 | bar() |
|
||||
| extensions.swift:21:1:23:1 | extension | 0 | extensions.swift:22:5:22:17 | baz() |
|
||||
| extensions.swift:27:1:29:1 | extension | 0 | extensions.swift:28:5:28:17 | baz() |
|
||||
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from ExtensionDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getMember(index)
|
||||
@@ -0,0 +1,3 @@
|
||||
| extensions.swift:21:1:23:1 | extension | 0 | extensions.swift:17:1:19:1 | P1 |
|
||||
| extensions.swift:27:1:29:1 | extension | 0 | extensions.swift:17:1:19:1 | P1 |
|
||||
| extensions.swift:27:1:29:1 | extension | 1 | extensions.swift:25:1:25:14 | P2 |
|
||||
@@ -0,0 +1,7 @@
|
||||
// generated by codegen/codegen.py
|
||||
import codeql.swift.elements
|
||||
import TestUtils
|
||||
|
||||
from ExtensionDecl x, int index
|
||||
where toBeTested(x) and not x.isUnknown()
|
||||
select x, index, x.getProtocol(index)
|
||||
@@ -1,4 +0,0 @@
|
||||
// generated by codegen/codegen.py
|
||||
|
||||
After a swift source file is added in this directory and codegen/codegen.py is run again, test queries
|
||||
will appear and this file will be deleted
|
||||
@@ -0,0 +1,29 @@
|
||||
struct S {}
|
||||
|
||||
class C {}
|
||||
|
||||
extension S {
|
||||
var x : Int { get { return 42 } }
|
||||
|
||||
func foo() {}
|
||||
}
|
||||
|
||||
extension C {
|
||||
var y : Int { get { return 404 } }
|
||||
|
||||
func bar() {}
|
||||
}
|
||||
|
||||
protocol P1 {
|
||||
func baz()
|
||||
}
|
||||
|
||||
extension S : P1 {
|
||||
func baz() {}
|
||||
}
|
||||
|
||||
protocol P2 {}
|
||||
|
||||
extension C : P1, P2 {
|
||||
func baz() {}
|
||||
}
|
||||
@@ -104,6 +104,7 @@ class EnumCaseDecl(Decl):
|
||||
|
||||
class ExtensionDecl(GenericContext, IterableDeclContext, Decl):
|
||||
extended_type_decl: "NominalTypeDecl"
|
||||
protocols: list["ProtocolDecl"]
|
||||
|
||||
class IfConfigDecl(Decl):
|
||||
active_elements: list[AstNode]
|
||||
|
||||
Reference in New Issue
Block a user