Skip to content

Commit 14b33e5

Browse files
committed
Fix issue: #174
1 parent 9aa51ce commit 14b33e5

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

src/MemoryPack.Generator/Extensions.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,50 @@ public static bool TryGetMemoryPackableType(this ITypeSymbol symbol, ReferenceSy
138138
return true;
139139
}
140140

141+
public static bool IsMemoryPackableNoGenerate(this ITypeSymbol symbol, ReferenceSymbols references)
142+
{
143+
var memPackAttr = symbol.GetAttribute(references.MemoryPackableAttribute);
144+
var packableCtorArgs = memPackAttr?.ConstructorArguments;
145+
if (memPackAttr == null || packableCtorArgs == null)
146+
{
147+
return false;
148+
}
149+
else if (packableCtorArgs.Value.Length != 0)
150+
{
151+
// MemoryPackable has three attribtues
152+
// [GenerateType generateType]
153+
// [SerializeLayout serializeLayout]
154+
// [GenerateType generateType, SerializeLayout serializeLayout]
155+
156+
if (packableCtorArgs.Value.Length == 1)
157+
{
158+
var ctorValue = packableCtorArgs.Value[0];
159+
160+
// check which constructor was used
161+
var attrConstructor = memPackAttr.AttributeConstructor;
162+
var isSerializeLayout = attrConstructor!.Parameters[0].Type.Name == nameof(SerializeLayout);
163+
if (isSerializeLayout)
164+
{
165+
return false;
166+
}
167+
else
168+
{
169+
170+
var generateType = (GenerateType)(ctorValue.Value!);
171+
return generateType is GenerateType.NoGenerate;
172+
}
173+
}
174+
else
175+
{
176+
var generateType = (GenerateType)(packableCtorArgs.Value[0].Value ?? GenerateType.Object);
177+
178+
return generateType is GenerateType.NoGenerate;
179+
}
180+
}
181+
182+
return false;
183+
}
184+
141185
public static bool IsWillImplementMemoryPackUnion(this ITypeSymbol symbol, ReferenceSymbols references)
142186
{
143187
return symbol.IsAbstract && symbol.ContainsAttribute(references.MemoryPackUnionAttribute);

src/MemoryPack.Generator/MemoryPackGenerator.TypeScript.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ partial class MemoryPackGenerator
7979
{
8080
sb.AppendLine($"import {{ {item.Name} }} from \"./{item.Name}{typeScriptGenerateOptions.ImportExtension}\";");
8181
}
82-
foreach (var item in collector.GetMemoryPackableTypes(reference).Where(x => !SymbolEqualityComparer.Default.Equals(x, typeSymbol)))
82+
foreach (var item in collector.GetMemoryPackableTypes(reference)
83+
.Where(x => !SymbolEqualityComparer.Default.Equals(x, typeSymbol) && !x.IsMemoryPackableNoGenerate(reference)))
8384
{
8485
sb.AppendLine($"import {{ {item.Name} }} from \"./{item.Name}{typeScriptGenerateOptions.ImportExtension}\";");
8586
}

0 commit comments

Comments
 (0)