public class org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer extends java.lang.Object
{
private static final java.lang.String HASKELL_TYPE_COLON_CONVENTION;
private static final java.lang.String HASKELL_CONS_COLON_CONVENTION;
private final java.lang.String typeColonConvention;
private final java.lang.String consColonConvention;
protected void <init>(java.lang.String, java.lang.String)
{
java.lang.String v, v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: java.lang.String typeColonConvention> = v;
v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: java.lang.String consColonConvention> = v;
return;
}
public static org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer newInstance()
{
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
v = new org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void <init>(java.lang.String,java.lang.String)>("::", ":");
return v;
}
public java.lang.String renderModule(org.finos.legend.engine.protocol.haskell.metamodel.HaskellModule)
{
java.util.Iterator v;
org.finos.legend.engine.protocol.haskell.metamodel.ModuleElement v;
java.util.List v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.Object v;
java.lang.StringBuilder v, v, v;
java.lang.String v, v;
org.finos.legend.engine.protocol.haskell.metamodel.HaskellModule v;
boolean v, v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.HaskellModule;
v = new java.lang.StringBuilder;
specialinvoke v.<java.lang.StringBuilder: void <init>()>();
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("module ");
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.HaskellModule: java.lang.String id>;
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("\n  where\n\n");
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.HaskellModule: java.util.List elements>;
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = v instanceof org.finos.legend.engine.protocol.haskell.metamodel.DataType;
if v == 0 goto label;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderTopLevelDecl(java.lang.StringBuilder,org.finos.legend.engine.protocol.haskell.metamodel.DataType)>(v, v);
goto label;
label:
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("\n");
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.String toString()>();
return v;
}
private void renderTopLevelDecl(java.lang.StringBuilder, org.finos.legend.engine.protocol.haskell.metamodel.DataType)
{
org.finos.legend.engine.protocol.haskell.metamodel.DataType v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.String v, v;
boolean v, v, v, v;
java.util.Iterator v, v;
java.util.List v, v, v;
java.lang.Object v, v;
java.lang.StringBuilder v, v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.DataType;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.DataType: java.lang.String documentation>;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderDocumentation(java.lang.StringBuilder,java.lang.String)>(v, v);
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("data ");
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.DataType: java.lang.String name>;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.DataType: java.util.List constructors>;
v = staticinvoke <org.eclipse.collections.impl.utility.Iterate: boolean isEmpty(java.lang.Iterable)>(v);
if v != 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" = ");
v = 1;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.DataType: java.util.List constructors>;
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
if v != 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("\n  | ");
label:
v = 0;
virtualinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderNamedConstructor(java.lang.StringBuilder,org.finos.legend.engine.protocol.haskell.metamodel.NamedConstructor)>(v, v);
goto label;
label:
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.DataType: java.util.List deriving>;
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("\n    ");
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderDeriving(java.lang.StringBuilder,org.finos.legend.engine.protocol.haskell.metamodel.Deriving)>(v, v);
goto label;
label:
return;
}
protected void renderNamedConstructor(java.lang.StringBuilder, org.finos.legend.engine.protocol.haskell.metamodel.NamedConstructor)
{
org.finos.legend.engine.protocol.haskell.metamodel.NamedConstructor v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.StringBuilder v;
java.lang.String v, v;
boolean v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.NamedConstructor;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.NamedConstructor: java.lang.String documentation>;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderDocumentation(java.lang.StringBuilder,java.lang.String)>(v, v);
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.NamedConstructor: java.lang.String name>;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
v = v instanceof org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor;
if v == 0 goto label;
virtualinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderRecordTypeConstructor(java.lang.StringBuilder,org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor)>(v, v);
label:
return;
}
protected void renderRecordTypeConstructor(java.lang.StringBuilder, org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor)
{
java.util.Iterator v;
java.util.List v, v;
org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.Object v;
java.lang.StringBuilder v;
java.lang.String v;
boolean v, v, v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor: java.util.List fields>;
v = staticinvoke <org.eclipse.collections.impl.utility.Iterate: boolean isEmpty(java.lang.Iterable)>(v);
if v != 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" { ");
v = 1;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.RecordTypeConstructor: java.util.List fields>;
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.Field: java.lang.String documentation>;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderDocumentation(java.lang.StringBuilder,java.lang.String)>(v, v);
if v != 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(", ");
label:
virtualinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderFieldConstructor(java.lang.StringBuilder,org.finos.legend.engine.protocol.haskell.metamodel.Field)>(v, v);
v = 0;
goto label;
label:
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" }");
label:
return;
}
protected void renderFieldConstructor(java.lang.StringBuilder, org.finos.legend.engine.protocol.haskell.metamodel.Field)
{
org.finos.legend.engine.protocol.haskell.metamodel.Field v;
java.util.List v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.StringBuilder v, v, v, v;
java.lang.String v, v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.Field;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.Field: java.lang.String name>;
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" ");
v = v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: java.lang.String typeColonConvention>;
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(" ");
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.Field: java.util.List type>;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderTypes(java.lang.StringBuilder,java.util.List,java.lang.String)>(v, v, " ");
return;
}
private void renderTypes(java.lang.StringBuilder, java.util.List, java.lang.String)
{
java.util.Iterator v;
java.util.List v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.Object v;
java.lang.StringBuilder v;
java.lang.String v;
boolean v, v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: java.util.List;
v := @parameter: java.lang.String;
v = 1;
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
if v != 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
label:
v = 0;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderType(java.lang.StringBuilder,org.finos.legend.engine.protocol.haskell.metamodel.HaskellType)>(v, v);
goto label;
label:
return;
}
private void renderType(java.lang.StringBuilder, org.finos.legend.engine.protocol.haskell.metamodel.HaskellType)
{
org.finos.legend.engine.protocol.haskell.metamodel.HaskellType v;
java.util.List v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.StringBuilder v;
java.lang.String v;
boolean v, v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.HaskellType;
v = v instanceof org.finos.legend.engine.protocol.haskell.metamodel.NamedTypeRef;
if v == 0 goto label;
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.NamedTypeRef: java.lang.String name>;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
goto label;
label:
v = v instanceof org.finos.legend.engine.protocol.haskell.metamodel.ListType;
if v == 0 goto label;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("[");
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.ListType: java.util.List type>;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderTypes(java.lang.StringBuilder,java.util.List,java.lang.String)>(v, v, " ");
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("]");
label:
return;
}
private void renderDeriving(java.lang.StringBuilder, org.finos.legend.engine.protocol.haskell.metamodel.Deriving)
{
java.util.List v;
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.StringBuilder v;
org.finos.legend.engine.protocol.haskell.metamodel.Deriving v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: org.finos.legend.engine.protocol.haskell.metamodel.Deriving;
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("deriving (");
v = v.<org.finos.legend.engine.protocol.haskell.metamodel.Deriving: java.util.List types>;
specialinvoke v.<org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer: void renderTypes(java.lang.StringBuilder,java.util.List,java.lang.String)>(v, v, ", ");
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(")");
return;
}
private void renderDocumentation(java.lang.StringBuilder, java.lang.String)
{
org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer v;
java.lang.StringBuilder v, v, v;
java.lang.String v;
v := @this: org.finos.legend.engine.language.haskell.grammar.'to'.HaskellGrammarComposer;
v := @parameter: java.lang.StringBuilder;
v := @parameter: java.lang.String;
if v == null goto label;
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("-- |");
v = virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>(v);
virtualinvoke v.<java.lang.StringBuilder: java.lang.StringBuilder append(java.lang.String)>("\n");
label:
return;
}
}