Better showing templates
x) Remove oid x) Make res ? x) Dont show types when the type is the same as its enclosing type
This commit is contained in:
parent
da63a246e6
commit
0c37db10b5
@ -100,9 +100,6 @@ public record class Versioned<T> : Imm
|
||||
|
||||
Meta Imm.Meta => MetaStorage;
|
||||
|
||||
ObjectIDGenerator oIdGen = new();
|
||||
|
||||
|
||||
[lib.Dont]
|
||||
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
|
||||
internal ChangeDelegate OnChange = (old, cur) => {};
|
||||
@ -114,8 +111,7 @@ public record class Versioned<T> : Imm
|
||||
[CallerLineNumber] int dbgLine = 0
|
||||
)
|
||||
{
|
||||
var oid = oIdGen.GetId( fn, out var firstTime );
|
||||
log.debug( $"ADD {oid}/{firstTime} {log.whatFile(dbgPath)}({dbgLine}): {dbgName} added OnChange bcs {reason}" );
|
||||
log.debug( $"ADD {log.whatFile(dbgPath)}({dbgLine}): {dbgName} added OnChange bcs {reason}" );
|
||||
OnChange += fn;
|
||||
}
|
||||
|
||||
@ -125,8 +121,7 @@ public record class Versioned<T> : Imm
|
||||
[CallerLineNumber] int dbgLine = 0
|
||||
)
|
||||
{
|
||||
var oid = oIdGen.GetId( fn, out var firstTime );
|
||||
log.debug( $"REM {oid}/{firstTime}{log.whatFile(dbgPath)}({dbgLine}): {dbgName} removing OnChange" );
|
||||
log.debug( $"REM {log.whatFile(dbgPath)}({dbgLine}): {dbgName} removing OnChange" );
|
||||
OnChange -= fn;
|
||||
}
|
||||
|
||||
|
||||
@ -59,7 +59,7 @@ namespace res
|
||||
[Serializable]
|
||||
public class Ref<T> : Ref where T : class
|
||||
{
|
||||
public T res => m_res != null ? m_res : ( m_res = Mgr.load<T>( Filename ) );
|
||||
public T? res => m_res != null ? m_res : ( m_res = Mgr.load<T>( Filename ) );
|
||||
|
||||
//For serialization
|
||||
public Ref()
|
||||
@ -254,7 +254,7 @@ namespace res
|
||||
}
|
||||
//*/
|
||||
|
||||
static public T load<T>( string filename ) where T : class
|
||||
static public T? load<T>( string filename ) where T : class
|
||||
{
|
||||
if( ResCache<T>.s_cache.TryGetValue( filename, out var wr ) )
|
||||
{
|
||||
|
||||
@ -978,10 +978,10 @@ namespace lib
|
||||
|
||||
public void Serialize( Stream stream, object root )
|
||||
{
|
||||
Serialize( stream, null, root );
|
||||
Serialize( stream, null, typeof( object ), root );
|
||||
}
|
||||
|
||||
public void Serialize( Stream stream, MemberInfo mi, object root )
|
||||
public void Serialize( Stream stream, MemberInfo mi, Type mType, object root )
|
||||
{
|
||||
//lib.log.info( "Serialize( Stream stream, object root ) {0} {1}", m_rndVal, m_alreadySerialized.Count );
|
||||
|
||||
@ -992,7 +992,7 @@ namespace lib
|
||||
|
||||
writer.Formatting = Formatting.Indented;
|
||||
|
||||
Serialize( writer, mi, root );
|
||||
Serialize( writer, mi, mType, root );
|
||||
|
||||
//Rely on the parent closing the stream.
|
||||
//writer.Close();
|
||||
@ -1001,14 +1001,14 @@ namespace lib
|
||||
//lib.log.info( "Serialize END ( Stream stream, object root ) {0} {1}", m_rndVal, m_alreadySerialized.Count );
|
||||
}
|
||||
|
||||
private void Serialize( XmlWriter writer, MemberInfo mi, object root )
|
||||
private void Serialize( XmlWriter writer, MemberInfo mi, Type mType, object root )
|
||||
{
|
||||
//writer.WriteStartDocument();
|
||||
Serialize( writer, mi, root, "root", 1, true );
|
||||
Serialize( writer, mi, mType, root, "root", 1, true );
|
||||
//writer.WriteEndDocument();
|
||||
}
|
||||
|
||||
private void Serialize( XmlWriter writer, MemberInfo mi, object root, string name, int depth, bool forceType )
|
||||
private void Serialize( XmlWriter writer, MemberInfo mi, Type mType, object root, string name, int depth, bool forceType )
|
||||
{
|
||||
if( root != null )
|
||||
{
|
||||
@ -1035,16 +1035,16 @@ namespace lib
|
||||
{
|
||||
if( IsEnumerable( type ) )
|
||||
{
|
||||
SerializeCollection( writer, mi, root, depth );
|
||||
SerializeCollection( writer, mi, mType, root, depth );
|
||||
}
|
||||
else
|
||||
{
|
||||
SerializeObject( writer, mi, root, depth );
|
||||
SerializeObject( writer, mi, mType, root, depth );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
SerializeArray( writer, mi, root, depth );
|
||||
SerializeArray( writer, mi, mType, root, depth );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1065,6 +1065,7 @@ namespace lib
|
||||
{
|
||||
if( forceType )
|
||||
writer.WriteAttributeString( "_.t", getTypeName( root.GetType() ) );
|
||||
|
||||
writer.WriteAttributeString( "v", root.ToString() );
|
||||
}
|
||||
else
|
||||
@ -1073,7 +1074,7 @@ namespace lib
|
||||
}
|
||||
}
|
||||
|
||||
private void SerializeCollection( XmlWriter writer, MemberInfo mi, object root, int depth )
|
||||
private void SerializeCollection( XmlWriter writer, MemberInfo? mi, Type mType, object root, int depth )
|
||||
{
|
||||
IEnumerable it = root as IEnumerable;
|
||||
|
||||
@ -1083,7 +1084,11 @@ namespace lib
|
||||
|
||||
Type type = root.GetType();
|
||||
|
||||
if( mType != type )
|
||||
{
|
||||
log.info( $"Coll: {mType.Name} {mi?.Name} != {type.Name}" );
|
||||
writer.WriteAttributeString( "_.t", getTypeName( type ) );
|
||||
}
|
||||
|
||||
bool first;
|
||||
|
||||
@ -1104,16 +1109,24 @@ namespace lib
|
||||
int i = 0;
|
||||
foreach( var v in it )
|
||||
{
|
||||
Serialize( writer, mi, v, "i" + i.ToString(), depth + 1, false );
|
||||
Serialize( writer, null, typeElem, v, "i" + i.ToString(), depth + 1, false );
|
||||
++i;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void SerializeObject( XmlWriter writer, MemberInfo mi, object root, int depth )
|
||||
private void SerializeObject( XmlWriter writer, MemberInfo mi, Type mType, object root, int depth )
|
||||
{
|
||||
if( mType != root.GetType() )
|
||||
{
|
||||
var rType = root.GetType();
|
||||
var rTypeName = !rType.IsNested ? rType.Name : $"{rType.DeclaringType.Name}.{rType.Name}";
|
||||
var mTypeName = !mType.IsNested ? mType.Name : $"{mType.DeclaringType.Name}.{mType.Name}";
|
||||
var rootTypeName = !mType.IsNested ? mType.Name : $"{mType.DeclaringType.Name}.{mType.Name}";
|
||||
log.info( $"SerObj {mTypeName} != {rTypeName}" );
|
||||
writer.WriteAttributeString( "_.t", getTypeName( root.GetType() ) );
|
||||
}
|
||||
|
||||
if( depth == 1 )
|
||||
{
|
||||
@ -1159,7 +1172,7 @@ namespace lib
|
||||
|
||||
name = refl.TypeToIdentifier( name );
|
||||
|
||||
Serialize( writer, mi, serMember.Value, name, depth, true );
|
||||
Serialize( writer, mi, mType, serMember.Value, name, depth, true );
|
||||
}
|
||||
|
||||
return;
|
||||
@ -1200,6 +1213,8 @@ namespace lib
|
||||
HashSet<string> whitelistFields, whitelistProps;
|
||||
GetFilters( _cfg.TypesDefault, mi, narrowType, out filterFields, out filterProps, out doImpls, out doFields, out doProps, out whitelistFields, out whitelistProps );
|
||||
|
||||
var isImm = typeof(imm.Imm).IsAssignableFrom( narrowType );
|
||||
|
||||
if( doFields || doImpls )
|
||||
{
|
||||
var fields = refl.GetAllFields( narrowType );
|
||||
@ -1227,6 +1242,12 @@ namespace lib
|
||||
continue;
|
||||
}
|
||||
|
||||
if( isImm )
|
||||
{
|
||||
if( name == "MetaStorage" ) continue;
|
||||
if( name == "Fn" ) continue;
|
||||
}
|
||||
|
||||
if( FilterField( filterFields, doImpls, whitelistFields, childFi as MemberInfo, name ) )
|
||||
continue;
|
||||
|
||||
@ -1245,7 +1266,7 @@ namespace lib
|
||||
propName :
|
||||
name;
|
||||
|
||||
Serialize( writer, childFi, childFi.GetValue( root ), finalName, depth + 1, false );
|
||||
Serialize( writer, childFi, childFi.FieldType, childFi.GetValue( root ), finalName, depth + 1, false );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1263,6 +1284,12 @@ namespace lib
|
||||
continue;
|
||||
}
|
||||
|
||||
if( isImm )
|
||||
{
|
||||
if( name == "MetaStorage" ) continue;
|
||||
if( name == "Fn" ) continue;
|
||||
}
|
||||
|
||||
if( FilterField( filterProps, doImpls, whitelistProps, childPi as MemberInfo, name ) )
|
||||
continue;
|
||||
|
||||
@ -1275,7 +1302,7 @@ namespace lib
|
||||
|
||||
name = refl.TypeToIdentifier( name );
|
||||
|
||||
Serialize( writer, childPi, childPi.GetValue( root ), name, depth + 1, false );
|
||||
Serialize( writer, childPi, childPi.PropertyType, childPi.GetValue( root ), name, depth + 1, false );
|
||||
}
|
||||
}
|
||||
|
||||
@ -1298,7 +1325,7 @@ namespace lib
|
||||
whitelistProps = new( custWLProps?.Values ?? new string[0] );
|
||||
}
|
||||
|
||||
private void SerializeArray( XmlWriter writer, MemberInfo mi, object root, int depth )
|
||||
private void SerializeArray( XmlWriter writer, MemberInfo mi, Type mType, object root, int depth )
|
||||
{
|
||||
Array arr = (Array)root;
|
||||
|
||||
@ -1306,7 +1333,14 @@ namespace lib
|
||||
|
||||
Type type = root.GetType();
|
||||
|
||||
Type typeOfMember = typeof( object );
|
||||
if( mi is FieldInfo fi ) typeOfMember = fi.FieldType;
|
||||
if( mi is PropertyInfo pi ) typeOfMember = pi.PropertyType;
|
||||
if( typeOfMember != type )
|
||||
{
|
||||
log.info( $"SerArr {typeOfMember.Name} {mi?.Name} != {type.Name}" );
|
||||
writer.WriteAttributeString( "_.t", getTypeName( type ) );
|
||||
}
|
||||
|
||||
bool first;
|
||||
|
||||
@ -1324,10 +1358,11 @@ namespace lib
|
||||
m_alreadySerialized[refInt] = root;
|
||||
}
|
||||
|
||||
//typeElem.MemberType
|
||||
|
||||
for( int i = 0; i < arr.Length; ++i )
|
||||
{
|
||||
Serialize( writer, mi, arr.GetValue( i ), "i" + i.ToString(), depth + 1, false );
|
||||
Serialize( writer, mi, typeElem, arr.GetValue( i ), "i" + i.ToString(), depth + 1, false );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user