package st.gravel.support.compiler.ast;
/*
This file is automatically generated from typed smalltalk source. Do not edit by hand.
(C) AG5.com
*/
import java.math.BigInteger;
import st.gravel.support.jvm.NonLocalReturn;
import st.gravel.support.compiler.ast.Node;
import st.gravel.support.compiler.ast.Node.Node_Factory;
import st.gravel.support.compiler.ast.Reference;
import st.gravel.support.compiler.ast.AbsoluteReference;
import st.gravel.support.compiler.ast.SharedDeclarationNode;
import st.gravel.support.compiler.ast.NodeVisitor;
import st.gravel.support.compiler.ast.SystemNode;
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.ArrayList;
import java.util.HashMap;
import st.gravel.support.compiler.ast.SourcePrinter;
import st.gravel.support.compiler.ast.SourcePosition;
public class NamespaceNode extends Node implements Cloneable {
public static NamespaceNode_Factory factory = new NamespaceNode_Factory();
AbsoluteReference[] _privateImports;
AbsoluteReference[] _publicImports;
AbsoluteReference _reference;
SharedDeclarationNode[] _sharedVariables;
public static class NamespaceNode_Factory extends Node_Factory {
public NamespaceNode basicNew() {
NamespaceNode newInstance = new NamespaceNode();
newInstance.initialize();
return newInstance;
}
public NamespaceNode for_(final Reference _aReference) {
final AbsoluteReference _orgGravelLang;
_orgGravelLang = AbsoluteReference.factory.path_(new st.gravel.core.Symbol[] { st.gravel.core.Symbol.value("st"), st.gravel.core.Symbol.value("gravel"), st.gravel.core.Symbol.value("lang") });
if (st.gravel.support.jvm.ObjectExtensions.equals_(_aReference, _orgGravelLang)) {
return NamespaceNode.factory.reference_(((AbsoluteReference) _aReference));
}
return NamespaceNode.factory.reference_publicImports_privateImports_sharedVariables_(((AbsoluteReference) _aReference), new AbsoluteReference[] {}, st.gravel.support.jvm.ArrayFactory.with_(_orgGravelLang), new SharedDeclarationNode[] {});
}
public NamespaceNode reference_(final AbsoluteReference _anAbsoluteReference) {
return this.reference_publicImports_privateImports_sharedVariables_(_anAbsoluteReference, new AbsoluteReference[] {}, new AbsoluteReference[] {}, new SharedDeclarationNode[] {});
}
public NamespaceNode reference_publicImports_privateImports_sharedVariables_(final AbsoluteReference _anAbsoluteReference, final AbsoluteReference[] _anArray, final AbsoluteReference[] _anArray2, final SharedDeclarationNode[] _sharedVariables) {
return this.basicNew().initializeReference_publicImports_privateImports_sharedVariables_(_anAbsoluteReference, _anArray, _anArray2, _sharedVariables);
}
}
static public NamespaceNode _for_(Object receiver, final Reference _aReference) {
return factory.for_(_aReference);
}
static public NamespaceNode _reference_(Object receiver, final AbsoluteReference _anAbsoluteReference) {
return factory.reference_(_anAbsoluteReference);
}
static public NamespaceNode _reference_publicImports_privateImports_sharedVariables_(Object receiver, final AbsoluteReference _anAbsoluteReference, final AbsoluteReference[] _anArray, final AbsoluteReference[] _anArray2, final SharedDeclarationNode[] _sharedVariables) {
return factory.reference_publicImports_privateImports_sharedVariables_(_anAbsoluteReference, _anArray, _anArray2, _sharedVariables);
}
@Override
public <X> X accept_(final NodeVisitor<X> _visitor) {
return _visitor.visitNamespaceNode_(this);
}
public NamespaceNode allImportsIn_do_(final SystemNode _aSystemNode, final st.gravel.support.jvm.Block1<Object, NamespaceNode> _aBlock) {
final java.util.Set<AbsoluteReference> _aSet;
_aSet = new java.util.HashSet();
_aSet.add(_reference);
_aBlock.value_(this);
this.allImportsIn_private_except_do_(_aSystemNode, true, _aSet, _aBlock);
return this;
}
public NamespaceNode allImportsIn_private_except_do_(final SystemNode _aSystemNode, final boolean _aBoolean, final java.util.Set<AbsoluteReference> _aSet, final st.gravel.support.jvm.Block1<Object, NamespaceNode> _aBlock) {
this.importReferences_do_(_aBoolean, new st.gravel.support.jvm.Block1<Object, AbsoluteReference>() {
@Override
public Object value_(final AbsoluteReference _each) {
if (!_aSet.contains(_each)) {
final NamespaceNode _ns;
_aSet.add(_each);
_ns = _aSystemNode.namespaceNodeAt_(_each);
_aBlock.value_(_ns);
return _ns.allImportsIn_private_except_do_(_aSystemNode, false, _aSet, _aBlock);
}
return NamespaceNode.this;
}
});
return this;
}
@Override
public NamespaceNode allNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
return _each.withAllNodesDo_(_aBlock);
}
});
return this;
}
@Override
public NamespaceNode allNodesDo_pruneWhere_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock, final st.gravel.support.jvm.Block1<Boolean, Node> _pruneBlock) {
this.nodesDo_(new st.gravel.support.jvm.Block1<Object, Node>() {
@Override
public Object value_(final Node _each) {
if (!_pruneBlock.value_(_each)) {
return _each.withAllNodesDo_pruneWhere_(_aBlock, _pruneBlock);
}
return NamespaceNode.this;
}
});
return this;
}
public NamespaceNode copy() {
try {
NamespaceNode _temp1 = (NamespaceNode) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
@Override
public boolean equals(final Object _anObject) {
if (!super.equals(_anObject)) {
return false;
}
if (this._reference == null) {
if (!(((NamespaceNode) _anObject)._reference == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ObjectExtensions.equals_(this._reference, ((NamespaceNode) _anObject)._reference)) {
return false;
}
}
if (this._publicImports == null) {
if (!(((NamespaceNode) _anObject)._publicImports == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._publicImports, ((NamespaceNode) _anObject)._publicImports)) {
return false;
}
}
if (this._privateImports == null) {
if (!(((NamespaceNode) _anObject)._privateImports == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._privateImports, ((NamespaceNode) _anObject)._privateImports)) {
return false;
}
}
if (this._sharedVariables == null) {
if (!(((NamespaceNode) _anObject)._sharedVariables == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._sharedVariables, ((NamespaceNode) _anObject)._sharedVariables)) {
return false;
}
}
return true;
}
public NamespaceNode_Factory factory() {
return factory;
}
@Override
public int hashCode() {
return ((((this.factory() == null ? 0 : this.factory().hashCode()) ^ (_reference == null ? 0 : _reference.hashCode())) ^ java.util.Arrays.hashCode(_publicImports)) ^ java.util.Arrays.hashCode(_privateImports));
}
public NamespaceNode importReferences_do_(final boolean _private, final st.gravel.support.jvm.Block1<Object, AbsoluteReference> _aBlock) {
for (final AbsoluteReference _temp1 : _publicImports) {
_aBlock.value_(_temp1);
}
if (_private) {
for (final AbsoluteReference _temp2 : _privateImports) {
_aBlock.value_(_temp2);
}
}
return this;
}
public NamespaceNode initializeReference_publicImports_privateImports_sharedVariables_(final AbsoluteReference _anAbsoluteReference, final AbsoluteReference[] _anArray, final AbsoluteReference[] _anArray2, final SharedDeclarationNode[] _anArray3) {
_reference = _anAbsoluteReference;
_publicImports = _anArray;
_privateImports = _anArray2;
_sharedVariables = _anArray3;
this.initialize();
return this;
}
@Override
public NamespaceNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) {
return this;
}
public NamespaceNode mergeWith_(final NamespaceNode _aNamespaceNode) {
final List<AbsoluteReference>[] _nPublic;
final List<AbsoluteReference>[] _nPrivate;
final Map<String, SharedDeclarationNode>[] _nSharedVariables;
_nSharedVariables = new Map[1];
_nPrivate = new List[1];
_nPublic = new List[1];
_nPublic[0] = new java.util.ArrayList();
_nPrivate[0] = new java.util.ArrayList();
_nSharedVariables[0] = new java.util.HashMap<String, SharedDeclarationNode>();
for (final AbsoluteReference _each : _aNamespaceNode.publicImports()) {
if (!_nPublic[0].contains(_each)) {
_nPublic[0].add(_each);
}
}
for (final AbsoluteReference _each : _publicImports) {
if (!_nPublic[0].contains(_each)) {
_nPublic[0].add(_each);
}
}
for (final AbsoluteReference _each : _aNamespaceNode.privateImports()) {
if (!(_nPublic[0].contains(_each) || _nPrivate[0].contains(_each))) {
_nPrivate[0].add(_each);
}
}
for (final AbsoluteReference _each : _privateImports) {
if (!(_nPublic[0].contains(_each) || _nPrivate[0].contains(_each))) {
_nPrivate[0].add(_each);
}
}
for (final SharedDeclarationNode _each : _sharedVariables) {
_nSharedVariables[0].put(_each.name(), _each);
}
for (final SharedDeclarationNode _each : _aNamespaceNode.sharedVariables()) {
_nSharedVariables[0].put(_each.name(), _each);
}
return this.withPrivateImports_publicImports_sharedVariables_(_nPrivate[0].toArray(new AbsoluteReference[_nPrivate[0].size()]), _nPublic[0].toArray(new AbsoluteReference[_nPublic[0].size()]), _nSharedVariables[0].values().toArray(new SharedDeclarationNode[_nSharedVariables[0].size()]));
}
@Override
public NamespaceNode nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
return this;
}
@Override
public NamespaceNode prettySourceOn_(final StringBuilder _aStream) {
SourcePrinter.factory.on_(_aStream).visit_(this);
return this;
}
@Override
public NamespaceNode printOn_(final StringBuilder _aStream) {
final String _title;
_title = this.factory().toString();
_aStream.append(st.gravel.support.jvm.CharacterExtensions.isVowel(_title.charAt(0)) ? "an " : "a ");
_aStream.append(_title);
_aStream.append('[');
this.sourceOn_(_aStream);
_aStream.append(']');
return this;
}
public AbsoluteReference[] privateImports() {
return _privateImports;
}
public AbsoluteReference[] publicImports() {
return _publicImports;
}
public NamespaceNode pvtSetPrivateImports_(final AbsoluteReference[] _privateArray) {
_privateImports = _privateArray;
return this;
}
public NamespaceNode pvtSetPublicImports_(final AbsoluteReference[] _publicArray) {
_publicImports = _publicArray;
return this;
}
public NamespaceNode pvtSetSharedVariables_(final SharedDeclarationNode[] _anArray) {
_sharedVariables = _anArray;
return this;
}
@Override
public NamespaceNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) {
_sourcePosition = _aSourcePosition;
return this;
}
public AbsoluteReference reference() {
return _reference;
}
public SharedDeclarationNode sharedVariableAt_ifAbsent_(final String _aName, final st.gravel.support.jvm.Block0<SharedDeclarationNode> _aBlock) {
return st.gravel.support.jvm.ArrayExtensions.detect_ifNone_(_sharedVariables, new st.gravel.support.jvm.Predicate1<SharedDeclarationNode>() {
@Override
public boolean value_(final SharedDeclarationNode _each) {
return st.gravel.support.jvm.StringExtensions.equals_(_each.name(), _aName);
}
}, _aBlock);
}
public SharedDeclarationNode[] sharedVariables() {
return _sharedVariables;
}
@Override
public NamespaceNode sourceOn_(final StringBuilder _aStream) {
_aStream.append(_reference.toString());
return this;
}
@Override
public NamespaceNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
_aBlock.value_(this);
this.allNodesDo_(_aBlock);
return this;
}
@Override
public NamespaceNode withAllNodesDo_pruneWhere_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock, final st.gravel.support.jvm.Block1<Boolean, Node> _pruneBlock) {
_aBlock.value_(this);
this.allNodesDo_pruneWhere_(_aBlock, _pruneBlock);
return this;
}
public NamespaceNode withPrivateImports_publicImports_sharedVariables_(final AbsoluteReference[] _privateArray, final AbsoluteReference[] _publicArray, final SharedDeclarationNode[] _sharedVariablesArray) {
final NamespaceNode _cp;
_cp = this.copy();
_cp.pvtSetPrivateImports_(_privateArray);
_cp.pvtSetPublicImports_(_publicArray);
_cp.pvtSetSharedVariables_(_sharedVariablesArray);
return _cp;
}
public NamespaceNode withSharedVariable_(final SharedDeclarationNode _aSharedDeclarationNode) {
return this.copy().pvtSetSharedVariables_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_sharedVariables, _aSharedDeclarationNode));
}
@Override
public NamespaceNode withSourcePosition_(final SourcePosition _aSourcePosition) {
if (_sourcePosition == _aSourcePosition) {
return NamespaceNode.this;
}
return this.copy().pvtSetSourcePosition_(_aSourcePosition);
}
}