mirror of
https://github.com/fankes/moshi.git
synced 2025-10-18 23:49:21 +08:00
Convert JsonScope to Kotlin (#1484)
* Rename .java to .kt * Convert JsonScope to Kotlin * Use buildString
This commit is contained in:
@@ -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<String?>, 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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user