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); } }