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:
@@ -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 }
|
||||
|
||||
Reference in New Issue
Block a user