Skip to content

Commit 001ddda

Browse files
pyosudalov
authored andcommitted
IR/Android: place the cache field first
to avoid NPEs if it is used during instance initialization.
1 parent 55d1fdf commit 001ddda

File tree

2 files changed

+5
-2
lines changed
  • plugins/android-extensions/android-extensions-compiler

2 files changed

+5
-2
lines changed

plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,8 @@ private class AndroidIrTransformer(val extension: AndroidIrExtension, val plugin
201201
return super.visitClassNew(declaration)
202202

203203
if ((containerOptions.cache ?: extension.getGlobalCacheImpl(declaration)).hasCache) {
204-
declaration.declarations += declaration.getCacheField()
204+
// Place the field first so that it is initialized before any init blocks.
205+
declaration.declarations.add(0, declaration.getCacheField())
205206
declaration.declarations += declaration.getClearCacheFun()
206207
declaration.declarations += declaration.getCachedFindViewByIdFun()
207208
}

plugins/android-extensions/android-extensions-compiler/testData/codegen/android/singleFile/0.kt

+3-1
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,11 @@ class MyActivity(): Activity() {
3333
} as T?
3434
}
3535

36+
private val textViewString = textView1.toString()
37+
3638
public fun box(): String {
3739
val result = when {
38-
textView1.toString() == "TextView" && password.toString() == "EditText" && login.toString() == "Button" -> "OK"
40+
textViewString == "TextView" && password.toString() == "EditText" && login.toString() == "Button" -> "OK"
3941
else -> ""
4042
}
4143

0 commit comments

Comments
 (0)