Package st.gravel.support.compiler.ast

Source Code of st.gravel.support.compiler.ast.ClassNode$ClassNode_Factory

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 java.util.HashMap;
import st.gravel.support.compiler.ast.VariableDeclarationNode;
import st.gravel.support.compiler.ast.SharedDeclarationNode;
import st.gravel.support.compiler.ast.MethodNode;
import st.gravel.support.compiler.ast.EmptyTraitUsageNode;
import java.util.Map;
import st.gravel.support.compiler.ast.TraitUsageNode;
import st.gravel.support.compiler.ast.MetaclassNode;
import st.gravel.support.compiler.ast.NodeVisitor;
import st.gravel.support.compiler.ast.UpdateClassDiff;
import st.gravel.support.compiler.ast.AbsoluteReference;
import st.gravel.support.compiler.ast.SourceFile;
import st.gravel.support.compiler.ast.SystemNode;
import java.util.Set;
import java.util.HashSet;
import st.gravel.support.compiler.ast.Reference;
import st.gravel.support.compiler.ast.Node;
import st.gravel.support.compiler.ast.SourcePrinter;
import st.gravel.support.compiler.ast.SourcePosition;

public class ClassNode extends ClassDescriptionNode implements Cloneable {

  public static ClassNode_Factory factory = new ClassNode_Factory();

  boolean _isExtension;

  boolean _isTrait;

  MetaclassNode _metaclassNode;

  st.gravel.core.Symbol _name;

  st.gravel.core.Symbol[] _namespace;

  Map<String, String> _properties;

  String _superclassPath;

  public static class ClassNode_Factory extends ClassDescriptionNode_Factory {

    public ClassNode basicNew() {
      ClassNode newInstance = new ClassNode();
      newInstance.initialize();
      return newInstance;
    }

    public ClassNode name_namespacePath_(final st.gravel.core.Symbol _aSymbol, final st.gravel.core.Symbol[] _namespacePath) {
      return ((ClassNode) this.name_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(_aSymbol, null, new java.util.HashMap<String, String>(), new VariableDeclarationNode[] {}, new VariableDeclarationNode[] {}, new SharedDeclarationNode[] {}, new MethodNode[] {}, new MethodNode[] {}, _namespacePath, false, false, EmptyTraitUsageNode.factory.basicNew(), EmptyTraitUsageNode.factory.basicNew()));
    }

    public ClassNode name_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(final st.gravel.core.Symbol _aSymbol, final String _superclassPath, final Map<String, String> _properties, final VariableDeclarationNode[] _instVars, final VariableDeclarationNode[] _classInstVars, final SharedDeclarationNode[] _sharedVariables, final MethodNode[] _methods, final MethodNode[] _classMethods, final st.gravel.core.Symbol[] _namespace, final boolean _isExtension, final boolean _isTrait, final TraitUsageNode _traitUsage, final TraitUsageNode _classTraitUsage) {
      return this.basicNew().initializeName_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(_aSymbol, _superclassPath, _properties, _instVars, _classInstVars, _sharedVariables, _methods, _classMethods, _namespace, _isExtension, _isTrait, _traitUsage, _classTraitUsage);
    }
  }

  static public ClassNode _name_namespacePath_(Object receiver, final st.gravel.core.Symbol _aSymbol, final st.gravel.core.Symbol[] _namespacePath) {
    return factory.name_namespacePath_(_aSymbol, _namespacePath);
  }

  static public ClassNode _name_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(Object receiver, final st.gravel.core.Symbol _aSymbol, final String _superclassPath, final Map<String, String> _properties, final VariableDeclarationNode[] _instVars, final VariableDeclarationNode[] _classInstVars, final SharedDeclarationNode[] _sharedVariables, final MethodNode[] _methods, final MethodNode[] _classMethods, final st.gravel.core.Symbol[] _namespace, final boolean _isExtension, final boolean _isTrait, final TraitUsageNode _traitUsage, final TraitUsageNode _classTraitUsage) {
    return factory.name_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(_aSymbol, _superclassPath, _properties, _instVars, _classInstVars, _sharedVariables, _methods, _classMethods, _namespace, _isExtension, _isTrait, _traitUsage, _classTraitUsage);
  }

