Skip to content

Commit c2f0c01

Browse files
committed
PS: Create a common subclass for non-member and member functions.
1 parent 04f8010 commit c2f0c01

File tree

4 files changed

+70
-52
lines changed

4 files changed

+70
-52
lines changed

powershell/ql/lib/powershell.qll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ import semmle.code.powershell.UsingStmt
4747
import semmle.code.powershell.Type
4848
import semmle.code.powershell.Member
4949
import semmle.code.powershell.PropertyMember
50-
import semmle.code.powershell.FunctionMember
50+
import semmle.code.powershell.Function
5151
import semmle.code.powershell.TryStmt
5252
import semmle.code.powershell.IfStmt
5353
import semmle.code.powershell.ExitStmt
@@ -65,6 +65,5 @@ import semmle.code.powershell.ParenExpression
6565
import semmle.code.powershell.Chainable
6666
import semmle.code.powershell.Pipeline
6767
import semmle.code.powershell.StringConstantExpression
68-
import semmle.code.powershell.FunctionDefinition
6968
import semmle.code.powershell.InvokeMemberExpression
7069
import semmle.code.powershell.CommentEntity
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
import powershell
2+
3+
abstract private class AbstractFunction extends Ast {
4+
abstract string getName();
5+
6+
abstract ScriptBlock getBody();
7+
8+
abstract Parameter getFunctionParameter(int i);
9+
10+
final Parameter getAFunctionParameter() { result = this.getFunctionParameter(_) }
11+
12+
final int getNumberOfFunctionParameters() { result = count(this.getAFunctionParameter()) }
13+
14+
final int getNumberOfParameters() { result = count(this.getAParameter()) }
15+
16+
final Parameter getParameter(int i) {
17+
result = this.getFunctionParameter(i)
18+
or
19+
result = this.getBody().getParamBlock().getParameter(i)
20+
}
21+
22+
final Parameter getAParameter() { result = this.getParameter(_) }
23+
}
24+
25+
class NonMemberFunction extends @function_definition, Stmt, AbstractFunction {
26+
override string toString() { result = this.getName() }
27+
28+
override SourceLocation getLocation() { function_definition_location(this, result) }
29+
30+
override string getName() { function_definition(this, _, result, _, _) }
31+
32+
override ScriptBlock getBody() { function_definition(this, result, _, _, _) }
33+
34+
predicate isFilter() { function_definition(this, _, _, true, _) }
35+
36+
predicate isWorkflow() { function_definition(this, _, _, _, true) }
37+
38+
override Parameter getFunctionParameter(int i) { function_definition_parameter(this, i, result) }
39+
}
40+
41+
class MemberFunction extends @function_member, Member, AbstractFunction {
42+
override string getName() { function_member(this, _, _, _, _, _, _, result, _) }
43+
44+
override SourceLocation getLocation() { function_member_location(this, result) }
45+
46+
override string toString() { result = this.getName() }
47+
48+
override ScriptBlock getBody() { function_member(this, result, _, _, _, _, _, _, _) }
49+
50+
override predicate isHidden() { function_member(this, _, _, true, _, _, _, _, _) }
51+
52+
override predicate isPrivate() { function_member(this, _, _, _, true, _, _, _, _) }
53+
54+
override predicate isPublic() { function_member(this, _, _, _, _, true, _, _, _) }
55+
56+
override predicate isStatic() { function_member(this, _, _, _, _, _, true, _, _) }
57+
58+
predicate isConstructor() { function_member(this, _, true, _, _, _, _, _, _) }
59+
60+
override Parameter getFunctionParameter(int i) { function_member_parameter(this, i, result) }
61+
62+
TypeConstraint getTypeConstraint() { function_member_return_type(this, result) }
63+
}
64+
65+
class Constructor extends MemberFunction {
66+
Constructor() { this.isConstructor() }
67+
}
68+
69+
final class Function = AbstractFunction;

powershell/ql/lib/semmle/code/powershell/FunctionDefinition.qll

Lines changed: 0 additions & 19 deletions
This file was deleted.

powershell/ql/lib/semmle/code/powershell/FunctionMember.qll

Lines changed: 0 additions & 31 deletions
This file was deleted.

0 commit comments

Comments
 (0)