Package st.gravel.support.compiler.ast

Source Code of st.gravel.support.compiler.ast.PackageNodeMerger$PackageNodeMerger_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.SystemDefinitionNode;
import st.gravel.support.compiler.ast.SystemNode;
import java.util.Map;
import st.gravel.support.compiler.ast.Reference;
import st.gravel.support.compiler.ast.ClassNode;
import st.gravel.support.compiler.ast.ClassDescriptionNode;
import st.gravel.support.compiler.ast.NamespaceNode;
import java.util.HashMap;
import st.gravel.support.compiler.ast.AbsoluteReference;
import st.gravel.support.compiler.ast.PackageNode;

public class PackageNodeMerger extends Object implements Cloneable {

  public static PackageNodeMerger_Factory factory = new PackageNodeMerger_Factory();

  SystemDefinitionNode _systemDefinitionNode;

  public static class PackageNodeMerger_Factory extends st.gravel.support.jvm.SmalltalkFactory {

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

    public PackageNodeMerger systemDefinitionNode_(final SystemDefinitionNode _aSystemDefinitionNode) {
      return ((PackageNodeMerger) this.basicNew().initializeSystemDefinitionNode_(_aSystemDefinitionNode));
    }
  }

  static public PackageNodeMerger _systemDefinitionNode_(Object receiver, final SystemDefinitionNode _aSystemDefinitionNode) {
    return factory.systemDefinitionNode_(_aSystemDefinitionNode);
  }

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

  public PackageNodeMerger_Factory factory() {
    return factory;
  }

  public PackageNodeMerger initialize() {
    return this;
  }

  public PackageNodeMerger initializeSystemDefinitionNode_(final SystemDefinitionNode _aSystemDefinitionNode) {
    _systemDefinitionNode = _aSystemDefinitionNode;
    this.initialize();
    return this;
  }

  public SystemNode load() {
    final Map<Reference, ClassNode>[] _classNodes;
    final Map<Reference, ClassDescriptionNode>[] _classDescriptionNodes;
    final Map<Reference, NamespaceNode>[] _namespaceNodes;
    _classDescriptionNodes = new Map[1];
    _classNodes = new Map[1];
    _namespaceNodes = new Map[1];
    _classNodes[0] = new java.util.HashMap<Reference, ClassNode>();
    _namespaceNodes[0] = new java.util.HashMap<Reference, NamespaceNode>();
    this.packageClassNodesDo_(new st.gravel.support.jvm.Block1<Object, ClassNode>() {

      @Override
      public Object value_(final ClassNode _classNode) {
        if (!_classNode.isExtension()) {
          final Reference _reference;
          _reference = _classNode.reference();
          if (_classNodes[0].containsKey(_reference)) {
            throw new RuntimeException("Class " + _reference.toString() + " defined twice");
          }
          return _classNodes[0].put(_reference, _classNode);
        }
        return PackageNodeMerger.this;
      }
    });
    this.packageClassNodesDo_(new st.gravel.support.jvm.Block1<Object, ClassNode>() {

      @Override
      public Object value_(final ClassNode _classNode) {
        if (_classNode.isExtension()) {
          final Reference _reference;
          _reference = _classNode.reference();
          if (!_classNodes[0].containsKey(_reference)) {
            throw new RuntimeException("Can\'t extend Class " + _reference.toString() + "; not defined yet");
          }
          return _classNodes[0].put(_reference, _classNodes[0].get(_reference).mergedWithExtension_(_classNode));
        }
        return PackageNodeMerger.this;
      }
    });
    _classDescriptionNodes[0] = new java.util.HashMap<Reference, ClassDescriptionNode>();
    for (final ClassNode _classNode : _classNodes[0].values()) {
      _classDescriptionNodes[0].put(_classNode.reference(), _classNode);
      _classDescriptionNodes[0].put(_classNode.metaclassNode().reference(), _classNode.metaclassNode());
    }
    this.packageNamespaceNodesDo_(new st.gravel.support.jvm.Block1<Object, NamespaceNode>() {

      @Override
      public Object value_(final NamespaceNode _namespaceNode) {
        final Reference _reference;
        _reference = _namespaceNode.reference();
        if (_namespaceNodes[0].containsKey(_reference)) {
          return _namespaceNodes[0].put(_reference, _namespaceNode.mergeWith_(_namespaceNodes[0].get(_reference)));
        } else {
          return _namespaceNodes[0].put(_reference, _namespaceNode);
        }
      }
    });
    for (final Reference _ref : _classNodes[0].keySet()) {
      final AbsoluteReference _namespace;
      _namespace = _ref.namespace();
      NamespaceNode _temp1 = _namespaceNodes[0].get(_namespace);
      if (_temp1 == null) {
        NamespaceNode _temp2 = NamespaceNode.factory.for_(_namespace);
        _namespaceNodes[0].put(_namespace, _temp2);
        _temp1 = _temp2;
      }
    }
    return SystemNode.factory.classDescriptionNodes_namespaceNodes_(_classDescriptionNodes[0], _namespaceNodes[0]).flattenTraits();
  }

  public PackageNodeMerger packageClassNodesDo_(final st.gravel.support.jvm.Block1<Object, ClassNode> _aBlock) {
    for (final PackageNode _packageNode : _systemDefinitionNode.packageNodes()) {
      for (final ClassNode _temp1 : _packageNode.classes()) {
        _aBlock.value_(_temp1);
      }
    }
    return this;
  }

  public PackageNodeMerger packageNamespaceNodesDo_(final st.gravel.support.jvm.Block1<Object, NamespaceNode> _aBlock) {
    for (final PackageNode _packageNode : _systemDefinitionNode.packageNodes()) {
      for (final NamespaceNode _temp1 : _packageNode.namespaces()) {
        _aBlock.value_(_temp1);
      }
    }
    return this;
  }

  public PackageNodeMerger postCopy() {
    return this;
  }

  public SystemDefinitionNode systemDefinitionNode() {
    return _systemDefinitionNode;
  }
}
TOP

Related Classes of st.gravel.support.compiler.ast.PackageNodeMerger$PackageNodeMerger_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.