blob: 4e79fb71498d3dcfc5da0c39c1a15019a3fc1e57 [file] [log] [blame]
package org.jetbrains.protocolReader;
class ExistingSubtypeAspect extends SubtypeAspect {
private SubtypeCaster subtypeCaster;
private final TypeRef<?> jsonSuperClass;
ExistingSubtypeAspect(TypeRef<?> jsonSuperClass) {
this.jsonSuperClass = jsonSuperClass;
}
public void setSubtypeCaster(SubtypeCaster subtypeCaster) {
this.subtypeCaster = subtypeCaster;
}
@Override
void writeGetSuperMethodJava(TextOutput out) {
out.newLine().append("@Override").newLine().append("public ").append(jsonSuperClass.get().getTypeClass().getCanonicalName() ).append(" getSuper()").openBlock();
out.append("return ").append(Util.BASE_VALUE_PREFIX).semi().closeBlock();
}
@Override
void writeSuperFieldJava(TextOutput out) {
out.newLine().append("private final ").append(jsonSuperClass.get().getTypeClass().getCanonicalName()).append(' ').append(Util.BASE_VALUE_PREFIX).semi().newLine();
}
@Override
void writeSuperConstructorParamJava(TextOutput out) {
out.comma().append(jsonSuperClass.get().getTypeClass().getCanonicalName()).append(' ').append(Util.BASE_VALUE_PREFIX);
}
@Override
void writeSuperConstructorInitialization(TextOutput out) {
out.append("this.").append(Util.BASE_VALUE_PREFIX).append(" = ").append(Util.BASE_VALUE_PREFIX).append(';').newLine().newLine();
}
@Override
void writeParseMethod(String className, ClassScope scope, TextOutput out) {
out.newLine().append("public static ").append(className).space().append("parse").append("(").append(Util.JSON_READER_PARAMETER_DEF).append(')').openBlock();
out.append("return ");
jsonSuperClass.get().writeInstantiateCode(scope, out);
out.append('(').append(Util.READER_NAME).append(')').append('.');
subtypeCaster.writeJava(out);
out.semi().closeBlock();
out.newLine();
}
@Override
public void writeInstantiateCode(String className, TextOutput out) {
out.append(className).append(".parse");
}
}