mirror of
https://github.com/fankes/moshi.git
synced 2025-10-19 16:09: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
|
* See the License for the specific language governing permissions and
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
package com.squareup.moshi;
|
package com.squareup.moshi
|
||||||
|
|
||||||
/** Lexical scoping elements within a JSON reader or writer. */
|
/** Lexical scoping elements within a JSON reader or writer. */
|
||||||
final class JsonScope {
|
internal object JsonScope {
|
||||||
private JsonScope() {}
|
|
||||||
|
|
||||||
/** An array with no elements requires no separators or newlines before it is closed. */
|
/** 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. */
|
/** An array with at least one value requires a comma and newline before the next element. */
|
||||||
static final int NONEMPTY_ARRAY = 2;
|
const val NONEMPTY_ARRAY = 2
|
||||||
|
|
||||||
/** An object with no name/value pairs requires no separators or newlines before it is closed. */
|
/** 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. */
|
/** 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. */
|
/** 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. */
|
/** 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. */
|
/** 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. */
|
/** 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. */
|
/** 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
|
* 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.
|
* (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
|
* 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
|
* in that array. Otherwise the value is undefined, and we take advantage of that by incrementing
|
||||||
* pathIndices when doing so isn't useful.
|
* pathIndices when doing so isn't useful.
|
||||||
*/
|
*/
|
||||||
static String getPath(int stackSize, int[] stack, String[] pathNames, int[] pathIndices) {
|
@JvmStatic
|
||||||
StringBuilder result = new StringBuilder().append('$');
|
fun getPath(stackSize: Int, stack: IntArray, pathNames: Array<String?>, pathIndices: IntArray): String {
|
||||||
for (int i = 0; i < stackSize; i++) {
|
return buildString {
|
||||||
switch (stack[i]) {
|
append('$')
|
||||||
case EMPTY_ARRAY:
|
for (i in 0 until stackSize) {
|
||||||
case NONEMPTY_ARRAY:
|
when (stack[i]) {
|
||||||
result.append('[').append(pathIndices[i]).append(']');
|
EMPTY_ARRAY, NONEMPTY_ARRAY -> append('[').append(pathIndices[i]).append(']')
|
||||||
break;
|
EMPTY_OBJECT, DANGLING_NAME, NONEMPTY_OBJECT -> {
|
||||||
|
append('.')
|
||||||
case EMPTY_OBJECT:
|
if (pathNames[i] != null) {
|
||||||
case DANGLING_NAME:
|
append(pathNames[i])
|
||||||
case NONEMPTY_OBJECT:
|
}
|
||||||
result.append('.');
|
|
||||||
if (pathNames[i] != null) {
|
|
||||||
result.append(pathNames[i]);
|
|
||||||
}
|
}
|
||||||
break;
|
NONEMPTY_DOCUMENT, EMPTY_DOCUMENT, CLOSED -> {}
|
||||||
|
}
|
||||||
case NONEMPTY_DOCUMENT:
|
|
||||||
case EMPTY_DOCUMENT:
|
|
||||||
case CLOSED:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result.toString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user