From 6f8d690e6e838237946de9f154eebce097674aac Mon Sep 17 00:00:00 2001 From: Zac Sweers Date: Mon, 10 Jan 2022 11:08:36 -0500 Subject: [PATCH] Convert JsonScope to Kotlin (#1484) * Rename .java to .kt * Convert JsonScope to Kotlin * Use buildString --- .../moshi/{JsonScope.java => JsonScope.kt} | 64 ++++++++----------- 1 file changed, 27 insertions(+), 37 deletions(-) rename moshi/src/main/java/com/squareup/moshi/{JsonScope.java => JsonScope.kt} (57%) diff --git a/moshi/src/main/java/com/squareup/moshi/JsonScope.java b/moshi/src/main/java/com/squareup/moshi/JsonScope.kt similarity index 57% rename from moshi/src/main/java/com/squareup/moshi/JsonScope.java rename to moshi/src/main/java/com/squareup/moshi/JsonScope.kt index f16be68..5845413 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonScope.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonScope.kt @@ -13,71 +13,61 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.squareup.moshi; +package com.squareup.moshi /** Lexical scoping elements within a JSON reader or writer. */ -final class JsonScope { - private JsonScope() {} - +internal object JsonScope { /** An array with no elements requires no separators or newlines before it is closed. */ - static final int EMPTY_ARRAY = 1; + const val EMPTY_ARRAY = 1 - /** A array with at least one value requires a comma and newline before the next element. */ - static final int NONEMPTY_ARRAY = 2; + /** An array with at least one value requires a comma and newline before the next element. */ + const val NONEMPTY_ARRAY = 2 /** An object with no name/value pairs requires no separators or newlines before it is closed. */ - static final int EMPTY_OBJECT = 3; + const val EMPTY_OBJECT = 3 /** An object whose most recent element is a key. The next element must be a value. */ - static final int DANGLING_NAME = 4; + const val DANGLING_NAME = 4 /** An object with at least one name/value pair requires a separator before the next element. */ - static final int NONEMPTY_OBJECT = 5; + const val NONEMPTY_OBJECT = 5 /** No object or array has been started. */ - static final int EMPTY_DOCUMENT = 6; + const val EMPTY_DOCUMENT = 6 /** A document with at an array or object. */ - static final int NONEMPTY_DOCUMENT = 7; + const val NONEMPTY_DOCUMENT = 7 /** A document that's been closed and cannot be accessed. */ - static final int CLOSED = 8; + const val CLOSED = 8 /** Sits above the actual state to indicate that a value is currently being streamed in. */ - static final int STREAMING_VALUE = 9; + const val STREAMING_VALUE = 9 /** - * Renders the path in a JSON document to a string. The {@code pathNames} and {@code pathIndices} + * Renders the path in a JSON document to a string. The `pathNames` and `pathIndices` * parameters corresponds directly to stack: At indices where the stack contains an object * (EMPTY_OBJECT, DANGLING_NAME or NONEMPTY_OBJECT), pathNames contains the name at this scope. * Where it contains an array (EMPTY_ARRAY, NONEMPTY_ARRAY) pathIndices contains the current index * in that array. Otherwise the value is undefined, and we take advantage of that by incrementing * pathIndices when doing so isn't useful. */ - static String getPath(int stackSize, int[] stack, String[] pathNames, int[] pathIndices) { - StringBuilder result = new StringBuilder().append('$'); - for (int i = 0; i < stackSize; i++) { - switch (stack[i]) { - case EMPTY_ARRAY: - case NONEMPTY_ARRAY: - result.append('[').append(pathIndices[i]).append(']'); - break; - - case EMPTY_OBJECT: - case DANGLING_NAME: - case NONEMPTY_OBJECT: - result.append('.'); - if (pathNames[i] != null) { - result.append(pathNames[i]); + @JvmStatic + fun getPath(stackSize: Int, stack: IntArray, pathNames: Array, pathIndices: IntArray): String { + return buildString { + append('$') + for (i in 0 until stackSize) { + when (stack[i]) { + EMPTY_ARRAY, NONEMPTY_ARRAY -> append('[').append(pathIndices[i]).append(']') + EMPTY_OBJECT, DANGLING_NAME, NONEMPTY_OBJECT -> { + append('.') + if (pathNames[i] != null) { + append(pathNames[i]) + } } - break; - - case NONEMPTY_DOCUMENT: - case EMPTY_DOCUMENT: - case CLOSED: - break; + NONEMPTY_DOCUMENT, EMPTY_DOCUMENT, CLOSED -> {} + } } } - return result.toString(); } }