Skip to content

Commit 6c5025b

Browse files
fix: use using scope for typestack scope. generate unity .meta file
1 parent da1a382 commit 6c5025b

File tree

7 files changed

+153
-128
lines changed

7 files changed

+153
-128
lines changed

src/RandomFixtureKit.Unity/Assets/Scripts/RandomFixtureKit.Tests/Tests/TreeStructureTest.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/RandomFixtureKit.Unity/Assets/Scripts/RandomFixtureKit/Generators/CollectionGenerators.cs

Lines changed: 68 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,24 @@ public ArrayGenerator(Type type, int length)
1919

2020
public object Generate(in GenerationContext context)
2121
{
22-
context.TypeStack.Enter(Type);
23-
var elemType = Type.GetElementType();
24-
var generator = context.GetGenerator(elemType);
25-
var rank = Type.GetArrayRank();
26-
27-
var array = Array.CreateInstance(elemType, Enumerable.Range(0, rank).Select(_ => length).ToArray());
28-
switch (rank)
22+
using (var scope = context.TypeStack.Enter(Type))
2923
{
30-
case 1: SetOne(array, generator, context); break;
31-
case 2: SetTwo(array, generator, context); break;
32-
case 3: SetThree(array, generator, context); break;
33-
default:
34-
throw new InvalidOperationException($"Array rank:{rank} is not supported.");
35-
}
24+
var elemType = Type.GetElementType();
25+
var generator = context.GetGenerator(elemType);
26+
var rank = Type.GetArrayRank();
27+
28+
var array = Array.CreateInstance(elemType, Enumerable.Range(0, rank).Select(_ => length).ToArray());
29+
switch (rank)
30+
{
31+
case 1: SetOne(array, generator, context); break;
32+
case 2: SetTwo(array, generator, context); break;
33+
case 3: SetThree(array, generator, context); break;
34+
default:
35+
throw new InvalidOperationException($"Array rank:{rank} is not supported.");
36+
}
3637

37-
return array;
38+
return array;
39+
}
3840
}
3941

4042
void SetOne(Array array, IGenerator generator, GenerationContext context)
@@ -86,12 +88,14 @@ public ArraySegmentGenerator(Type type, int length)
8688

8789
public object Generate(in GenerationContext context)
8890
{
89-
context.TypeStack.Enter(Type);
90-
var elemType = type.GetGenericArguments()[0];
91-
var arrayGenerator = context.GetGenerator(elemType.MakeArrayType());
91+
using (var scope = context.TypeStack.Enter(Type))
92+
{
93+
var elemType = type.GetGenericArguments()[0];
94+
var arrayGenerator = context.GetGenerator(elemType.MakeArrayType());
9295

93-
var innerArray = arrayGenerator.Generate(context);
94-
return ReflectionHelper.CreateInstance(type, new[] { innerArray });
96+
var innerArray = arrayGenerator.Generate(context);
97+
return ReflectionHelper.CreateInstance(type, new[] { innerArray });
98+
}
9599
}
96100
}
97101

@@ -111,17 +115,19 @@ public ListGenerator(Type type, int length)
111115

112116
public object Generate(in GenerationContext context)
113117
{
114-
context.TypeStack.Enter(Type);
115-
var elemType = type.GetGenericArguments()[0];
116-
var generator = context.GetGenerator(elemType);
117-
118-
var list = ReflectionHelper.CreateInstance(type) as IList;
119-
for (int i = 0; i < length; i++)
118+
using (var scope = context.TypeStack.Enter(Type))
120119
{
121-
list.Add(generator.Generate(context));
122-
}
120+
var elemType = type.GetGenericArguments()[0];
121+
var generator = context.GetGenerator(elemType);
123122

124-
return list;
123+
var list = ReflectionHelper.CreateInstance(type) as IList;
124+
for (int i = 0; i < length; i++)
125+
{
126+
list.Add(generator.Generate(context));
127+
}
128+
129+
return list;
130+
}
125131
}
126132
}
127133

@@ -141,20 +147,22 @@ public DictionaryGenerator(Type type, int length)
141147

