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.AbstractMapping; import st.gravel.support.compiler.ast.AbstractMapping.AbstractMapping_Factory; import st.gravel.support.compiler.ast.SystemNode; import st.gravel.support.compiler.ast.SystemMappingCompilerTools; import java.util.Map; import st.gravel.support.compiler.ast.ClassMapping; import st.gravel.support.compiler.ast.Reference; import st.gravel.support.compiler.ast.AbstractClassMapping; import st.gravel.support.compiler.ast.AbsoluteReference; import st.gravel.support.compiler.ast.SelectorConverter; import st.gravel.support.compiler.ast.SystemDefinitionNode; import java.util.Set; import st.gravel.support.compiler.ast.SystemDiff; import st.gravel.support.compiler.ast.SystemMappingUpdater; import st.gravel.support.compiler.ast.ClassDiff; import java.util.HashMap; import java.util.HashSet; import st.gravel.support.compiler.ast.SharedDeclarationNode; import st.gravel.support.compiler.ast.Node; import st.gravel.support.compiler.jvm.JVMClass; import st.gravel.support.compiler.jvm.JVMDefinedObjectType; import st.gravel.support.compiler.ast.BlockNode; import st.gravel.support.compiler.jvm.BlockInnerClass; import st.gravel.support.compiler.jvm.JVMClassCompiler; import st.gravel.support.compiler.ast.IntermediateNodeRewriter; import st.gravel.support.compiler.ast.NonLocalTempWritesToHolderConverter; import st.gravel.support.compiler.ast.VariableAccessToFieldAccessConverter; import st.gravel.support.compiler.ast.VariableDeclarationNode; import st.gravel.support.compiler.ast.NilLiteralNode; import st.gravel.support.compiler.jvm.JVMVariable; import st.gravel.support.compiler.ast.Parser; import st.gravel.support.compiler.ast.MethodNode; import st.gravel.support.compiler.jvm.JVMNonPrimitiveType; import st.gravel.support.compiler.ast.ClassDescriptionNode; import st.gravel.support.compiler.ast.ClassNode; import st.gravel.support.compiler.ast.Expression; import java.util.Date; import st.gravel.support.compiler.ast.AbstractMethodMapping; import st.gravel.support.compiler.ast.MethodMapping; import st.gravel.support.compiler.ast.NamespaceNode; import java.util.Map; import java.util.Map.*; import st.gravel.support.compiler.ast.AnonymousMethodMapping; import st.gravel.support.compiler.ast.EmptyTraitUsageNode; import st.gravel.support.compiler.ast.IdentityClassPartMapping; import st.gravel.support.compiler.ast.ExtensionClassPartMapping; import st.gravel.support.compiler.ast.InstVarMapping; import st.gravel.support.compiler.ast.PackageNodeMerger; public class SystemMapping extends AbstractMapping implements Cloneable { public static SystemMapping_Factory factory = new SystemMapping_Factory(); Map<Class, ClassMapping> _classMappingsByJavaClass; Map<Reference, AbstractClassMapping> _classMappingsByReference; SystemMappingCompilerTools _compilerTools; ClassMapping _nilClassMapping; SelectorConverter _selectorConverter; Map<AbsoluteReference, st.gravel.support.jvm.runtime.AlmostFinalValue> _singletonHolders; Map<Reference, java.util.Set<AbstractClassMapping>> _subclassMappingsCache; SystemDefinitionNode _systemDefinitionNode; SystemNode _systemNode; public static class SystemMapping_Factory extends AbstractMapping_Factory { public SystemMapping basicNew() { SystemMapping newInstance = new SystemMapping(); newInstance.initialize(); return newInstance; } public SystemMapping systemNode_compilerTools_(final SystemNode _aSystemNode, final SystemMappingCompilerTools _aMockSystemMappingCompilerTools) { return ((SystemMapping) this.basicNew().initializeSystemNode_compilerTools_(_aSystemNode, _aMockSystemMappingCompilerTools)); } } static public SystemMapping _systemNode_compilerTools_(Object receiver, final SystemNode _aSystemNode, final SystemMappingCompilerTools _aMockSystemMappingCompilerTools) { return factory.systemNode_compilerTools_(_aSystemNode, _aMockSystemMappingCompilerTools); } public ClassMapping addClassMapping_(final ClassMapping _aClassMapping) { final Class _identityClass; _identityClass = _aClassMapping.identityClass(); if (_identityClass == null) { st.gravel.support.jvm.ObjectExtensions.assert_(SystemMapping.this, _aClassMapping.classNode().isNilClass()); _nilClassMapping = _aClassMapping; } else { _classMappingsByJavaClass.put(_identityClass, _aClassMapping); } _classMappingsByReference.put(_aClassMapping.classNode().reference(), _aClassMapping); _systemNode = _systemNode.withClassDescriptionNode_(_aClassMapping.classNode()); this.resetCache(); return _aClassMapping; } public SystemMapping applyDiff_(final SystemDiff _aSystemDiff) { final SystemMappingUpdater[] _updater; _updater = new SystemMappingUpdater[1]; _updater[0] = this.newSystemMappingUpdater(); for (final ClassDiff _each : _aSystemDiff.classDiffs()) { _updater[0].visit_(_each); } _updater[0].setNamespaceNodes_(_aSystemDiff.namespaces()); _updater[0].link(); return this; } public ClassMapping bestClassMappingFor_(final Class _receiverClass) { final ClassMapping[] _best; _best = new ClassMapping[1]; _best[0] = null; this.concreteClassMappingsDo_(new st.gravel.support.jvm.Block1<Object, ClassMapping>() { @Override public Object value_(final ClassMapping _cm) { if (_compilerTools.isAssignable_from_(_cm.identityClass(), _receiverClass)) { if (_best[0] == null) { return _best[0] = _cm; } else { if (_compilerTools.isAssignable_from_(_best[0].identityClass(), _cm.identityClass())) { return _best[0] = _cm; } } } return SystemMapping.this; } }); return _best[0]; } public SystemMapping buildSubclassMappingsCache() { _subclassMappingsCache = new java.util.HashMap<Reference, java.util.Set<AbstractClassMapping>>(); for (final AbstractClassMapping _each : _classMappingsByReference.values()) { final Reference _scr; _scr = _each.superclassReference(); if (_scr != null) { java.util.Set<AbstractClassMapping> _temp1 = _subclassMappingsCache.get(_scr); if (_temp1 == null) { java.util.Set<AbstractClassMapping> _temp2 = new java.util.HashSet(); _subclassMappingsCache.put(_scr, _temp2); _temp1 = _temp2; } _temp1.add(_each); } } return this; } public ClassMapping classMappingAtJavaClass_ifAbsent_(final Class _aClass, final st.gravel.support.jvm.Block0<ClassMapping> _absentBlock) { if (_aClass == null) { return _nilClassMapping; } return st.gravel.support.jvm.DictionaryExtensions.at_ifAbsent_(_classMappingsByJavaClass, _aClass, _absentBlock); } public AbstractClassMapping classMappingAtReference_(final Reference _aReference) { return this.classMappingAtReference_ifAbsent_(_aReference, ((st.gravel.support.jvm.Block0<AbstractClassMapping>) (new st.gravel.support.jvm.Block0<AbstractClassMapping>() { @Override public AbstractClassMapping value() { throw new RuntimeException("Cannot find: " + _aReference.toString()); } }))); } public AbstractClassMapping classMappingAtReference_ifAbsent_(final Reference _aReference, final st.gravel.support.jvm.Block0<AbstractClassMapping> _absentBlock) { return st.gravel.support.jvm.DictionaryExtensions.at_ifAbsent_(_classMappingsByReference, _aReference, _absentBlock); } public ClassMapping classMappingForJavaClass_(final Class _receiverClass) { return this.classMappingAtJavaClass_ifAbsent_(_receiverClass, ((st.gravel.support.jvm.Block0<ClassMapping>) (new st.gravel.support.jvm.Block0<ClassMapping>() { @Override public ClassMapping value() { final ClassMapping _newClassMapping; _newClassMapping = SystemMapping.this.newClassMappingForJavaClass_(_receiverClass); _classMappingsByJavaClass.put(_receiverClass, _newClassMapping); return (ClassMapping) _newClassMapping; } }))); } public SystemMapping classMappingsDo_(final st.gravel.support.jvm.Block1<Object, AbstractClassMapping> _aBlock) { for (final AbstractClassMapping _temp1 : _classMappingsByReference.values()) { _aBlock.value_(_temp1); } return this; } public st.gravel.support.jvm.runtime.AlmostFinalValue classSharedSingletonHolderAtReference_ifAbsent_(final AbsoluteReference _reference, final st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue> _aBlock) { final Object _temp2 = new Object(); try { st.gravel.support.jvm.runtime.AlmostFinalValue _temp1 = _singletonHolders.get(_reference); if (_temp1 == null) { _temp1 = ((st.gravel.support.jvm.runtime.AlmostFinalValue) st.gravel.support.jvm.DictionaryExtensions.at_ifAbsent_(_singletonHolders, _reference.namespace().namespace().$slash$(_reference.name()), ((st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue>) (new st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue>() { @Override public st.gravel.support.jvm.runtime.AlmostFinalValue value() { final AbstractClassMapping _cm; final AbsoluteReference _superclassReference; final SharedDeclarationNode _sharedVariable; _cm = ((AbstractClassMapping) st.gravel.support.jvm.DictionaryExtensions.at_ifAbsent_(_classMappingsByReference, _reference.namespace(), ((st.gravel.support.jvm.Block0<AbstractClassMapping>) (new st.gravel.support.jvm.Block0<AbstractClassMapping>() { @Override public AbstractClassMapping value() { throw new NonLocalReturn(_aBlock.value(), _temp2); } })))); _sharedVariable = _cm.classNode().meta().sharedVariableAt_ifAbsent_(_reference.name().asString(), new st.gravel.support.jvm.Block0<SharedDeclarationNode>() { @Override public SharedDeclarationNode value() { return (SharedDeclarationNode) null; } }); if (_sharedVariable != null) { throw new RuntimeException("Shared not initialized: " + _reference.toString()); } _superclassReference = ((AbsoluteReference) _cm.superclassReference()); if (_superclassReference == null) { throw new NonLocalReturn(_aBlock.value(), _temp2); } return (st.gravel.support.jvm.runtime.AlmostFinalValue) SystemMapping.this.classSharedSingletonHolderAtReference_ifAbsent_(_superclassReference.$slash$(_reference.name()), _aBlock); } })))); } return ((st.gravel.support.jvm.runtime.AlmostFinalValue) _temp1); } catch (NonLocalReturn nlr) { if (nlr.marker == _temp2) { return (st.gravel.support.jvm.runtime.AlmostFinalValue) nlr.returnValue; } else { throw nlr; } } } public Class compileAndWriteExpression_reference_(final Node _anExpression, final Reference _aReference) { final JVMClass[] _jvmClasses; _jvmClasses = this.compileExpression_reference_(_anExpression, _aReference); return this.compileJVMClasses_(_jvmClasses); } public JVMClass[] compileExpressionSource_(final String _source) { return this.compileExpression_reference_(Parser.factory.parseExpression_(_source), Reference.factory.value_("st.gravel.lang.UndefinedObject")); } public JVMClass[] compileExpression_reference_(final Node _anExpression, final Reference _aReference) { final JVMDefinedObjectType _ownerType; final BlockNode _fieldAccessed; final BlockInnerClass _aBlockInnerClass; final BlockNode _intermediate; final BlockNode _holderized; final JVMClassCompiler _jvmClassCompiler; final JVMClass _blockClass; _intermediate = ((BlockNode) IntermediateNodeRewriter.factory.visit_(BlockNode.factory.expression_(_anExpression))); _holderized = ((BlockNode) NonLocalTempWritesToHolderConverter.factory.visit_(_intermediate)); _fieldAccessed = ((BlockNode) VariableAccessToFieldAccessConverter.factory.instVars_owner_ownerReference_(new VariableDeclarationNode[] {}, NilLiteralNode.factory.basicNew(), _aReference).visit_(_holderized)); _ownerType = JVMDefinedObjectType.factory.dottedClassName_("Expression$" + _compilerTools.nextExtensionPostfix()); _aBlockInnerClass = BlockInnerClass.factory.ownerType_blockNode_copiedVariables_(_ownerType, _fieldAccessed, new JVMVariable[] {}); _jvmClassCompiler = JVMClassCompiler.factory.classDescriptionNode_systemNode_systemMappingUpdater_isStatic_(null, _systemNode, this.newSystemMappingUpdater(), false); _jvmClassCompiler.ownerType_(JVMDefinedObjectType.factory.dottedClassName_("ExpressionContainer$" + _compilerTools.nextExtensionPostfix())); _blockClass = _jvmClassCompiler.compileBlockNoAdd_(_aBlockInnerClass); return _jvmClassCompiler.withContainerAndExtraClasses_(_blockClass); } public Class compileInlinedMethod_selfType_allowBlockInlining_(final MethodNode _aMethodNode, final JVMNonPrimitiveType _selfType, final boolean _allowBlockInlining) { final JVMClassCompiler _jvmClassCompiler; final JVMClass _inlinedMethodClass; final JVMClass[] _jvmClasses; _jvmClassCompiler = JVMClassCompiler.factory.classDescriptionNode_systemNode_systemMappingUpdater_isStatic_(null, _systemNode, this.newSystemMappingUpdater(), true); _jvmClassCompiler.allowBlockInlining_(_allowBlockInlining); _jvmClassCompiler.selfType_(_selfType); _jvmClassCompiler.superType_(JVMDefinedObjectType.factory.object()); _jvmClassCompiler.ownerType_(JVMDefinedObjectType.factory.dottedClassName_("InlinedMethod$" + _compilerTools.nextExtensionPostfix())); _inlinedMethodClass = _jvmClassCompiler.compileInlinedMethod_(_aMethodNode); _jvmClasses = st.gravel.support.jvm.ArrayExtensions.copyWith_(_jvmClassCompiler.extraClasses(), _inlinedMethodClass); return this.compileJVMClasses_(_jvmClasses); } public Class compileJVMClasses_(final JVMClass[] _jvmClasses) { final Class[] _last; _last = new Class[1]; _last[0] = null; for (final JVMClass _jvmClass : _jvmClasses) { _last[0] = _compilerTools.writeClass_(_jvmClass); } for (final JVMClass _jvmClass : _jvmClasses) { _compilerTools.runAstInit_(_jvmClass); } return _last[0]; } public SystemMappingCompilerTools compilerTools() { return _compilerTools; } public SystemMapping concreteClassMappingsDo_(final st.gravel.support.jvm.Block1<Object, ClassMapping> _aBlock) { for (final AbstractClassMapping _acm : _classMappingsByReference.values()) { _aBlock.value_(((ClassMapping) _acm)); } return this; } public SystemMapping copy() { try { SystemMapping _temp1 = (SystemMapping) this.clone(); _temp1.postCopy(); return _temp1; } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } public ClassDescriptionNode definitionClassNodeAt_ifAbsent_(final Reference _reference, final st.gravel.support.jvm.Block0<ClassDescriptionNode> _aBlock) { final Object _temp1 = new Object(); try { if (_reference.isMeta()) { return ((ClassNode) SystemMapping.this.definitionClassNodeAt_ifAbsent_(_reference.nonmeta(), ((st.gravel.support.jvm.Block0<ClassDescriptionNode>) (new st.gravel.support.jvm.Block0<ClassDescriptionNode>() { @Override public ClassDescriptionNode value() { throw new NonLocalReturn(_aBlock.value(), _temp1); } })))).metaclassNode(); } return _systemDefinitionNode.classNodeAt_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<ClassNode>) (new st.gravel.support.jvm.Block0<ClassNode>() { @Override public ClassNode value() { throw new NonLocalReturn(_aBlock.value(), _temp1); } }))); } catch (NonLocalReturn nlr) { if (nlr.marker == _temp1) { return (ClassDescriptionNode) nlr.returnValue; } else { throw nlr; } } } public ClassDescriptionNode definitionOrObsoleteClassNodeAt_(final Reference _reference) { return this.definitionOrObsoleteClassNodeAt_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<ClassDescriptionNode>) (new st.gravel.support.jvm.Block0<ClassDescriptionNode>() { @Override public ClassDescriptionNode value() { throw new RuntimeException("Cannot find: " + _reference.toString()); } }))); } public ClassDescriptionNode definitionOrObsoleteClassNodeAt_ifAbsent_(final Reference _reference, final st.gravel.support.jvm.Block0<ClassDescriptionNode> _aBlock) { return this.definitionClassNodeAt_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<ClassDescriptionNode>) (new st.gravel.support.jvm.Block0<ClassDescriptionNode>() { @Override public ClassDescriptionNode value() { return (ClassDescriptionNode) SystemMapping.this.obsoleteClassNodeAt_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<ClassDescriptionNode>) (new st.gravel.support.jvm.Block0<ClassDescriptionNode>() { @Override public ClassDescriptionNode value() { throw new RuntimeException("Cannot find: " + _reference.toString()); } }))); } }))); } public Object evaluateExpression_reference_(final Expression _anExpression, final AbsoluteReference _aReference) { final Class _cl; _cl = this.compileAndWriteExpression_reference_(_anExpression, _aReference); return _compilerTools.evaluateBlock0Class_(_cl); } public SystemMapping_Factory factory() { return factory; } @Override public SystemMapping initialize() { _classMappingsByJavaClass = new java.util.HashMap<Class, ClassMapping>(); _classMappingsByReference = new java.util.HashMap<Reference, AbstractClassMapping>(); _singletonHolders = new java.util.HashMap<AbsoluteReference, st.gravel.support.jvm.runtime.AlmostFinalValue>(); _selectorConverter = SelectorConverter.factory.basicNew(); return this; } public SystemMapping initializeSystemNode_compilerTools_(final SystemNode _aSystemNode, final SystemMappingCompilerTools _aMockSystemMappingCompilerTools) { _systemNode = _aSystemNode; _compilerTools = _aMockSystemMappingCompilerTools; this.initialize(); return this; } public SystemMapping log_(final String _aString) { return this; } public SystemMapping log_while_(final String _aString, final st.gravel.support.jvm.Block0<Object> _aBlock) { final int _ms; this.log_(_aString + "..."); long _temp1 = new Date().getTime(); _aBlock.value(); long _temp2 = new Date().getTime(); _ms = (int) (_temp2 - _temp1); this.log_(_aString + " Done in " + "" + _ms + " ms"); return this; } public java.lang.invoke.MethodHandle methodHandleForNil_(final String _methodName) { final st.gravel.core.Symbol _sel; final ClassMapping _classMapping; _classMapping = this.nilClassMapping(); _sel = _selectorConverter.functionNameAsSelector_(_methodName); return this.methodHandleFrom_selector_(_classMapping, _sel); } public java.lang.invoke.MethodHandle methodHandleFor_methodName_(final Class _receiverClass, final String _methodName) { final st.gravel.core.Symbol _sel; final ClassMapping _classMapping; _classMapping = this.classMappingForJavaClass_(_receiverClass); _sel = _selectorConverter.functionNameAsSelector_(_methodName); return this.methodHandleFrom_selector_(_classMapping, _sel); } public java.lang.invoke.MethodHandle methodHandleFrom_selector_(final ClassMapping _classMapping, final st.gravel.core.Symbol _sel) { final AbstractMethodMapping _methodMapping; _methodMapping = this.methodMappingFrom_selector_(_classMapping, _sel); if (_methodMapping == null) { return null; } return _methodMapping.methodHandle(); } public MethodMapping methodMappingForNil_(final String _methodName) { final st.gravel.core.Symbol _sel; final ClassMapping _classMapping; _classMapping = this.nilClassMapping(); _sel = _selectorConverter.functionNameAsSelector_(_methodName); return ((MethodMapping) this.methodMappingFrom_selector_(_classMapping, _sel)); } public MethodMapping methodMappingFor_methodName_(final Class _receiverClass, final String _methodName) { final st.gravel.core.Symbol _sel; final ClassMapping _classMapping; _classMapping = this.classMappingForJavaClass_(_receiverClass); _sel = _selectorConverter.functionNameAsSelector_(_methodName); return ((MethodMapping) this.methodMappingFrom_selector_(_classMapping, _sel)); } public AbstractMethodMapping methodMappingFrom_selector_(final ClassMapping _classMapping, final st.gravel.core.Symbol _sel) { return _classMapping.methodMappingAt_ifAbsent_(_sel, ((st.gravel.support.jvm.Block0<AbstractMethodMapping>) (new st.gravel.support.jvm.Block0<AbstractMethodMapping>() { @Override public AbstractMethodMapping value() { final Reference _superclassReference; AbstractMethodMapping _mapping; _superclassReference = _classMapping.superclassReferenceForMethodLookup(); if (_superclassReference == null) { _mapping = null; } else { _mapping = SystemMapping.this.methodMappingFrom_selector_(((ClassMapping) SystemMapping.this.classMappingAtReference_(_superclassReference)), _sel); } return (AbstractMethodMapping) _mapping; } }))); } public st.gravel.support.jvm.runtime.AlmostFinalValue namespacedSingletonHolderAtReference_ifAbsent_(final AbsoluteReference _reference, final st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue> _aBlock) { final Object _temp1 = new Object(); try { final NamespaceNode _nsNode; _nsNode = _systemNode.namespaceNodeAt_ifAbsent_(_reference.namespace().namespace(), ((st.gravel.support.jvm.Block0<NamespaceNode>) (new st.gravel.support.jvm.Block0<NamespaceNode>() { @Override public NamespaceNode value() { return (NamespaceNode) null; } }))); if (_nsNode != null) { _nsNode.allImportsIn_do_(_systemNode, new st.gravel.support.jvm.Block1<Object, NamespaceNode>() { @Override public Object value_(final NamespaceNode _importNS) { final st.gravel.support.jvm.runtime.AlmostFinalValue _sh; final SharedDeclarationNode _shared; _shared = _importNS.sharedVariableAt_ifAbsent_(_reference.name().asString(), ((st.gravel.support.jvm.Block0<SharedDeclarationNode>) (new st.gravel.support.jvm.Block0<SharedDeclarationNode>() { @Override public SharedDeclarationNode value() { return (SharedDeclarationNode) null; } }))); if (_shared != null) { throw new NonLocalReturn(SystemMapping.this.singletonAtReference_initialize_(_importNS.reference().$slash$(_reference.name()), _shared), _temp1); } st.gravel.support.jvm.runtime.AlmostFinalValue _temp2 = _singletonHolders.get(_importNS.reference().$slash$(_reference.name())); _sh = ((st.gravel.support.jvm.runtime.AlmostFinalValue) _temp2); if (_sh != null) { throw new NonLocalReturn(_sh, _temp1); } return SystemMapping.this; } }); } return _aBlock.value(); } catch (NonLocalReturn nlr) { if (nlr.marker == _temp1) { return (st.gravel.support.jvm.runtime.AlmostFinalValue) nlr.returnValue; } else { throw nlr; } } } public SystemMapping namespaceGlobalsAndInitializersDo_(final st.gravel.support.jvm.Block2<Object, AbsoluteReference, SharedDeclarationNode> _aBlock) { for (final Map.Entry<Reference, NamespaceNode> _temp1 : _systemNode.namespaceNodes().entrySet()) { Reference _reference = _temp1.getKey(); NamespaceNode _namespaceNode = _temp1.getValue(); for (final SharedDeclarationNode _sharedVariable : _namespaceNode.sharedVariables()) { _aBlock.value_value_(((AbsoluteReference) _reference).$slash$(st.gravel.core.Symbol.value(_sharedVariable.name())), _sharedVariable); } } return this; } public ClassMapping newClassMappingForJavaClass_(final Class _receiverClass) { final Map<st.gravel.core.Symbol, AbstractMethodMapping>[] _methodMappings; final ClassNode _classNode; final ClassMapping _superMapping; final java.util.Set<st.gravel.core.Symbol>[] _allSelectors; _allSelectors = new java.util.Set[1]; _methodMappings = new Map[1]; _superMapping = this.bestClassMappingFor_(_receiverClass); _allSelectors[0] = _superMapping.allSelectorsIn_(this); _methodMappings[0] = new java.util.HashMap<st.gravel.core.Symbol, AbstractMethodMapping>(); _compilerTools.methodNamesIn_do_(_receiverClass, new st.gravel.support.jvm.Block2<Object, String, Integer>() { @Override public Object value_value_(final String _methodName, final Integer _numArgs) { final st.gravel.core.Symbol _sel; _sel = _selectorConverter.functionNameAsSelector_(_methodName); if (st.gravel.support.jvm.IntegerExtensions.equals_(_sel.numArgs(), _numArgs) && _allSelectors[0].contains(_sel)) { final java.lang.invoke.MethodHandle _methodHandle; _methodHandle = _compilerTools.methodHandleAt_numArgs_in_identityClass_isStatic_(_methodName, _sel.numArgs(), _receiverClass, _receiverClass, false); if (_methodHandle != null) { return _methodMappings[0].put(_sel, AnonymousMethodMapping.factory.methodHandle_definingClass_(_methodHandle, _receiverClass)); } } return SystemMapping.this; } }); _classNode = ClassNode.factory.name_superclassPath_properties_instVars_classInstVars_sharedVariables_methods_classMethods_namespace_isExtension_isTrait_traitUsage_classTraitUsage_(_superMapping.classNode().name(), _superMapping.reference().toString(), new java.util.HashMap<String, String>(), new VariableDeclarationNode[] {}, new VariableDeclarationNode[] {}, new SharedDeclarationNode[] {}, new MethodNode[] {}, new MethodNode[] {}, _superMapping.classNode().namespace(), false, false, EmptyTraitUsageNode.factory.basicNew(), EmptyTraitUsageNode.factory.basicNew()); return ClassMapping.factory.identityMapping_extensions_instVarMappings_classNode_(IdentityClassPartMapping.factory.javaClass_isGenerated_(_receiverClass, false).withMethodMappings_(_methodMappings[0]), new ExtensionClassPartMapping[] {}, new java.util.HashMap<String, InstVarMapping>(), _classNode); } public SystemMappingUpdater newSystemMappingUpdater() { return SystemMappingUpdater.factory.systemMapping_compilerTools_(this, _compilerTools); } public ClassMapping nilClassMapping() { return _nilClassMapping; } public ClassDescriptionNode obsoleteClassNodeAt_ifAbsent_(final Reference _aReference, final st.gravel.support.jvm.Block0<ClassDescriptionNode> _absentBlock) { final Object _temp1 = new Object(); try { return this.classMappingAtReference_ifAbsent_(_aReference, ((st.gravel.support.jvm.Block0<AbstractClassMapping>) (new st.gravel.support.jvm.Block0<AbstractClassMapping>() { @Override public AbstractClassMapping value() { throw new NonLocalReturn(_absentBlock.value(), _temp1); } }))).classNode(); } catch (NonLocalReturn nlr) { if (nlr.marker == _temp1) { return (ClassDescriptionNode) nlr.returnValue; } else { throw nlr; } } } public st.gravel.core.Symbol[] packageNames() { return _systemDefinitionNode.packageNames(); } public SystemMapping resetCache() { _subclassMappingsCache = null; return this; } public st.gravel.support.jvm.runtime.AlmostFinalValue resolveSingletonHolder_(final AbsoluteReference _reference) { return this.resolveSingletonHolder_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue>) (new st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue>() { @Override public st.gravel.support.jvm.runtime.AlmostFinalValue value() { throw new RuntimeException("Singleton not found:" + _reference.toString()); } }))); } public st.gravel.support.jvm.runtime.AlmostFinalValue resolveSingletonHolder_ifAbsent_(final AbsoluteReference _reference, final st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue> _aBlock) { return this.namespacedSingletonHolderAtReference_ifAbsent_(_reference, ((st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue>) (new st.gravel.support.jvm.Block0<st.gravel.support.jvm.runtime.AlmostFinalValue>() { @Override public st.gravel.support.jvm.runtime.AlmostFinalValue value() { return (st.gravel.support.jvm.runtime.AlmostFinalValue) SystemMapping.this.classSharedSingletonHolderAtReference_ifAbsent_(_reference, _aBlock); } }))); } public SelectorConverter selectorConverter() { return _selectorConverter; } public SystemMapping setNamespaceNodes_(final Map<Reference, NamespaceNode> _aDictionary) { final Map<Reference, NamespaceNode>[] _dict; _dict = new Map[1]; _dict[0] = new java.util.HashMap<Reference, NamespaceNode>(); st.gravel.support.jvm.DictionaryExtensions.syncWith(_systemNode.namespaceNodes(), _aDictionary, new st.gravel.support.jvm.Block2<Object, NamespaceNode, NamespaceNode>() { @Override public Object value_value_(final NamespaceNode _old, final NamespaceNode _new) { return _dict[0].put(_new.reference(), _old.mergeWith_(_new)); } }, new st.gravel.support.jvm.Block1<Object, NamespaceNode>() { @Override public Object value_(final NamespaceNode _nsNode) { return _dict[0].put(_nsNode.reference(), _nsNode); } }, new st.gravel.support.jvm.Block1<Object, NamespaceNode>() { @Override public Object value_(final NamespaceNode _nsNode) { return _dict[0].put(_nsNode.reference(), _nsNode); } }); _systemNode = _systemNode.withNamespaceNodes_(_dict[0]); return this; } public Object singletonAtReferenceString_(final String _aString) { return this.singletonAtReference_(((AbsoluteReference) Reference.factory.value_(_aString))); } public Object singletonAtReference_(final AbsoluteReference _reference) { final st.gravel.support.jvm.runtime.AlmostFinalValue _holder; st.gravel.support.jvm.runtime.AlmostFinalValue _temp1 = _singletonHolders.get(_reference); if (_temp1 == null) { throw new RuntimeException("Singleton not found:" + _reference.toString()); } _holder = ((st.gravel.support.jvm.runtime.AlmostFinalValue) _temp1); return _compilerTools.valueOfSingletonHolder_(_holder); } public st.gravel.support.jvm.runtime.AlmostFinalValue singletonAtReference_ifAbsentInitialize_(final AbsoluteReference _reference, final st.gravel.support.jvm.Block0<Object> _aBlock) { st.gravel.support.jvm.runtime.AlmostFinalValue _temp1 = _singletonHolders.get(_reference); if (_temp1 == null) { st.gravel.support.jvm.runtime.AlmostFinalValue _temp2 = _compilerTools.newSingletonHolder_initializer_(_reference, _aBlock); _singletonHolders.put(_reference, _temp2); _temp1 = _temp2; } return _temp1; } public st.gravel.support.jvm.runtime.AlmostFinalValue singletonAtReference_ifAbsentPut_(final AbsoluteReference _reference, final st.gravel.support.jvm.Block0<Object> _aBlock) { st.gravel.support.jvm.runtime.AlmostFinalValue _temp1 = _singletonHolders.get(_reference); if (_temp1 == null) { st.gravel.support.jvm.runtime.AlmostFinalValue _temp2 = _compilerTools.newSingletonHolder_value_(_reference, _aBlock.value()); _singletonHolders.put(_reference, _temp2); _temp1 = _temp2; } return _temp1; } public st.gravel.support.jvm.runtime.AlmostFinalValue singletonAtReference_initialize_(final AbsoluteReference _reference, final SharedDeclarationNode _sharedVariable) { return this.singletonAtReference_ifAbsentPut_(_reference, new st.gravel.support.jvm.Block0<Object>() { @Override public Object value() { if (_sharedVariable.initializer() != null) { return SystemMapping.this.evaluateExpression_reference_(_sharedVariable.initializer(), _reference); } return SystemMapping.this; } }); } public SystemMapping subclassMappingsFor_do_(final Reference _aReference, final st.gravel.support.jvm.Block1<Object, AbstractClassMapping> _aBlock) { final java.util.Set<AbstractClassMapping> _c; if (_subclassMappingsCache == null) { SystemMapping.this.buildSubclassMappingsCache(); } java.util.Set<AbstractClassMapping> _temp1 = _subclassMappingsCache.get(_aReference); _c = ((java.util.Set<AbstractClassMapping>) _temp1); if (_c == null) { return null; } for (final AbstractClassMapping _temp2 : _c) { _aBlock.value_(_temp2); } return this; } public AbstractMethodMapping superMethodMappingFor_methodName_(final Reference _aReference, final String _methodName) { final st.gravel.core.Symbol _sel; final ClassMapping _classMapping; final Reference _superclassReference; _classMapping = ((ClassMapping) this.classMappingAtReference_(_aReference)); _superclassReference = _classMapping.superclassReference(); if (_superclassReference == null) { return null; } _sel = _selectorConverter.functionNameAsSelector_(_methodName); return this.methodMappingFrom_selector_(((ClassMapping) this.classMappingAtReference_(_superclassReference)), _sel); } public SystemDefinitionNode systemDefinitionNode() { return _systemDefinitionNode; } public SystemNode systemNode() { return _systemNode; } public SystemMapping updateTo_(final SystemDefinitionNode _newSystemDefinitionNode) { final SystemDiff[] _diff; final SystemNode[] _newSystemNode; _newSystemNode = new SystemNode[1]; _diff = new SystemDiff[1]; _newSystemNode[0] = PackageNodeMerger.factory.systemDefinitionNode_(_newSystemDefinitionNode).load(); this.log_while_("Calculating diff", new st.gravel.support.jvm.Block0<Object>() { @Override public Object value() { return _diff[0] = _systemNode.diffTo_(_newSystemNode[0]); } }); this.log_while_("Applying diff", new st.gravel.support.jvm.Block0<Object>() { @Override public Object value() { return SystemMapping.this.applyDiff_(_diff[0]); } }); _systemDefinitionNode = _newSystemDefinitionNode; this.resetCache(); return this; } }