// Copyright (c) 2009 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.sdk.internal.protocolparser.dynamicimpl;
import org.chromium.sdk.internal.protocolparser.JsonProtocolParseException;
import org.chromium.sdk.internal.protocolparser.dynamicimpl.JavaCodeGenerator.ClassScope;
/**
* An internal facility for navigating from object of base type to object of subtype. Used only
* when user wants to parse JSON object as subtype.
* It works in terms of {@link ObjectData}.
*/
abstract class SubtypeCaster {
private final Class<?> baseType;
private final RefToType<?> subtypeRef;
SubtypeCaster(Class<?> baseType, RefToType<?> subtypeRef) {
this.baseType = baseType;
this.subtypeRef = subtypeRef;
}
abstract ObjectData getSubtypeObjectData(ObjectData baseObjectData)
throws JsonProtocolParseException;
Class<?> getSubtype() {
return subtypeRef.getTypeClass();
}
TypeHandler<?> getSubtypeHandler() {
return subtypeRef.get();
}
Class<?> getBaseType() {
return baseType;
}
abstract void writeJava(ClassScope scope, String expectedTypeName, String superTypeValueRef,
String resultRef);
}