public class org.finos.legend.engine.external.format.xsd.compile.XsdCompiler extends java.lang.Object
{
private static final java.lang.String SCHEMA_LOCATION_TAG;
private static final java.lang.String METAMODEL_PACKAGE;
private final org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema schema;
private final org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext context;
private final java.util.Map externalSchemas;
private final java.lang.String targetNamespace;
private final java.util.Map namespaceToPrefix;
private java.lang.String mainSchemaLocation;
private org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdForm attributeFormDefault;
private org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdForm elementFormDefault;
private java.util.List blockDefault;
private java.util.List finalDefault;
public void <init>(org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext)
{
org.finos.legend.engine.external.format.xsd.compile.XsdCompiler v;
java.util.HashMap v;
org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema v, v, v;
org.finos.legend.engine.external.format.xsd.compile.XsdParser v;
java.util.TreeMap v;
java.util.Map v, v, v;
org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext v;
java.lang.String v, v, v, v;
v := @this: org.finos.legend.engine.external.format.xsd.compile.XsdCompiler;
v := @parameter: org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.HashMap;
specialinvoke v.<java.util.HashMap: void <init>()>();
v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map externalSchemas> = v;
v = new java.util.TreeMap;
specialinvoke v.<java.util.TreeMap: void <init>()>();
v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix> = v;
v = new org.finos.legend.engine.external.format.xsd.compile.XsdParser;
v = interfaceinvoke v.<org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext: java.lang.String getContent()>();
specialinvoke v.<org.finos.legend.engine.external.format.xsd.compile.XsdParser: void <init>(java.lang.String)>(v);
v = virtualinvoke v.<org.finos.legend.engine.external.format.xsd.compile.XsdParser: org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema parse()>();
v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema schema> = v;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema schema>;
v = v.<org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema: java.lang.String targetNamespace>;
if v != null goto label;
v = "";
goto label;
label:
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema schema>;
v = v.<org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema: java.lang.String targetNamespace>;
label:
v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.lang.String targetNamespace> = v;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>("http://www.w.org/2001/XMLSchema", "xs");
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>("http://www.w.org/XML/1998/namespace", "xml");
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.lang.String targetNamespace>;
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, "");
v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext context> = v;
return;
}
public org.finos.legend.pure.generated.Root_meta_external_format_xml_metamodel_xsd_XsdSchema compile()
{
org.finos.legend.engine.external.format.xsd.compile.XsdCompiler v;
org.finos.legend.pure.generated.Root_meta_external_format_xml_metamodel_xsd_XsdSchema v;
org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema v;
org.finos.legend.engine.external.shared.format.model.compile.ExternalFormatSchemaException v;
org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext v, v;
java.lang.String v, v;
org.finos.legend.engine.external.format.xsd.compile.XsdCompiler$MainVisitor v;
v := @this: org.finos.legend.engine.external.format.xsd.compile.XsdCompiler;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext context>;
v = interfaceinvoke v.<org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext: java.lang.String getLocation()>();
v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.lang.String mainSchemaLocation> = v;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.lang.String mainSchemaLocation>;
if v != null goto label;
v = new org.finos.legend.engine.external.shared.format.model.compile.ExternalFormatSchemaException;
specialinvoke v.<org.finos.legend.engine.external.shared.format.model.compile.ExternalFormatSchemaException: void <init>(java.lang.String)>("Location must be specified for XSD schemas");
throw v;
label:
v = new org.finos.legend.engine.external.format.xsd.compile.XsdCompiler$MainVisitor;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext context>;
specialinvoke v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler$MainVisitor: void <init>(org.finos.legend.engine.external.format.xsd.compile.XsdCompiler,org.finos.legend.engine.external.shared.format.model.compile.ExternalSchemaCompileContext)>(v, v);
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema schema>;
virtualinvoke v.<org.finos.legend.engine.external.format.xsd.compile.parseTree.XsdSchema: void accept(org.finos.legend.engine.external.format.xsd.compile.parseTree.visit.XsdObjectVisitor)>(v);
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler$MainVisitor: org.finos.legend.pure.generated.Root_meta_external_format_xml_metamodel_xsd_XsdSchema compiledSchema>;
return v;
}
private void ensureNamespace(java.lang.String, java.lang.String)
{
org.finos.legend.engine.external.format.xsd.compile.XsdCompiler v;
java.util.Map v, v, v, v, v, v, v;
int v, v;
java.lang.String v, v, v, v, v, v;
boolean v, v, v, v, v;
v := @this: org.finos.legend.engine.external.format.xsd.compile.XsdCompiler;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = interfaceinvoke v.<java.util.Map: boolean containsKey(java.lang.Object)>(v);
if v != 0 goto label;
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>("http://www.w.org/2001/XMLSchema-instance");
if v == 0 goto label;
specialinvoke v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: void ensureNamespace(java.lang.String,java.lang.String)>(v, "xsi");
goto label;
label:
if v != null goto label;
v = 1;
label:
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("ns\u0001");
v = interfaceinvoke v.<java.util.Map: boolean containsValue(java.lang.Object)>(v);
if v == 0 goto label;
v = v + 1;
goto label;
label:
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("ns\u0001");
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
goto label;
label:
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = interfaceinvoke v.<java.util.Map: boolean containsValue(java.lang.Object)>(v);
if v != 0 goto label;
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
goto label;
label:
v = 1;
label:
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,int)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u0001\u0001");
v = interfaceinvoke v.<java.util.Map: boolean containsValue(java.lang.Object)>(v);
if v == 0 goto label;
v = v + 1;
goto label;
label:
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,int)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u0001\u0001");
interfaceinvoke v.<java.util.Map: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
label:
return;
}
private java.lang.String prefixFor(java.lang.String)
{
org.finos.legend.engine.external.format.xsd.compile.XsdCompiler v;
java.lang.String v, v;
v := @this: org.finos.legend.engine.external.format.xsd.compile.XsdCompiler;
v := @parameter: java.lang.String;
v = specialinvoke v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.lang.String prefixFor(java.lang.String,java.lang.String)>(v, null);
return v;
}
private java.lang.String prefixFor(java.lang.String, java.lang.String)
{
org.finos.legend.engine.external.format.xsd.compile.XsdCompiler v;
java.util.Map v;
java.lang.Object v;
java.lang.String v, v;
v := @this: org.finos.legend.engine.external.format.xsd.compile.XsdCompiler;
v := @parameter: java.lang.String;
v := @parameter: java.lang.String;
specialinvoke v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: void ensureNamespace(java.lang.String,java.lang.String)>(v, v);
v = v.<org.finos.legend.engine.external.format.xsd.compile.XsdCompiler: java.util.Map namespaceToPrefix>;
v = interfaceinvoke v.<java.util.Map: java.lang.Object get(java.lang.Object)>(v);
return v;
}
}