Import jsr305 and use it to mark @Nullable stuff. (#297)

This commit is contained in:
Jesse Wilson
2017-05-06 20:31:24 -04:00
committed by GitHub
parent dac5f695b3
commit c65b3bf1cb
26 changed files with 149 additions and 92 deletions

View File

@@ -95,7 +95,9 @@ internal class KotlinJsonAdapter<T>(
return result
}
override fun toJson(writer: JsonWriter, value: T) {
override fun toJson(writer: JsonWriter, value: T?) {
if (value == null) throw NullPointerException("value == null")
writer.beginObject()
for (binding in bindings) {
if (binding == null) continue // Skip constructor parameters that aren't properties.
@@ -202,6 +204,6 @@ object KotlinJsonAdapterFactory : JsonAdapter.Factory {
bindings += bindingsByName.values
val options = JsonReader.Options.of(*bindings.map { it?.name ?: "\u0000" }.toTypedArray())
return KotlinJsonAdapter(constructor, bindings, options)
return KotlinJsonAdapter(constructor, bindings, options).nullSafe()
}
}

View File

@@ -31,7 +31,7 @@ class KotlinJsonAdapterTest {
val encoded = ConstructorParameters(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -47,7 +47,7 @@ class KotlinJsonAdapterTest {
encoded.b = 5
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":3,\"b\":5}")!!
assertThat(decoded.a).isEqualTo(3)
assertThat(decoded.b).isEqualTo(5)
}
@@ -65,7 +65,7 @@ class KotlinJsonAdapterTest {
encoded.b = 5
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -81,7 +81,7 @@ class KotlinJsonAdapterTest {
val encoded = ImmutableConstructorParameters(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -95,7 +95,7 @@ class KotlinJsonAdapterTest {
val encoded = ImmutableProperties(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":3,\"b\":5}")!!
assertThat(decoded.a).isEqualTo(3)
assertThat(decoded.b).isEqualTo(5)
}
@@ -112,7 +112,7 @@ class KotlinJsonAdapterTest {
val encoded = ConstructorDefaultValues(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"b\":6}")!!
assertThat(decoded.a).isEqualTo(-1)
assertThat(decoded.b).isEqualTo(6)
}
@@ -155,7 +155,7 @@ class KotlinJsonAdapterTest {
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"b\":5}")
assertThat(jsonAdapter.serializeNulls().toJson(encoded)).isEqualTo("{\"a\":null,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":null,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":null,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(null)
assertThat(decoded.b).isEqualTo(6)
}
@@ -170,7 +170,7 @@ class KotlinJsonAdapterTest {
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"b\":5}")
assertThat(jsonAdapter.serializeNulls().toJson(encoded)).isEqualTo("{\"a\":null,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"b\":6}")!!
assertThat(decoded.a).isNull()
assertThat(decoded.b).isEqualTo(6)
}
@@ -201,7 +201,7 @@ class KotlinJsonAdapterTest {
val encoded = ConstructorParameterWithQualifier("Android", "Banana")
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":\"ANDROID\",\"b\":\"Banana\"}")
val decoded = jsonAdapter.fromJson("{\"a\":\"Android\",\"b\":\"Banana\"}")
val decoded = jsonAdapter.fromJson("{\"a\":\"Android\",\"b\":\"Banana\"}")!!
assertThat(decoded.a).isEqualTo("android")
assertThat(decoded.b).isEqualTo("Banana")
}
@@ -220,7 +220,7 @@ class KotlinJsonAdapterTest {
encoded.b = "Banana"
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":\"ANDROID\",\"b\":\"Banana\"}")
val decoded = jsonAdapter.fromJson("{\"a\":\"Android\",\"b\":\"Banana\"}")
val decoded = jsonAdapter.fromJson("{\"a\":\"Android\",\"b\":\"Banana\"}")!!
assertThat(decoded.a).isEqualTo("android")
assertThat(decoded.b).isEqualTo("Banana")
}
@@ -237,7 +237,7 @@ class KotlinJsonAdapterTest {
val encoded = ConstructorParameterWithJsonName(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"key a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"key a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"key a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -253,7 +253,7 @@ class KotlinJsonAdapterTest {
encoded.b = 5
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"key a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"key a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"key a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -270,7 +270,7 @@ class KotlinJsonAdapterTest {
val encoded = TransientConstructorParameter(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(-1)
assertThat(decoded.b).isEqualTo(6)
}
@@ -286,7 +286,7 @@ class KotlinJsonAdapterTest {
encoded.b = 5
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(-1)
assertThat(decoded.b).isEqualTo(6)
}
@@ -303,7 +303,7 @@ class KotlinJsonAdapterTest {
val encoded = SubtypeConstructorParameters(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -321,7 +321,7 @@ class KotlinJsonAdapterTest {
encoded.b = 5
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"b\":5,\"a\":3}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.b).isEqualTo(6)
}
@@ -341,7 +341,7 @@ class KotlinJsonAdapterTest {
val encoded = ExtendsPlatformClassWithPrivateField(3)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"id\":\"B\"}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"id\":\"B\"}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.id).isEqualTo("C")
}
@@ -355,7 +355,7 @@ class KotlinJsonAdapterTest {
val encoded = ExtendsPlatformClassWithProtectedField(3)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"buf\":[0,0],\"count\":0}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"buf\":[0,0],\"size\":0}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"buf\":[0,0],\"size\":0}")!!
assertThat(decoded.a).isEqualTo(4)
assertThat(decoded.buf()).isEqualTo(ByteArray(2, { 0 }))
assertThat(decoded.count()).isEqualTo(0)
@@ -384,7 +384,7 @@ class KotlinJsonAdapterTest {
val encoded = PrivateConstructorParameters(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a()).isEqualTo(4)
assertThat(decoded.b()).isEqualTo(6)
}
@@ -401,7 +401,7 @@ class KotlinJsonAdapterTest {
val encoded = PrivateConstructor.newInstance(3, 5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a()).isEqualTo(4)
assertThat(decoded.b()).isEqualTo(6)
}
@@ -423,7 +423,7 @@ class KotlinJsonAdapterTest {
encoded.b(5)
assertThat(jsonAdapter.toJson(encoded)).isEqualTo("{\"a\":3,\"b\":5}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")
val decoded = jsonAdapter.fromJson("{\"a\":4,\"b\":6}")!!
assertThat(decoded.a()).isEqualTo(4)
assertThat(decoded.b()).isEqualTo(6)
}