Skip to content

Commit

Permalink
Merge pull request #14 from aafanasev/feature/mask-nulls
Browse files Browse the repository at this point in the history
Add an option to not mask null values
  • Loading branch information
aafanasev committed Jun 21, 2020
2 parents 2d29db5 + 60bc8ef commit 0d89695
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 8 deletions.
11 changes: 7 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,17 @@ dependencies {
// OR use your own
sekret {
// "■■■" by default
mask = "***"
// true by default
enabled = true
// "dev.afanasev.sekret.Secret" by default
annotations = ["com.sample.YourAnnotation"]
// true by default
maskNulls = false
// "■■■" by default
mask = "***"
// "dev.afanasev.sekret.Secret" by default
annotations = ["com.sample.YourAnnotation"]
}
```

Expand Down
2 changes: 1 addition & 1 deletion gradle-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ plugins {
kotlin("jvm")
kotlin("kapt")
`java-gradle-plugin`
id("com.gradle.plugin-publish") version "0.10.0"
id("com.gradle.plugin-publish") version "0.11.0"
}

dependencies {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin
import org.jetbrains.org.objectweb.asm.FieldVisitor
import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.org.objectweb.asm.MethodVisitor
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
Expand Down Expand Up @@ -56,14 +57,34 @@ class SekretClassBuilder(
return object : MethodVisitor(Opcodes.ASM5, original) {

private var replaceDescriptor: Boolean = false
private var appendLabel: Label? = null

override fun visitFieldInsn(opcode: Int, owner: String?, name: String?, descriptor: String?) {
if (opcode == Opcodes.GETFIELD && secretFields.contains(name)) {
replaceDescriptor = true

InstructionAdapter(this).apply {
pop()
visitLdcInsn(mask)
if (maskNulls) {
InstructionAdapter(this).apply {
pop()
visitLdcInsn(mask)
}
} else {
super.visitFieldInsn(opcode, owner, name, descriptor)

appendLabel = Label()
val ifNullLabel = Label()

InstructionAdapter(this).apply {
ifnull(ifNullLabel)

visitLabel(Label())
visitLdcInsn(mask)
goTo(appendLabel)

visitLabel(ifNullLabel)
visitLdcInsn("null")
goTo(appendLabel)
}
}
} else {
super.visitFieldInsn(opcode, owner, name, descriptor)
Expand All @@ -79,6 +100,11 @@ class SekretClassBuilder(
) {
replaceDescriptor = false

appendLabel?.let {
visitLabel(appendLabel)
appendLabel = null
}

APPEND_DESCRIPTOR
} else {
descriptor
Expand Down

0 comments on commit 0d89695

Please sign in to comment.