  @Override
  public <X> X accept_(final NodeVisitor<X> _visitor) {
    return _visitor.visitClassNode_(this);
  }

  @Override
  public ClassNode 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 ClassNode.this;
    }
    _scn.allMethodsIn_do_(_aSystemNode, _aBlock);
    return this;
  }

  @Override
  public ClassNode 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 ClassNode 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 ClassNode.this;
      }
    });
    return this;
  }

  public ClassNode asTrait() {
    ClassNode _temp1 = this.copy();
    _temp1.pvtSetTrait_(true);
    return _temp1;
  }

  public ClassNode beExtension() {
    ClassNode _temp1 = this.copy();
    _temp1.pvtSetExtension_(true);
    _temp1.pvtSetProperties_(new java.util.HashMap<String, String>());
    return _temp1;
  }

  public MethodNode[] classMethods() {
    return _metaclassNode.methods();
  }

  public TraitUsageNode classTraitUsage() {
    return _metaclassNode.traitUsage();
  }

  public ClassNode copy() {
    try {
      ClassNode _temp1 = (ClassNode) this.clone();
      _temp1.postCopy();
      return _temp1;
    } catch (CloneNotSupportedException e) {
      throw new RuntimeException(e);
    }
  }

  @Override
  public ClassNode 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 ClassNode 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 UpdateClassDiff diffTo_(final ClassNode _aClassNode) {
    if (!st.gravel.support.jvm.ObjectExtensions.equals_(_aClassNode.name(), _name)) {
      st.gravel.support.jvm.ObjectExtensions.halt(_aClassNode);
    }
    if (!st.gravel.support.jvm.ArrayExtensions.equals_(_aClassNode.namespace(), _namespace)) {
      st.gravel.support.jvm.ObjectExtensions.halt(_aClassNode);
    }
    if (!st.gravel.support.jvm.StringExtensions.equals_(_aClassNode.superclassPath(), _superclassPath)) {
      st.gravel.support.jvm.ObjectExtensions.halt(_aClassNode);
    }
    if (!st.gravel.support.jvm.DictionaryExtensions.equals_(_aClassNode.properties(), _properties)) {
      st.gravel.support.jvm.ObjectExtensions.halt(_aClassNode);
    }
    if (!st.gravel.support.jvm.BooleanExtensions.equals_(_aClassNode.isExtension(), _isExtension)) {
      st.gravel.support.jvm.ObjectExtensions.halt(_aClassNode);
    }
    if (!st.gravel.support.jvm.BooleanExtensions.equals_(_aClassNode.isTrait(), _isTrait)) {
      st.gravel.support.jvm.ObjectExtensions.halt(_aClassNode);
    }
    return UpdateClassDiff.factory.reference_superclassReference_thisDiff_metaDiff_(_aClassNode.reference(), ((AbsoluteReference) _aClassNode.superclassReference()), this.diffToClassDescriptionNode_(_aClassNode), _metaclassNode.diffToClassDescriptionNode_(_aClassNode.metaclassNode()));
  }

  @Override
  public boolean equals(final Object _anObject) {
    if (!super.equals(_anObject)) {
      return false;
    }
    if (this._name == null) {
      if (!(((ClassNode) _anObject)._name == null)) {
        return false;
      }
    } else {
      if (!st.gravel.support.jvm.ObjectExtensions.equals_(this._name, ((ClassNode) _anObject)._name)) {
        return false;
      }
    }
    if (this._namespace == null) {
      if (!(((ClassNode) _anObject)._namespace == null)) {
        return false;
      }
    } else {
      if (!st.gravel.support.jvm.ArrayExtensions.equals_(this._namespace, ((ClassNode) _anObject)._namespace)) {
        return false;
      }
    }
    if (this._superclassPath == null) {
      if (!(((ClassNode) _anObject)._superclassPath == null)) {
        return false;
      }
    } else {
      if (!st.gravel.support.jvm.StringExtensions.equals_(this._superclassPath, ((ClassNode) _anObject)._superclassPath)) {
        return false;
      }
    }
    if (this._properties == null) {
      if (!(((ClassNode) _anObject)._properties == null)) {
        return false;
      }
    } else {
      if (!st.gravel.support.jvm.DictionaryExtensions.equals_(this._properties, ((ClassNode) _anObject)._properties)) {
        return false;
      }
    }
    if (!st.gravel.support.jvm.BooleanExtensions.equals_(this._isExtension, ((ClassNode) _anObject)._isExtension)) {
      return false;
    }
    if (this._metaclassNode == null) {
      if (!(((ClassNode) _anObject)._metaclassNode == null)) {
        return false;
      }
    } else {
      if (!st.gravel.support.jvm.ObjectExtensions.equals_(this._metaclassNode, ((ClassNode) _anObject)._metaclassNode)) {
        return false;
      }
    }
    if (!st.gravel.support.jvm.BooleanExtensions.equals_(this._isTrait, ((ClassNode) _anObject)._isTrait)) {
      return false;
    }
    return true;
  }

  public ClassNode_Factory factory() {
    return factory;
  }

  @Override
  public SourceFile findSourceFile() {
    if (_sourcePosition != null) {
      return _sourcePosition.sourceFile();
    }
    if (_metaclassNode.sourcePosition() == null) {
      return null;
    }
    return _metaclassNode.sourcePosition().sourceFile();
  }

  @Override
  public ClassNode flattenTraitsIn_(final SystemNode _aSystemNode) {
    final MetaclassNode _newMetaclassNode;
    final ClassNode _newClassNode;
    _newMetaclassNode = _metaclassNode.flattenTraitsIn_(_aSystemNode);
    _newClassNode = _traitUsage.flattenClassNode_in_(this, _aSystemNode);
    if ((_newClassNode == this) && (_newMetaclassNode == _metaclassNode)) {
      return ClassNode.this;
    }
    return _newClassNode.copy().pvtSetMetaclassNode_(_newMetaclassNode);
  }

  @Override
  public int hashCode() {
    return ((((super.hashCode() ^ (_name == null ? 0 : _name.hashCode())) ^ java.util.Arrays.hashCode(_namespace)) ^ _superclassPath.hashCode()) ^ _properties.hashCode());
  }

  @Override
  public ClassNode initializeMethods_instVars_(final MethodNode[] _anOrderedCollection, final VariableDeclarationNode[] _anArray) {
    _methods = _anOrderedCollection;
    _instVars = _anArray;
    this.initialize();
    return this;
  }

  public ClassNode initializeName_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(final st.gravel.core.Symbol _aSymbol, final String _aString, final Map<String, String> _aDictionary, final VariableDeclarationNode[] _anArray, final VariableDeclarationNode[] _classInstVars, final SharedDeclarationNode[] _sharedVariables, final MethodNode[] _anOrderedCollection, final MethodNode[] _classMethods, final st.gravel.core.Symbol[] _anArray2, final boolean _aBoolean, final boolean _aBoolean2, final TraitUsageNode _aTraitUsageNode, final TraitUsageNode _classTraitUsage) {
    _name = _aSymbol;
    _superclassPath = _aString;
    _properties = _aDictionary;
    _instVars = _anArray;
    _methods = _anOrderedCollection;
    _namespace = _anArray2;
    _isExtension = _aBoolean;
    _isTrait = _aBoolean2;
    _traitUsage = _aTraitUsageNode;
    _metaclassNode = MetaclassNode.factory.classNode_methods_instVars_sharedVariables_traitUsage_(this, _classMethods, _classInstVars, _sharedVariables, _classTraitUsage);
    this.initialize();
    return this;
  }

  @Override
  public boolean isClassNode() {
    return true;
  }

  public boolean isExtension() {
    return _isExtension;
  }

  @Override
  public boolean isNilClass() {
    final String _isNilClass;
    String _temp1 = _properties.get("isNilClass");
    _isNilClass = ((String) _temp1);
    return st.gravel.support.jvm.StringExtensions.equals_(_isNilClass, "true");
  }

  @Override
  public boolean isSystemTest() {
    final String _prop;
    String _temp1 = _properties.get("isSystemTest");
    _prop = ((String) _temp1);
    return (_prop != null) && (!st.gravel.support.jvm.StringExtensions.equals_(_prop, "false"));
  }

  @Override
  public boolean isTrait() {
    return _isTrait;
  }

  public st.gravel.core.Symbol[] javaClassPath() {
    final Object _temp1 = new Object();
    try {
      final String _javaClass;
      _javaClass = ((String) st.gravel.support.jvm.DictionaryExtensions.at_ifAbsent_(_properties, "javaClass", ((st.gravel.support.jvm.Block0<String>) (new st.gravel.support.jvm.Block0<String>() {

        @Override
        public String value() {
          throw new NonLocalReturn(null, _temp1);
        }
      }))));
      return ((st.gravel.core.Symbol[]) st.gravel.support.jvm.ArrayExtensions.collect_(st.gravel.support.jvm.StringExtensions.tokensBasedOn_(_javaClass, '.'), ((st.gravel.support.jvm.Block1<st.gravel.core.Symbol, String>) (new st.gravel.support.jvm.Block1<st.gravel.core.Symbol, String>() {

        @Override
        public st.gravel.core.Symbol value_(final String _each) {
          return (st.gravel.core.Symbol) st.gravel.core.Symbol.value(_each);
        }
      }))));
    } catch (NonLocalReturn nlr) {
      if (nlr.marker == _temp1) {
        return (st.gravel.core.Symbol[]) nlr.returnValue;
      } else {
        throw nlr;
      }
    }
  }

  public AbsoluteReference javaClassReference() {
    final st.gravel.core.Symbol[] _path;
    _path = this.javaClassPath();
    if (_path == null) {
      return null;
    }
    return AbsoluteReference.factory.path_(_path);
  }

  @Override
  public ClassNode localVarNamesDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) {
    return this;
  }

  public ClassNode mergedWithExtension_(final ClassNode _aClassNode) {
    return this.withMethods_classMethods_isExtension_(this.mergeMethods_with_(_methods, _aClassNode.methods()), this.mergeMethods_with_(this.classMethods(), _aClassNode.classMethods()), false);
  }

  public MethodNode[] mergeMethods_with_(final MethodNode[] _originalMethods, final MethodNode[] _extensionMethods) {
    final java.util.Set<String>[] _s;
    _s = new java.util.Set[1];
    _s[0] = new java.util.HashSet();
    for (final MethodNode _m : _originalMethods) {
      _s[0].add(_m.selector());
    }
    for (final MethodNode _m : _extensionMethods) {
      if (_s[0].contains(_m.selector())) {
        throw new RuntimeException("Override: " + _m.selector());
      }
    }
    return st.gravel.support.jvm.ArrayExtensions.copyWithAll_(_originalMethods, _extensionMethods);
  }

  @Override
  public MetaclassNode meta() {
    return _metaclassNode;
  }

  public MetaclassNode metaclassNode() {
    return _metaclassNode;
  }

  @Override
  public st.gravel.core.Symbol name() {
    return _name;
  }

  @Override
  public st.gravel.core.Symbol[] namespace() {
    return _namespace;
  }

  @Override
  public ClassNode 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;
    final String _pnString;
    _sp = super.packageName();
    if (_sp != null) {
      return _sp;
    }
    String _temp1 = _properties.get("packageName");
    _pnString = ((String) _temp1);
    if (_pnString == null) {
      return null;
    }
    return st.gravel.core.Symbol.value(_pnString);
  }

  public ClassNode postCopy() {
    _metaclassNode = MetaclassNode.factory.classNode_methods_instVars_sharedVariables_traitUsage_(this, _metaclassNode.methods(), _metaclassNode.instVars(), _metaclassNode.sharedVariables(), _metaclassNode.traitUsage());
    return this;
  }

  @Override
  public ClassNode prettySourceOn_(final StringBuilder _aStream) {
    SourcePrinter.factory.on_(_aStream).visit_(this);
    return this;
  }

  @Override
  public ClassNode 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 Map<String, String> properties() {
    return _properties;
  }

  public ClassNode pvtSetClassMethods_(final MethodNode[] _anArray) {
    return this.pvtSetMetaclassNode_(_metaclassNode.withMethods_(_anArray));
  }

  public ClassNode pvtSetExtension_(final boolean _aBoolean) {
    _isExtension = _aBoolean;
    return this;
  }

  @Override
  public ClassNode pvtSetInstVars_(final VariableDeclarationNode[] _arr) {
    _instVars = _arr;
    return this;
  }

  public ClassNode pvtSetMetaclassNode_(final MetaclassNode _aMetaclassNode) {
    if (_metaclassNode == _aMetaclassNode) {
      return ClassNode.this;
    }
    _metaclassNode = _aMetaclassNode.pvtWithClassNode_(this);
    return this;
  }

  @Override
  public ClassNode pvtSetMethods_(final MethodNode[] _anArray) {
    _methods = _anArray;
    return this;
  }

  public ClassNode pvtSetProperties_(final Map<String, String> _aDictionary) {
    _properties = _aDictionary;
    return this;
  }

  @Override
  public ClassNode pvtSetSourcePosition_(final SourcePosition _aSourcePosition) {
    _sourcePosition = _aSourcePosition;
    return this;
  }

  public ClassNode pvtSetSuperclassPath_(final String _aString) {
    _superclassPath = _aString;
    return this;
  }

  @Override
  public ClassNode pvtSetTraitUsage_(final TraitUsageNode _aTraitUsageNode) {
    _traitUsage = _aTraitUsageNode;
    return this;
  }

  public ClassNode pvtSetTrait_(final boolean _aBoolean) {
    _isTrait = _aBoolean;
    return this;
  }

  @Override
  public AbsoluteReference reference() {
    return AbsoluteReference.factory.path_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_namespace, _name));
  }

  @Override
  public ClassNode selectorsDo_(final st.gravel.support.jvm.Block1<Object, String> _aBlock) {
    for (final MethodNode _m : _methods) {
      _aBlock.value_(_m.selector());
    }
    return this;
  }

  @Override
  public ClassNode sourceOn_(final StringBuilder _aStream) {
    _aStream.append(_name);
    if (_isExtension) {
      _aStream.append(" (extension)");
    }
    if (_isTrait) {
      _aStream.append(" (trait)");
    }
    return this;
  }

  public String superclassPath() {
    return _superclassPath;
  }

  @Override
  public Reference superclassReference() {
    final st.gravel.core.Symbol[] _path;
    if (_superclassPath == null) {
      return null;
    }
    _path = st.gravel.support.jvm.ArrayExtensions.collect_(st.gravel.support.jvm.StringExtensions.tokensBasedOn_(_superclassPath, '.'), ((st.gravel.support.jvm.Block1<st.gravel.core.Symbol, String>) (new st.gravel.support.jvm.Block1<st.gravel.core.Symbol, String>() {

      @Override
      public st.gravel.core.Symbol value_(final String _str) {
        return (st.gravel.core.Symbol) st.gravel.core.Symbol.value(_str);
      }
    })));
    if (st.gravel.support.jvm.IntegerExtensions.equals_(_path.length, 1)) {
      return AbsoluteReference.factory.path_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_namespace, _path[0]));
    }
    return AbsoluteReference.factory.path_(_path);
  }

  @Override
  public ClassNode withAllNodesDo_(final st.gravel.support.jvm.Block1<Object, Node> _aBlock) {
    _aBlock.value_(this);
    this.allNodesDo_(_aBlock);
    return this;
  }

  @Override
  public ClassNode 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 ClassNode withClassInstVar_(final VariableDeclarationNode _aVariableDeclarationNode) {
    return this.copy().pvtSetMetaclassNode_(_metaclassNode.withInstVar_(_aVariableDeclarationNode));
  }

  public ClassNode withClassMethodNode_(final MethodNode _aMethodNode) {
    return this.copy().pvtSetMetaclassNode_(_metaclassNode.withMethodNode_(_aMethodNode));
  }

  public ClassNode withClassTrait_(final TraitUsageNode _aTraitUsageNode) {
    return this.copy().pvtSetMetaclassNode_(_metaclassNode.withTrait_(_aTraitUsageNode));
  }

  @Override
  public ClassNode withExtraMethods_(final MethodNode[] _extraMethods) {
    return st.gravel.support.jvm.ArrayExtensions.inject_into_(_extraMethods, this, ((st.gravel.support.jvm.Block2<ClassNode, ClassNode, MethodNode>) (new st.gravel.support.jvm.Block2<ClassNode, ClassNode, MethodNode>() {

      @Override
      public ClassNode value_value_(final ClassNode _cdn, final MethodNode _m) {
        if (_cdn.includesSelector_(_m.selector())) {
          return _cdn;
        } else {
          return _cdn.withMethodNode_(_m);
        }
      }
    })));
  }

  @Override
  public ClassNode withInstVar_(final VariableDeclarationNode _aVariableDeclarationNode) {
    return this.copy().pvtSetInstVars_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_instVars, _aVariableDeclarationNode));
  }

  @Override
  public ClassNode 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 ClassNode withMethodNode_ofTrait_(final MethodNode _aMethodNode, final Reference _aReference) {
    return this.withMethodNode_(_aMethodNode.ofTrait_(_aReference));
  }

  @Override
  public ClassNode withMethods_(final MethodNode[] _anArray) {
    return this.copy().pvtSetMethods_(_anArray);
  }

  public ClassNode withMethods_classMethods_isExtension_(final MethodNode[] _anArray, final MethodNode[] _anArray2, final boolean _aBoolean) {
    ClassNode _temp1 = this.copy();
    _temp1.pvtSetMethods_(_anArray);
    _temp1.pvtSetClassMethods_(_anArray2);
    _temp1.pvtSetExtension_(_aBoolean);
    return _temp1;
  }

  public ClassNode withProperties_(final Map<String, String> _aDictionary) {
    return this.copy().pvtSetProperties_(_aDictionary);
  }

  public ClassNode withPropertyAt_put_(final String _aKey, final String _aValue) {
    return this.withProperties_(st.gravel.support.jvm.DictionaryExtensions.copyAt_put_(_properties, _aKey, _aValue));
  }

  public ClassNode withSharedVariable_(final SharedDeclarationNode _aSharedDeclarationNode) {
    return this.copy().pvtSetMetaclassNode_(_metaclassNode.withSharedVariable_(_aSharedDeclarationNode));
  }

  @Override
  public ClassNode withSourcePosition_(final SourcePosition _aSourcePosition) {
    if (_sourcePosition == _aSourcePosition) {
      return ClassNode.this;
    }
    return this.copy().pvtSetSourcePosition_(_aSourcePosition);
  }

  public ClassNode withSuperclassPath_(final String _aString) {
    return this.copy().pvtSetSuperclassPath_(_aString);
  }

  @Override
  public ClassNode withTrait_(final TraitUsageNode _aTraitUsageNode) {
    return this.copy().pvtSetTraitUsage_(_traitUsage.withTrait_(_aTraitUsageNode));
  }
}
TOP

Related Classes of st.gravel.support.compiler.ast.ClassNode$ClassNode_Factory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.