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)); } }