Ian Lynagh
0e689a9d35
Kotlin: Avoid name clash
2022-05-10 19:51:18 +01:00
Tony Torralba
c4c254587e
Add StmtExpr flow
2022-05-10 19:51:18 +01:00
Chris Smowton
96f3ea460f
Make varargs extraction more Java-like:
...
* Extract varargs as if they are ordinary positional arguments
* Adapt the QL that distinguishes varargs from ordinary arguments to account for Kotlin's varargs which can occur in the middle of the arg list
* Add a test checking dataflow through varargs which doesn't work yet due to array-get and array-set not being extracted as IndexExprs
* Extract the special case arrayOf(*x) as a clone call, which is (equivalent to) the Java lowering of that operation
2022-05-10 19:51:17 +01:00
Chris Smowton
7dec3f4835
Use EqualityTest for either value or ref comparions, and ReferenceEqualityTest for strictly ref comparison.
2022-05-10 19:51:17 +01:00
Chris Smowton
f95effcf82
Always extract ValueEQ/NEExpr for Kotlin ==/!=
...
I introduce AnyEqualsExpr for either reference or value equality and AnyEqualityTest for the same concept including not-equals operators, and use them wherever the written QL clearly doesn't care about the difference between reference and value comparison, typically because it is concerned with testing against null or against a primitive constant.
2022-05-10 19:51:17 +01:00
Chris Smowton
a120fab9f7
Complete implementation of equality tests
...
- Create a new operator representing an infix value [in]equality test, equivalent to Objects.equals(lhs, rhs)
- Continue to use simple equality where it is clearly possible at the callsite
- Note that ieee754equals is the same as Java's == and != operators
2022-05-10 19:51:17 +01:00
Tony Torralba
6bd6097ed1
Add taint step for StringTemplateExpr
2022-05-10 19:51:16 +01:00
Tamas Vajk
d495badc1e
Rename companion object QL class
2022-05-10 19:51:16 +01:00
Tamas Vajk
b4beddf2f9
Introduce cast for <unsafe-coerce> calls
2022-05-10 19:51:15 +01:00
Ian Lynagh
8d754f5129
Kotlin: Fix bug in, and performance of, NullGuards::clearlyNotNullExpr
2022-05-10 19:51:15 +01:00
Ian Lynagh
76ca0b2776
Kotlin: Pull Kotlin type for localvars out into its own table
2022-05-10 19:51:15 +01:00
Ian Lynagh
7862229807
Kotlin: Pull Kotlin type for params out into its own table
2022-05-10 19:51:15 +01:00
Ian Lynagh
dc26abe341
Kotlin: Pull Kotlin type for methods/constrs out into their own tables
2022-05-10 19:51:15 +01:00
Ian Lynagh
ee008773dc
Kotlin: Pull Kotlin type for fields out into its own table
2022-05-10 19:51:15 +01:00
Ian Lynagh
86bf126ed8
Kotlin: Pull Kotlin type for expressions out into its own table
2022-05-10 19:51:15 +01:00
Tamas Vajk
cd5555a5dd
Extract companion objects from interfaces
2022-05-10 19:51:15 +01:00
Ian Lynagh
89eae2407b
Kotlin: Improve error handling
...
Each compilation, and each file within a cmopilation, now gets a
"result" indicating whether it had recoverable or non-recoverable
errors.
2022-05-10 19:51:15 +01:00
Ian Lynagh
6566f7b69f
Kotlin: Add types for the different kinds of casts that Kotlin has
...
We might want to unify some of these in future, but doing that
correctly is easier than splitting them up correctly, so I've given each
one its own QL class for now.
I am not familiar with many of the libraries/queries that use CastExpr.
I've briefly looked at them and updated them in a way that looks
superficially reasonable, but some of the uses will probably want to be
refined later.
2022-05-10 19:51:13 +01:00
Tamás Vajk
75e4b6c740
Fix typo in PrintAst.qll
2022-05-10 19:51:12 +01:00
Tamas Vajk
ef2795c88b
Add ktLocalFunction relation and tests for local and anonymous classes
2022-05-10 19:51:11 +01:00
Tamas Vajk
e5003e4032
Adjust PrintAST query to handle kotlin constructs
2022-05-10 19:51:11 +01:00
Ian Lynagh
fb90c70e2e
Kotlin: Extract visibility for properties
2022-05-10 19:51:11 +01:00
Ian Lynagh
5342b13cb6
Kotlin: Add class modifiers
2022-05-10 19:51:11 +01:00
Ian Lynagh
7c03ed99dc
Java/Kotlin: Add File.is{,Java,Kotlin}SourceFile()
2022-05-10 19:51:10 +01:00
Tamas Vajk
fa5c3f9159
Remove and replace @anonymousclassdeclstmt with @localtypedeclstmt
2022-05-10 19:51:10 +01:00
Tamas Vajk
7b58d01eff
Specify lambda method for big arity lambdas
2022-05-10 19:51:10 +01:00
Tamas Vajk
21af31f3ab
CFG changes for non-null operator + some tests
2022-05-10 19:51:08 +01:00
Tamás Vajk
04daa7f28f
Revert "Kotlin: Fix extraction of dispatch and extension receivers"
2022-05-10 19:51:08 +01:00
Ian Lynagh
75e22da096
Kotlin: Fix extraction of dispatch and extension receivers
...
It is possible for a call to have both, e.g. the `arg.ext()` call in:
class Class1 {
val y = 4
}
class Class2 (val arg:Class1) {
val x = 3
fun someFun() {
arg.ext();
}
fun Class1.ext() {
val z = x + y
}
}
2022-05-10 19:51:07 +01:00
Ian Lynagh
712d70248a
Kotlin: Add CFG for VarArgExpr
2022-05-10 19:51:07 +01:00
Ian Lynagh
8440bafc42
Kotlin: Add CFG for KtAnonymousClassDeclarationStmt
2022-05-10 19:51:07 +01:00
Ian Lynagh
5ae74949a0
Kotlin: Add CFG for ClassExpr
2022-05-10 19:51:07 +01:00
Ian Lynagh
2135a870d3
Kotlin: Fix CFG for StmtExpr
2022-05-10 19:51:06 +01:00
Ian Lynagh
2e5cf92f8a
Kotlin: Fix CFG for string templates
2022-05-10 19:51:06 +01:00
Ian Lynagh
7baefbb9e5
Kotlin: Add WhenBranch.getWhenExpr()
2022-05-10 19:51:06 +01:00
Tamas Vajk
716b87d200
Extract not-null expression
2022-05-10 19:51:06 +01:00
Tamas Vajk
afabe652c1
Add anonymous class declaration stmt
2022-05-10 19:51:05 +01:00
Ian Lynagh
e6e56238c5
Kotlin: Handle properties better
2022-05-10 19:51:03 +01:00
Chris Smowton
1b7e33b6e3
Remove Kotlin element and component type from arrays
...
Now that these are no longer required, array extraction can extract kt-types consistently with other parameterised classes.
2022-05-10 19:51:03 +01:00
Chris Smowton
805b54897e
KotlinType: accept non-class-or-interface Java types
2022-05-10 19:51:02 +01:00
Ian Lynagh
be75d30ee0
Kotlin: Add support for varargs
2022-05-10 19:51:01 +01:00
Ian Lynagh
bdaa3ce2b3
Kotlin: Add support for companion objects
2022-05-10 19:51:01 +01:00
Ian Lynagh
ceb1e57ddd
Kotlin: Add support for objects
2022-05-10 19:51:01 +01:00
Ian Lynagh
87b433142c
Kotlin: Add support for Kotlin type aliases
2022-05-10 19:51:01 +01:00
Ian Lynagh
e61ff60bf8
Kotlin: Add KotlinType to ExtensionMethod
2022-05-10 19:51:00 +01:00
Ian Lynagh
6cf0b755f0
Kotlin: Add KotlinType to localvars
2022-05-10 19:51:00 +01:00
Ian Lynagh
06a41b3923
Kotlin: Add KotlinTypes to arrays
2022-05-10 19:51:00 +01:00
Ian Lynagh
ba56517900
Kotlin: Add Variable.getKotlinType()
2022-05-10 19:51:00 +01:00
Ian Lynagh
ef22194eed
Kotlin: Add KotlinType to params
2022-05-10 19:51:00 +01:00
Ian Lynagh
0d5e471b96
Kotlin: Give methods and constructors a KotlinType
2022-05-10 19:51:00 +01:00