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.ClassNode;
import st.gravel.support.compiler.ast.NamespaceNode;
import st.gravel.support.compiler.ast.NodeVisitor;
import st.gravel.support.compiler.ast.Reference;
import st.gravel.support.compiler.ast.SourcePrinter;
import st.gravel.support.compiler.ast.SourcePosition;
public class PackageNode extends Node implements Cloneable {
public static PackageNode_Factory factory = new PackageNode_Factory();
ClassNode[] _classes;
st.gravel.core.Symbol _name;
NamespaceNode[] _namespaces;
public static class PackageNode_Factory extends Node_Factory {
public PackageNode basicNew() {
PackageNode newInstance = new PackageNode();
newInstance.initialize();
return newInstance;
}
public PackageNode empty() {
return this.name_classes_namespaces_(null, new ClassNode[] {}, new NamespaceNode[] {});
}
public PackageNode name_(final st.gravel.core.Symbol _aSymbol) {
return ((PackageNode) this.name_classes_namespaces_(_aSymbol, new ClassNode[] {}, new NamespaceNode[] {}));
}
public PackageNode name_classes_namespaces_(final st.gravel.core.Symbol _anUndefinedObject, final ClassNode[] _anArray, final NamespaceNode[] _anArray2) {
return this.basicNew().initializeName_classes_namespaces_(_anUndefinedObject, _anArray, _anArray2);
}
}
static public PackageNode _empty(Object receiver) {
return factory.empty();
}
static public PackageNode _name_(Object receiver, final st.gravel.core.Symbol _aSymbol) {
return factory.name_(_aSymbol);
}
static public PackageNode _name_classes_namespaces_(Object receiver, final st.gravel.core.Symbol _anUndefinedObject, final ClassNode[] _anArray, final NamespaceNode[] _anArray2) {
return factory.name_classes_namespaces_(_anUndefinedObject, _anArray, _anArray2);
}
@Override
public <X> X accept_(final NodeVisitor<X> _visitor) {
return _visitor.visitPackageNode_(this);
}
@Override
public PackageNode 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 PackageNode 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 PackageNode.this;
}
});
return this;
}
public ClassNode[] classes() {
return _classes;
}
public ClassNode classNodeAt_ifAbsent_(final Reference _reference, final st.gravel.support.jvm.Block0<ClassNode> _aBlock) {
return st.gravel.support.jvm.ArrayExtensions.detect_ifNone_(_classes, new st.gravel.support.jvm.Predicate1<ClassNode>() {
@Override
public boolean value_(final ClassNode _each) {
return st.gravel.support.jvm.ObjectExtensions.equals_(_each.reference(), _reference);
}
}, _aBlock);
}
public PackageNode copy() {
try {
PackageNode _temp1 = (PackageNode) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public PackageNode copyUpdateClassNode_do_(final Reference _aReference, final st.gravel.support.jvm.Block1<ClassNode, ClassNode> _aBlock) {
return this.copy().pvtSetClasses_(st.gravel.support.jvm.ArrayExtensions.collect_(_classes, ((st.gravel.support.jvm.Block1<ClassNode, ClassNode>) (new st.gravel.support.jvm.Block1<ClassNode, ClassNode>() {
@Override
public ClassNode value_(final ClassNode _each) {
if (st.gravel.support.jvm.ObjectExtensions.equals_(_each.reference(), _aReference)) {
return _aBlock.value_(_each);
} else {
return _each;
}
}
}))));
}
@Override
public boolean equals(final Object _anObject) {
if (!super.equals(_anObject)) {
return false;
}
if (this._classes == null) {
if (!(((PackageNode) _anObject)._classes == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._classes, ((PackageNode) _anObject)._classes)) {
return false;
}
}
if (this._name == null) {
if (!(((PackageNode) _anObject)._name == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ObjectExtensions.equals_(this._name, ((PackageNode) _anObject)._name)) {
return false;
}
}
if (this._namespaces == null) {
if (!(((PackageNode) _anObject)._namespaces == null)) {
return false;
}
} else {
if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._namespaces, ((PackageNode) _anObject)._namespaces)) {
return false;
}
}
return true;
}
public PackageNode_Factory factory() {
return factory;
}
@Override
public int hashCode() {
return (((this.factory() == null ? 0 : this.factory().hashCode()) ^ java.util.Arrays.hashCode(_classes)) ^ (_name == null ? 0 : _name.hashCode()));
}
public PackageNode initializeName_classes_namespaces_(final st.gravel.core.Symbol _anUndefinedObject, final ClassNode[] _anArray, final NamespaceNode[] _anArray2) {
_name = _anUndefinedObject;
_classes = _anArray;
_namespaces = _anArray2;
this.initialize();
return this;
}
@Override
public PackageNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) {
return this;
}
public st.gravel.core.Symbol name() {
return _name;
}
public NamespaceNode[] namespaces() {
return _namespaces;
}
@Override
public PackageNode nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
for (final ClassNode _temp1 : _classes) {
_aBlock.value_(_temp1);
}
for (final NamespaceNode _temp2 : _namespaces) {
_aBlock.value_(_temp2);
}
return this;
}
@Override
public PackageNode prettySourceOn_(final StringBuilder _aStream) {
SourcePrinter.factory.on_(_aStream).visit_(this);
return this;
}
@Override
public PackageNode 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 PackageNode pvtSetClasses_(final ClassNode[] _anArray) {
_classes = _anArray;
return this;
}
public PackageNode pvtSetNamespaces_(final NamespaceNode[] _anArray) {
_namespaces = _anArray;
return this;
}
public PackageNode pvtSetName_(final st.gravel.core.Symbol _aSymbol) {
_name = _aSymbol;
return this;
}
@Override
public PackageNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) {
_sourcePosition = _aSourcePosition;
return this;
}
@Override
public PackageNode sourceOn_(final StringBuilder _aStream) {
_aStream.append(_name);
return this;
}
@Override
public PackageNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
_aBlock.value_(this);
this.allNodesDo_(_aBlock);
return this;
}
@Override
public PackageNode 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 PackageNode withClass_(final ClassNode _aClassNode) {
return this.copy().pvtSetClasses_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_classes, _aClassNode));
}
public PackageNode withNamespace_(final NamespaceNode _aNamespaceNode) {
final NamespaceNode _current;
final NamespaceNode _merged;
_current = ((NamespaceNode) st.gravel.support.jvm.ArrayExtensions.detect_ifNone_(_namespaces, new st.gravel.support.jvm.Predicate1<NamespaceNode>() {
@Override
public boolean value_(final NamespaceNode _each) {
return st.gravel.support.jvm.ObjectExtensions.equals_(_each.reference(), _aNamespaceNode.reference());
}
}, ((st.gravel.support.jvm.Block0<NamespaceNode>) (new st.gravel.support.jvm.Block0<NamespaceNode>() {
@Override
public NamespaceNode value() {
return (NamespaceNode) null;
}
}))));
_merged = _current == null ? _aNamespaceNode : _current.mergeWith_(_aNamespaceNode);
return this.copy().pvtSetNamespaces_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_namespaces, _merged));
}
public PackageNode withName_(final st.gravel.core.Symbol _aSymbol) {
return this.copy().pvtSetName_(_aSymbol);
}
public PackageNode withPackage_(final PackageNode _aPackageNode) {
return PackageNode.factory.name_classes_namespaces_(_name, st.gravel.support.jvm.ArrayExtensions.copyWithAll_(_classes, _aPackageNode.classes()), st.gravel.support.jvm.ArrayExtensions.copyWithAll_(_namespaces, _aPackageNode.namespaces()));
}
@Override
public PackageNode withSourcePosition_(final SourcePosition _aSourcePosition) {
if (_sourcePosition == _aSourcePosition) {
return PackageNode.this;
}
return this.copy().pvtSetSourcePosition_(_aSourcePosition);
}
}