package org.jetbrains.protocolReader; import org.jetbrains.jsonProtocol.ItemDescriptor; import org.jetbrains.jsonProtocol.ProtocolMetaModel; import java.io.IOException; import java.util.List; class MyCreateStandaloneTypeBindingVisitorBase extends CreateStandaloneTypeBindingVisitorBase { private final String name; private final DomainGenerator generator; public MyCreateStandaloneTypeBindingVisitorBase(DomainGenerator generator, ProtocolMetaModel.StandaloneType type, String name) { super(generator, type); this.generator = generator; this.name = name; } @Override public StandaloneTypeBinding visitObject(List properties) { return new StandaloneTypeBinding() { @Override public BoxableType getJavaType() { return new StandaloneType(generator.generator.getNaming().additionalParam.getFullName(generator.domain.domain(), name), "writeMessage"); } @Override public void generate() throws IOException { generator.generateCommandAdditionalParam(getType()); } @Override public TypeData.Direction getDirection() { return TypeData.Direction.OUTPUT; } }; } @Override public StandaloneTypeBinding visitEnum(List enumConstants) { throw new RuntimeException(); } @Override public StandaloneTypeBinding visitArray(final ProtocolMetaModel.ArrayItemType items) { return generator.createTypedefTypeBinding(getType(), new StandaloneTypeBinding.Target() { @Override public BoxableType resolve(final ResolveContext context) { return new ListType(generator.generator.resolveType(items, new ResolveAndGenerateScope() { // This class is responsible for generating ad hoc type. // If we ever are to do it, we should generate into string buffer and put strings inside TypeDef class @Override public String getDomainName() { return generator.domain.domain(); } @Override public TypeData.Direction getTypeDirection() { return TypeData.Direction.OUTPUT; } @Override public TypeDescriptor resolveType(T typedObject) { throw new UnsupportedOperationException(); } @Override public BoxableType generateNestedObject(String description, List properties) { return context.generateNestedObject("Item", description, properties); } }).getType()); } }, generator.generator.getNaming().outputTypedef, TypeData.Direction.OUTPUT); } }