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.AbstractClassMapping;
import st.gravel.support.compiler.ast.AbstractClassMapping.AbstractClassMapping_Factory;
import st.gravel.support.compiler.ast.IdentityClassPartMapping;
import st.gravel.support.compiler.ast.ExtensionClassPartMapping;
import java.util.Map;
import st.gravel.support.compiler.ast.InstVarMapping;
import st.gravel.support.compiler.ast.ClassDescriptionNode;
import st.gravel.support.compiler.ast.SystemMapping;
import st.gravel.support.compiler.ast.BoundVariableDeclarationNode;
import java.util.Set;
import java.util.HashSet;
import st.gravel.support.compiler.ast.AbstractMethodMapping;
import st.gravel.support.compiler.ast.VariableDeclarationNode;
import st.gravel.support.compiler.ast.MethodNode;
import st.gravel.support.compiler.ast.Reference;
public class ClassMapping extends AbstractClassMapping implements Cloneable {
public static ClassMapping_Factory factory = new ClassMapping_Factory();
ExtensionClassPartMapping[] _extensions;
IdentityClassPartMapping _identityMapping;
Map<String, InstVarMapping> _instVarMappings;
public static class ClassMapping_Factory extends AbstractClassMapping_Factory {
public ClassMapping basicNew() {
ClassMapping newInstance = new ClassMapping();
newInstance.initialize();
return newInstance;
}
public ClassMapping identityMapping_extensions_instVarMappings_classNode_(final IdentityClassPartMapping _anIdentityClassPartMapping, final ExtensionClassPartMapping[] _anArray, final Map<String, InstVarMapping> _aDictionary, final ClassDescriptionNode _aClassNode) {
return ((ClassMapping) this.basicNew().initializeIdentityMapping_extensions_instVarMappings_classNode_(_anIdentityClassPartMapping, _anArray, _aDictionary, _aClassNode));
}
}
static public ClassMapping _identityMapping_extensions_instVarMappings_classNode_(Object receiver, final IdentityClassPartMapping _anIdentityClassPartMapping, final ExtensionClassPartMapping[] _anArray, final Map<String, InstVarMapping> _aDictionary, final ClassDescriptionNode _aClassNode) {
return factory.identityMapping_extensions_instVarMappings_classNode_(_anIdentityClassPartMapping, _anArray, _aDictionary, _aClassNode);
}
@Override
public BoundVariableDeclarationNode[] allInstVarsIn_(final SystemMapping _aSystemMapping) {
final BoundVariableDeclarationNode[] _arr;
final ClassMapping _scm;
_arr = this.boundInstVars();
_scm = ((ClassMapping) this.superclassMappingIn_(_aSystemMapping));
if (_scm != null) {
return st.gravel.support.jvm.ArrayExtensions.copyWithAll_(_arr, _scm.allInstVarsIn_(_aSystemMapping));
}
return _arr;
}
public java.util.Set<st.gravel.core.Symbol> allSelectorsIn_(final SystemMapping _aSystemMapping) {
final java.util.Set<st.gravel.core.Symbol> _set;
final ClassMapping _scm;
_set = new java.util.HashSet();
_set.addAll(this.selectors());
_scm = ((ClassMapping) this.superclassMappingIn_(_aSystemMapping));
if (_scm != null) {
_set.addAll(_scm.allSelectorsIn_(_aSystemMapping));
}
return _set;
}
public BoundVariableDeclarationNode[] boundInstVars() {
return _classNode.boundInstVars();
}
public ClassMapping copy() {
try {
ClassMapping _temp1 = (ClassMapping) this.clone();
_temp1.postCopy();
return _temp1;
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
public AbstractMethodMapping extensionMethodMappingAt_ifAbsent_(final st.gravel.core.Symbol _aSymbol, final st.gravel.support.jvm.Block0<AbstractMethodMapping> _aBlock) {
for (final ExtensionClassPartMapping _ex : _extensions) {
final AbstractMethodMapping _m;
_m = _ex.methodMappingAt_ifAbsent_(_aSymbol, ((st.gravel.support.jvm.Block0<AbstractMethodMapping>) (new st.gravel.support.jvm.Block0<AbstractMethodMapping>() {
@Override
public AbstractMethodMapping value() {
return (AbstractMethodMapping) null;
}
})));
if (_m != null) {
return _m;
}
}
return _aBlock.value();
}
public ExtensionClassPartMapping[] extensions() {
return _extensions;
}
public ClassMapping_Factory factory() {
return factory;
}
@Override
public Class identityClass() {
return _identityMapping.javaClass();
}
public IdentityClassPartMapping identityMapping() {
return _identityMapping;
}
public ClassMapping initializeIdentityMapping_extensions_instVarMappings_classNode_(final IdentityClassPartMapping _anIdentityClassPartMapping, final ExtensionClassPartMapping[] _anArray, final Map<String, InstVarMapping> _aDictionary, final ClassDescriptionNode _aClassNode) {
_identityMapping = _anIdentityClassPartMapping;
_extensions = _anArray;
_instVarMappings = _aDictionary;
_classNode = _aClassNode;
this.initialize();
return this;
}
public Map<String, InstVarMapping> instVarMappings() {
return _instVarMappings;
}
public VariableDeclarationNode[] instVars() {
return _classNode.instVars();
}
public AbstractMethodMapping methodMappingAt_ifAbsent_(final st.gravel.core.Symbol _aSymbol, final st.gravel.support.jvm.Block0<AbstractMethodMapping> _aBlock) {
return _identityMapping.methodMappingAt_ifAbsent_(_aSymbol, ((st.gravel.support.jvm.Block0<AbstractMethodMapping>) (new st.gravel.support.jvm.Block0<AbstractMethodMapping>() {
@Override
public AbstractMethodMapping value() {
return (AbstractMethodMapping) ClassMapping.this.extensionMethodMappingAt_ifAbsent_(_aSymbol, _aBlock);
}
})));
}
public ClassMapping pvtSetClassNode_(final ClassDescriptionNode _aClassDescriptionNode) {
_classNode = _aClassDescriptionNode;
return this;
}
public ClassMapping pvtSetExtensions_(final ExtensionClassPartMapping[] _anArray) {
_extensions = _anArray;
return this;
}
public ClassMapping pvtSetIdentityMapping_(final IdentityClassPartMapping _anObject) {
_identityMapping = _anObject;
return this;
}
public java.util.Set<st.gravel.core.Symbol> selectors() {
final java.util.Set<st.gravel.core.Symbol>[] _set;
_set = new java.util.Set[1];
_set[0] = new java.util.HashSet();
for (final MethodNode _each : _classNode.methods()) {
_set[0].add(st.gravel.core.Symbol.value(_each.selector()));
}
return _set[0];
}
public Reference superclassReferenceForMethodLookup() {
return _classNode.superclassReferenceForMethodLookup();
}
public ClassMapping withClassNode_(final ClassDescriptionNode _aClassDescriptionNode) {
return this.copy().pvtSetClassNode_(_aClassDescriptionNode);
}
public ClassMapping withExtensions_(final ExtensionClassPartMapping[] _anArray) {
return this.copy().pvtSetExtensions_(_anArray);
}
public ClassMapping withExtension_(final ExtensionClassPartMapping _anExtensionClassPartMapping) {
return this.withExtensions_(st.gravel.support.jvm.ArrayExtensions.copyWith_(_extensions, _anExtensionClassPartMapping));
}
public ClassMapping withoutMethodMapping_(final String _aSelector) {
ClassMapping _temp1 = this.copy();
_temp1.pvtSetIdentityMapping_(_identityMapping.withoutMethodMapping_(_aSelector));
return _temp1.pvtSetExtensions_(st.gravel.support.jvm.ArrayExtensions.collect_(_extensions, ((st.gravel.support.jvm.Block1<ExtensionClassPartMapping, ExtensionClassPartMapping>) (new st.gravel.support.jvm.Block1<ExtensionClassPartMapping, ExtensionClassPartMapping>() {
@Override
public ExtensionClassPartMapping value_(final ExtensionClassPartMapping _each) {
return (ExtensionClassPartMapping) _each.withoutMethodMapping_(_aSelector);
}
}))));
}
}