public CodegenSubstitutionParamEntry( CodegenField field, string name, Type type) { Field = field; Name = name; Type = type; }
// -------------------------------------------------------------------------------- private CodegenField AddFieldUnsharedInternal( bool isFinal, Type type, CodegenExpression initCtorScoped) { var memberNumber = _currentMemberNumber++; var name = CodegenNamespaceScopeNames.AnyField(memberNumber); var member = new CodegenField(FieldsClassName, name, type, null, isFinal); _fieldsUnshared.Put(member, initCtorScoped); return member; }
public CodegenField AddSubstitutionParameter( string name, Type type) { var mixed = false; if (name == null) { if (!_substitutionParamsByName.IsEmpty()) { mixed = true; } } else if (!SubstitutionParamsByNumber.IsEmpty()) { mixed = true; } if (mixed) { throw new ArgumentException("Mixing named and unnamed substitution parameters is not allowed"); } if (name != null) { var entry = _substitutionParamsByName.Get(name); if (entry != null && !TypeHelper.IsSubclassOrImplementsInterface(type, entry.Type)) { throw new ArgumentException( "Substitution parameter '" + name + "' of type '" + entry.Type + "' cannot be assigned type '" + type + "'"); } } CodegenField member; if (name == null) { var assigned = ++_currentSubstitutionParamNumber; var fieldName = CodegenNamespaceScopeNames.AnySubstitutionParam(assigned); member = new CodegenField(FieldsClassName, fieldName, type, null, false); SubstitutionParamsByNumber.Add(new CodegenSubstitutionParamEntry(member, name, type)); } else { var existing = _substitutionParamsByName.Get(name); if (existing == null) { var assigned = ++_currentSubstitutionParamNumber; var fieldName = CodegenNamespaceScopeNames.AnySubstitutionParam(assigned); member = new CodegenField(FieldsClassName, fieldName, type, null, false); _substitutionParamsByName.Put(name, new CodegenSubstitutionParamEntry(member, name, type)); } else { member = existing.Field; } } return member; }
public CodegenExpressionInstanceField AddInstanceFieldUnshared( CodegenExpression instance, bool isFinal, Type type, CodegenExpression initCtorScoped) { if (FieldsClassName == null) { throw new IllegalStateException("No fields class name"); } CodegenField unshared = AddFieldUnsharedInternal(isFinal, type, initCtorScoped); return InstanceField(instance, unshared); }
public CodegenExpressionField AddOrGetFieldWellKnown( CodegenFieldName fieldName, Type type) { var existing = _fieldsNamed.Get(fieldName); if (existing != null) { if (existing.Type != type) { throw new IllegalStateException( "Field '" + fieldName + "' already registered with a different type, registered with " + existing.Type.GetSimpleName() + " but provided " + type.GetSimpleName()); } return Field(existing); } var field = new CodegenField(FieldsClassName, fieldName.Name, type, null, false); _fieldsNamed.Put(fieldName, field); return Field(field); }