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.ClassDescriptionNode; import st.gravel.support.compiler.ast.ClassDescriptionNode.ClassDescriptionNode_Factory; import st.gravel.support.compiler.ast.ClassNode; import st.gravel.support.compiler.ast.MethodNode; import st.gravel.support.compiler.ast.VariableDeclarationNode; import st.gravel.support.compiler.ast.SharedDeclarationNode; import st.gravel.support.compiler.ast.TraitUsageNode; import st.gravel.support.compiler.ast.NodeVisitor; import st.gravel.support.compiler.ast.SourceFile; import st.gravel.support.compiler.ast.SystemNode; import st.gravel.support.compiler.ast.Reference; import st.gravel.support.compiler.ast.ClassReference; import st.gravel.support.compiler.ast.AbsoluteReference; import st.gravel.support.compiler.ast.Node; import st.gravel.support.compiler.ast.SourcePrinter; import st.gravel.support.compiler.ast.SourcePosition; public class MetaclassNode extends ClassDescriptionNode implements Cloneable { public static MetaclassNode_Factory factory = new MetaclassNode_Factory(); ClassNode _classNode; SharedDeclarationNode[] _sharedVariables; public static class MetaclassNode_Factory extends ClassDescriptionNode_Factory { public MetaclassNode basicNew() { MetaclassNode newInstance = new MetaclassNode(); newInstance.initialize(); return newInstance; } public MetaclassNode classNode_methods_instVars_sharedVariables_traitUsage_(final ClassNode _aClassNode, final MethodNode[] _anOrderedCollection, final VariableDeclarationNode[] _anArray, final SharedDeclarationNode[] _sharedVariables, final TraitUsageNode _traitUsage) { return this.basicNew().initializeClassNode_methods_instVars_sharedVariables_traitUsage_(_aClassNode, _anOrderedCollection, _anArray, _sharedVariables, _traitUsage); } } static public MetaclassNode _classNode_methods_instVars_sharedVariables_traitUsage_(Object receiver, final ClassNode _aClassNode, final MethodNode[] _anOrderedCollection, final VariableDeclarationNode[] _anArray, final SharedDeclarationNode[] _sharedVariables, final TraitUsageNode _traitUsage) { return factory.classNode_methods_instVars_sharedVariables_traitUsage_(_aClassNode, _anOrderedCollection, _anArray, _sharedVariables, _traitUsage); } @Override public <X> X accept_(final NodeVisitor<X> _visitor) { return _visitor.visitMetaclassNode_(this); } @Override public MetaclassNode allMethodsIn_do_(final SystemNode _aSystemNode, final st.gravel.support.jvm.Block1<Object, MethodNode> _aBlock) { final ClassDescriptionNode _scn; for (final MethodNode _temp1 : _methods) { _aBlock.value_(_temp1); } _scn = this.superclassNodeIn_(_aSystemNode); if (_scn == null) { return MetaclassNode.this; } _scn.allMethodsIn_do_(_aSystemNode, _aBlock); return this; } @Override public MetaclassNode 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 MetaclassNode 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 MetaclassNode.this; } }); return this; } public ClassNode classNode() { return _classNode; } public MetaclassNode copy() { try { MetaclassNode _temp1 = (MetaclassNode) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } @Override public MetaclassNode copyRemoveSelector_(final String _selector) { return this.copy().pvtSetMethods_(st.gravel.support.jvm.ArrayExtensions.reject_(_methods, new st.gravel.support.jvm.Predicate1<MethodNode>() { @Override public boolean value_(final MethodNode _each) { return st.gravel.support.jvm.StringExtensions.equals_(_each.selector(), _selector); } })); } @Override public MetaclassNode copyReplaceMethodNode_(final MethodNode _aMethodNode) { return this.copy().pvtSetMethods_(st.gravel.support.jvm.ArrayExtensions.collect_(_methods, ((st.gravel.support.jvm.Block1<MethodNode, MethodNode>) (new st.gravel.support.jvm.Block1<MethodNode, MethodNode>() { @Override public MethodNode value_(final MethodNode _each) { if (st.gravel.support.jvm.StringExtensions.equals_(_each.selector(), _aMethodNode.selector())) { return _aMethodNode; } else { return _each; } } })))); } public MetaclassNode_Factory factory() { return factory; } @Override public SourceFile findSourceFile() { if (_sourcePosition != null) { return _sourcePosition.sourceFile(); } if (_classNode.sourcePosition() == null) { return null; } return _classNode.sourcePosition().sourceFile(); } @Override public MetaclassNode flattenTraitsIn_(final SystemNode _aSystemNode) { return _traitUsage.flattenMetaclassNode_in_(this, _aSystemNode); } public MetaclassNode initializeClassNode_methods_instVars_sharedVariables_traitUsage_(final ClassNode _aClassNode, final MethodNode[] _anOrderedCollection, final VariableDeclarationNode[] _anArray, final SharedDeclarationNode[] _aSharedVariables, final TraitUsageNode _anObject) { _classNode = _aClassNode; _methods = _anOrderedCollection; _instVars = _anArray; _sharedVariables = _aSharedVariables; _traitUsage = _anObject; this.initialize(); return this; } @Override public MetaclassNode initializeMethods_instVars_(final MethodNode[] _anOrderedCollection, final VariableDeclarationNode[] _anArray) { _methods = _anOrderedCollection; _instVars = _anArray; this.initialize(); return this; } @Override public VariableDeclarationNode[] instVars() { return _instVars; } @Override public boolean isMeta() { return true; } @Override public boolean isNilClass() { return false; } @Override public boolean isSystemTest() { return false; } @Override public boolean isTrait() { return _classNode.isTrait(); } @Override public MetaclassNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) { return this; } @Override public MetaclassNode meta() { return this; } @Override public st.gravel.core.Symbol[] namespace() { return _classNode.namespace(); } @Override public MetaclassNode nodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) { for (final MethodNode _temp1 : _methods) { _aBlock.value_(_temp1); } for (final VariableDeclarationNode _temp2 : _instVars) { _aBlock.value_(_temp2); } return this; } @Override public st.gravel.core.Symbol packageName() { final st.gravel.core.Symbol _sp; _sp = super.packageName(); if (_sp != null) { return _sp; } return _classNode.packageName(); } @Override public MetaclassNode prettySourceOn_(final StringBuilder _aStream) { SourcePrinter.factory.on_(_aStream).visit_(this); return this; } @Override public MetaclassNode printOn_(final StringBuilder _aStream) { super.printOn_(_aStream); _aStream.append('['); _aStream.append(']'); return this; } public MetaclassNode pvtSetClassNode_(final ClassNode _aClassNode) { _classNode = _aClassNode; return this; } @Override public MetaclassNode pvtSetInstVars_(final VariableDeclarationNode[] _arr) { _instVars = _arr; return this; } @Override public MetaclassNode pvtSetMethods_(final MethodNode[] _anArray) { _methods = _anArray; return this; } public MetaclassNode pvtSetSharedVariables_(final SharedDeclarationNode[] _anArray) { _sharedVariables = _anArray; return this; } @Override public MetaclassNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) { _sourcePosition = _aSourcePosition; return this; } @Override public MetaclassNode pvtSetTraitUsage_(final TraitUsageNode _aTraitUsageNode) { _traitUsage = _aTraitUsageNode; return this; } public MetaclassNode pvtWithClassNode_(final ClassNode _aClassNode) { if (_classNode == _aClassNode) { return MetaclassNode.this; } return this.copy().pvtSetClassNode_(_aClassNode); } @Override public Reference reference() { return ClassReference.factory.reference_(_classNode.reference()); } @Override public MetaclassNode selectorsDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) { for (final MethodNode _m : _methods) { _aBlock.value_(_m.selector()); } return this; } 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 MetaclassNode sourceOn_(final StringBuilder _aStream) { _classNode.sourceOn_(_aStream); _aStream.append(" class"); return this; } @Override public Reference superclassReference() { final Reference _csr; _csr = _classNode.superclassReference(); if (_csr == null) { return null; } return ClassReference.factory.reference_(((AbsoluteReference) _csr)); } @Override public Reference superclassReferenceForMethodLookup() { final Reference _csr; _csr = _classNode.superclassReference(); if (_csr == null) { return 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"), st.gravel.core.Symbol.value("Class") }); } return ClassReference.factory.reference_(((AbsoluteReference) _csr)); } @Override public MetaclassNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) { _aBlock.value_(this); this.allNodesDo_(_aBlock); return this; } @Override public MetaclassNode 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; } @Override public MetaclassNode withExtraMethods_(final MethodNode[] _extraMethods) { return st.gravel.support.jvm.ArrayExtensions.inject_into_(_extraMethods, this, ((st.gravel.support.jvm.Block2<MetaclassNode, MetaclassNode, MethodNode>) (new st.gravel.support.jvm.Block2<MetaclassNode, MetaclassNode, MethodNode>() { @Override public MetaclassNode value_value_(final MetaclassNode _cdn, final MethodNode _m) { if (_cdn.includesSelector_(_m.selector())) { return _cdn; } else { return _cdn.withMethodNode_(_m); } } }))); } @Override public MetaclassNode withInstVar_(final VariableDeclarationNode _aVariableDeclarationNode) { return this.copy().pvtSetInstVars_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_instVars, _aVariableDeclarationNode)); } @Override public MetaclassNode withMethodNode_(final MethodNode _aMethodNode) { final MethodNode _current; _current = this.methodOrNilAt_(_aMethodNode.selector()); if (_current != null) { throw new RuntimeException("Duplicate selector: " + _aMethodNode.selector()); } return this.copy().pvtSetMethods_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_methods, _aMethodNode)); } @Override public MetaclassNode withMethodNode_ofTrait_(final MethodNode _aMethodNode, final Reference _aReference) { return this.withMethodNode_(_aMethodNode.ofTrait_(_aReference)); } @Override public MetaclassNode withMethods_(final MethodNode[] _anArray) { return this.copy().pvtSetMethods_(_anArray); } public MetaclassNode withSharedVariable_(final SharedDeclarationNode _aSharedDeclarationNode) { return this.copy().pvtSetSharedVariables_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_sharedVariables, _aSharedDeclarationNode)); } @Override public MetaclassNode withSourcePosition_(final SourcePosition _aSourcePosition) { if (_sourcePosition == _aSourcePosition) { return MetaclassNode.this; } return this.copy().pvtSetSourcePosition_(_aSourcePosition); } @Override public MetaclassNode withTrait_(final TraitUsageNode _aTraitUsageNode) { return this.copy().pvtSetTraitUsage_(_traitUsage.withTrait_(_aTraitUsageNode)); } }