Kotlin: Exclude constructs in serialization constructors from java/evaluation-to-constant

This commit is contained in:
Tamas Vajk
2022-10-19 11:43:01 +02:00
parent 30fc6acb19
commit 78c23c2657
3 changed files with 22 additions and 5 deletions

View File

@@ -3,6 +3,7 @@ import semmle.code.java.deadcode.DeadEnumConstant
import semmle.code.java.deadcode.DeadCodeCustomizations
import semmle.code.java.deadcode.DeadField
import semmle.code.java.deadcode.EntryPoints
private import semmle.code.java.frameworks.kotlin.Serialization
/**
* Holds if the given callable has any liveness causes.
@@ -309,10 +310,7 @@ class RootdefCallable extends Callable {
this.isCompilerGenerated()
or
// Exclude Kotlin serialization constructors.
this.(Constructor)
.getParameterType(this.getNumberOfParameters() - 1)
.(RefType)
.hasQualifiedName("kotlinx.serialization.internal", "SerializationConstructorMarker")
this instanceof SerializationConstructor
}
}

View File

@@ -0,0 +1,16 @@
/**
* Provides classes and predicates for working with thi `kotlinx.serialization` plugin.
*/
import java
/**
* A constructor with a `SerializationConstructorMarker` parameter.
*/
class SerializationConstructor extends Constructor {
SerializationConstructor() {
this.getParameterType(this.getNumberOfParameters() - 1)
.(RefType)
.hasQualifiedName("kotlinx.serialization.internal", "SerializationConstructorMarker")
}
}