142148
public object Generate(in GenerationContext context)
143149
{
144-
var genArgs = type.GetGenericArguments();
145-
var keyType = genArgs[0];
146-
var valueType = genArgs[1];
147-
var keyGenerator = context.GetGenerator(keyType);
148-
var valueGenerator = context.GetGenerator(valueType);
149-
context.TypeStack.Enter(Type);
150-
151-
var dict = ReflectionHelper.CreateInstance(type) as IDictionary;
152-
for (int i = 0; i < length; i++)
150+
using (var scope = context.TypeStack.Enter(Type))
153151
{
154-
dict[keyGenerator.Generate(context)] = valueGenerator.Generate(context);
155-
}
152+
var genArgs = type.GetGenericArguments();
153+
var keyType = genArgs[0];
154+
var valueType = genArgs[1];
155+
var keyGenerator = context.GetGenerator(keyType);
156+
var valueGenerator = context.GetGenerator(valueType);
157+
158+
var dict = ReflectionHelper.CreateInstance(type) as IDictionary;
159+
for (int i = 0; i < length; i++)
160+
{
161+
dict[keyGenerator.Generate(context)] = valueGenerator.Generate(context);
162+
}
156163

157-
return dict;
164+
return dict;
165+
}
158166
}
159167
}
160168

@@ -173,19 +181,21 @@ public GenericReflectionCollectionGeneratorBase(Type type, int length)
173181

174182
public object Generate(in GenerationContext context)
175183
{
176-
context.TypeStack.Enter(Type);
177-
var elemType = Type.GetGenericArguments()[0];
178-
var generator = context.GetGenerator(elemType);
184+
using (var scope = context.TypeStack.Enter(Type))
185+
{
186+
var elemType = Type.GetGenericArguments()[0];
187+
var generator = context.GetGenerator(elemType);
179188

180-
var add = Type.GetMethod(AddMethodName, new[] { elemType });
189+
var add = Type.GetMethod(AddMethodName, new[] { elemType });
181190

182-
var collection = ReflectionHelper.CreateInstance(Type);
183-
for (int i = 0; i < length; i++)
184-
{
185-
add.Invoke(collection, new[] { generator.Generate(context) });
186-
}
191+
var collection = ReflectionHelper.CreateInstance(Type);
192+
for (int i = 0; i < length; i++)
193+
{
194+
add.Invoke(collection, new[] { generator.Generate(context) });
195+
}
187196

188-
return collection;
197+
return collection;
198+
}
189199
}
190200
}
191201

@@ -254,13 +264,15 @@ public InterfaceLookupGenerator(Type type, int length)
254264

255265
public object Generate(in GenerationContext context)
256266
{
257-
context.TypeStack.Enter(Type);
258-
var genType = type.GenericTypeArguments;
259-
var generator = context.GetGenerator(typeof(Dictionary<,>).MakeGenericType(new[] { genType[0], genType[1].MakeArrayType() }));
260-
var dictionary = generator.Generate(context);
267+
using (var scope = context.TypeStack.Enter(Type))
268+
{
269+
var genType = type.GenericTypeArguments;
270+
var generator = context.GetGenerator(typeof(Dictionary<,>).MakeGenericType(new[] { genType[0], genType[1].MakeArrayType() }));
271+
var dictionary = generator.Generate(context);
261272

262-
var lookup = ReflectionHelper.CreateInstance(typeof(PseudoLookup<,>).MakeGenericType(genType), new[] { dictionary });
263-
return lookup;
273+
var lookup = ReflectionHelper.CreateInstance(typeof(PseudoLookup<,>).MakeGenericType(genType), new[] { dictionary });
274+
return lookup;
275+
}
264276
}
265277

266278
// require to type hint to use in IL2CPP

src/RandomFixtureKit.Unity/Assets/Scripts/RandomFixtureKit/Generators/ObjectGenerator.cs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ public ObjectGenerator(Type type)
1919

2020
public object Generate(in GenerationContext context)
2121
{
22-
var scope = context.TypeStack.Enter(type);
23-
try
22+
using (var scope = context.TypeStack.Enter(type))
2423
{
2524
var obj = FormatterServices.GetUninitializedObject(type);
2625

@@ -38,10 +37,6 @@ public object Generate(in GenerationContext context)
3837

3938
return obj;
4039
}
41-
finally
42-
{
43-
scope.Dispose();
44-
}
4540
}
4641
}
4742

src/RandomFixtureKit.Unity/Assets/Scripts/RandomFixtureKit/Interfaces.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public IGenerator GetGenerator(Type type)
3636
}
3737
}
3838

39-
public readonly ref struct TypeStack
39+
public readonly struct TypeStack
4040
{
4141
readonly Stack<Type> stack;
4242

@@ -63,7 +63,7 @@ public int GetCount(Type type)
6363
return c;
6464
}
6565

66-
public readonly ref struct Exit // : IDisposable
66+
public readonly struct Exit: IDisposable
6767
{
6868
readonly TypeStack parent;
6969

0 commit comments

Comments
 (0)