CompilerArgumentsSerializerV5.serializeTo: fix NPE

NPE was happening on `?.takeIf { it.get(arguments) != it.get(newInstance) }` line.
It was happening because `it.get` could return `null`.

But the problem was only reproducible on TeamCity and not reproducible locally.

Test example (IJ repo): `org.jetbrains.kotlin.idea.fir.completion.HighLevelJvmBasicCompletionTestGenerated$Common$FromSmart.testArrayLiteralAnnotationConstructorAsDefaultValueForArray`
stacktrace:
```
java.lang.NullPointerException
  at org.jetbrains.kotlin.arguments.CompilerArgumentsSerializerV5.serializeTo(CompilerArgumentsSerializer.kt:23)
  at org.jetbrains.kotlin.config.FacetSerializationKt.writeLatestConfig(facetSerialization.kt:379)
  at org.jetbrains.kotlin.config.FacetSerializationKt.serializeFacetSettings(facetSerialization.kt:422)
  at org.jetbrains.kotlin.idea.facet.KotlinFacetConfigurationImpl.writeExternal(KotlinFacetConfigurationImpl.kt:24)
```
This commit is contained in:
Nikita Bobko
2022-01-12 19:25:00 +01:00
parent a4123a6be9
commit 47ed6dcfb4
@@ -19,7 +19,7 @@ class CompilerArgumentsSerializerV5<T : CommonToolArguments>(override val argume
val newInstance = arguments::class.java.getConstructor().newInstance()
val flagArgumentsByName = CompilerArgumentsContentProspector.getFlagCompilerArgumentProperties(arguments::class)
.mapNotNull { prop ->
prop.safeAs<KProperty1<T, Boolean>>()
prop.safeAs<KProperty1<T, Boolean?>>()
?.takeIf { it.get(arguments) != it.get(newInstance) }
?.get(arguments)
?.let { prop.name to it }