summaryrefslogtreecommitdiff
path: root/platform/script-debugger/protocol/protocol-reader/src/ObjectValueReader.kt
diff options
context:
space:
mode:
Diffstat (limited to 'platform/script-debugger/protocol/protocol-reader/src/ObjectValueReader.kt')
-rw-r--r--platform/script-debugger/protocol/protocol-reader/src/ObjectValueReader.kt43
1 files changed, 43 insertions, 0 deletions
diff --git a/platform/script-debugger/protocol/protocol-reader/src/ObjectValueReader.kt b/platform/script-debugger/protocol/protocol-reader/src/ObjectValueReader.kt
new file mode 100644
index 00000000..ef6e02f2
--- /dev/null
+++ b/platform/script-debugger/protocol/protocol-reader/src/ObjectValueReader.kt
@@ -0,0 +1,43 @@
+package org.jetbrains.protocolReader
+
+internal class ObjectValueReader(val type: TypeRef<*>, private val isSubtyping: Boolean, primitiveValueName: String?) : ValueReader() {
+ val primitiveValueName = if (primitiveValueName == null || primitiveValueName.isEmpty()) null else primitiveValueName
+
+ override fun asJsonTypeParser() = this
+
+ fun isSubtyping() = isSubtyping
+
+ override fun appendFinishedValueTypeName(out: TextOutput) {
+ out.append(type.typeClass.canonicalName)
+ }
+
+ override fun appendInternalValueTypeName(scope: FileScope, out: TextOutput) {
+ out.append(scope.getTypeImplReference(type.type!!))
+ }
+
+ override fun writeReadCode(scope: ClassScope, subtyping: Boolean, out: TextOutput) {
+ type.type!!.writeInstantiateCode(scope.getRootClassScope(), subtyping, out)
+ out.append('(')
+ addReaderParameter(subtyping, out)
+ out.comma().append("null")
+ if (subtyping && type.type!!.subtypeAspect != null) {
+ out.comma().append("this")
+ }
+ out.append(')')
+ }
+
+ override fun writeArrayReadCode(scope: ClassScope, subtyping: Boolean, out: TextOutput) {
+ beginReadCall("ObjectArray", subtyping, out)
+ writeFactoryArgument(scope, out)
+ out.append(')')
+ }
+
+ fun writeFactoryArgument(scope: ClassScope, out: TextOutput) {
+ out.comma()
+ writeFactoryNewExpression(scope, out)
+ }
+
+ fun writeFactoryNewExpression(scope: ClassScope, out: TextOutput) {
+ out.append(TYPE_FACTORY_NAME_PREFIX).append(scope.requireFactoryGenerationAndGetName(type.type!!)).append("()")
+ }
+}