60 lines
1.7 KiB
C#
60 lines
1.7 KiB
C#
using Luban.Job.Common.Defs;
|
|
using Luban.Job.Common.RawDefs;
|
|
using Luban.Job.Db.TypeVisitors;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
namespace Luban.Job.Db.Defs
|
|
{
|
|
class DefBean : DefBeanBase
|
|
{
|
|
public DefBean(Bean b) : base(b)
|
|
{
|
|
|
|
}
|
|
|
|
protected override DefFieldBase CreateField(Field f, int idOffset)
|
|
{
|
|
return new DefField(this, f, idOffset);
|
|
}
|
|
|
|
public override void Compile()
|
|
{
|
|
var cs = new List<DefBeanBase>();
|
|
if (Children != null)
|
|
{
|
|
CollectHierarchyNotAbstractChildren(cs);
|
|
}
|
|
HierarchyNotAbstractChildren = cs;
|
|
|
|
|
|
var ids = new HashSet<int>();
|
|
foreach (var c in cs)
|
|
{
|
|
if (c.Id == 0)
|
|
{
|
|
throw new Exception($"bean:{FullName} is child of dynamic type. beanid:{Id} can't be 0!");
|
|
}
|
|
if (!ids.Add(c.Id))
|
|
{
|
|
throw new Exception($"bean:{c.FullName} beanid:{c.Id} duplicate!");
|
|
}
|
|
}
|
|
|
|
DefField.CompileFields(this, HierarchyFields, true);
|
|
//if (IsValueType && HierarchyFields.Any(f => f.CType.Apply(NeedSetChildrenRootVisitor.Ins)))
|
|
//{
|
|
// foreach (var f in Fields)
|
|
// {
|
|
// if (f.CType.Apply(NeedSetChildrenRootVisitor.Ins))
|
|
// {
|
|
// throw new Exception($"bean:{FullName} value type field:{f.Name} must be primitive type");
|
|
// }
|
|
// }
|
|
|
|
//}
|
|
}
|
|
}
|
|
}
|