From 09d0cdbaf8c4697f04cb05e59e2b9da305501889 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 27 May 2021 10:26:33 +0200 Subject: [PATCH] Add `ModuleMember::isPrivate()` --- ql/src/codeql_ql/ast/Ast.qll | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/ql/src/codeql_ql/ast/Ast.qll b/ql/src/codeql_ql/ast/Ast.qll index 60646043ba3..f47f950c600 100644 --- a/ql/src/codeql_ql/ast/Ast.qll +++ b/ql/src/codeql_ql/ast/Ast.qll @@ -51,7 +51,7 @@ class ClasslessPredicate extends TClasslessPredicate, Predicate, ModuleMember { ClasslessPredicate() { this = TClasslessPredicate(member, pred) } - predicate isPrivate() { + final override predicate isPrivate() { member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private" } @@ -185,6 +185,13 @@ class Module extends TModule, AstNode, ModuleMember { override string getAPrimaryQlClass() { result = "Module" } + final override predicate isPrivate() { + exists(Generated::ModuleMember member | + mod = member.getChild(_) and + member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private" + ) + } + /** * Gets the name of the module. */ @@ -203,6 +210,9 @@ class Module extends TModule, AstNode, ModuleMember { */ class ModuleMember extends TModuleMember, AstNode { override AstNode getParent() { result.(Module).getAMember() = this } + + /** Holds if this member is declared as `private`. */ + predicate isPrivate() { none() } } /** @@ -215,6 +225,13 @@ class Class extends TClass, AstNode, ModuleMember { override string getAPrimaryQlClass() { result = "Class" } + final override predicate isPrivate() { + exists(Generated::ModuleMember member | + cls = member.getChild(_) and + member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private" + ) + } + /** * Gets the name of the class. */ @@ -269,6 +286,13 @@ class NewType extends TNewType, ModuleMember { override string getAPrimaryQlClass() { result = "DataType" } + final override predicate isPrivate() { + exists(Generated::ModuleMember member | + type = member.getChild(_) and + member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private" + ) + } + NewTypeBranch getABranch() { toGenerated(result) = type.getChild().getChild(_) } } @@ -330,7 +354,13 @@ class Import extends TImport, ModuleMember { string getQualifiedName(int i) { result = imp.getChild(0).(Generated::ImportModuleExpr).getChild().getName(i).getValue() } - // TODO: private modifier. + + final override predicate isPrivate() { + exists(Generated::ModuleMember member | + imp = member.getChild(_) and + member.getAFieldOrChild().(Generated::Annotation).getName().getValue() = "private" + ) + } } /** A formula, such as `x = 6 and y < 5`. */