Skip to content

Commit a6d3c79

Browse files
committed
update to Signum.TSGEnerator 2.2.2
1 parent b9199a2 commit a6d3c79

File tree

6 files changed

+48
-72
lines changed

6 files changed

+48
-72
lines changed

Signum.React/Signum.React.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
<ItemGroup>
4949
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
5050
<PackageReference Include="Signum.Analyzer" Version="2.5.0" />
51-
<PackageReference Include="Signum.TSGenerator" Version="2.0.5" />
51+
<PackageReference Include="Signum.TSGenerator" Version="2.2.2" />
5252
</ItemGroup>
5353

5454
<ItemGroup>

Signum.TSGenerator/Program.cs

Lines changed: 44 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,20 @@ namespace Signum.TSGenerator
1313
{
1414
public static class Program
1515
{
16+
17+
1618
public static int Main(string[] args)
1719
{
20+
var log = Console.Out;
21+
1822
Stopwatch sw = Stopwatch.StartNew();
1923

2024
string intermediateAssembly = args[0];
2125
string[] references = File.ReadAllLines(args[1]);
2226
string[] content = File.ReadAllLines(args[2]);
2327

24-
var log = Console.Out;
25-
2628
log.WriteLine("Starting SignumTSGenerator");
2729

28-
bool hasPdb = File.Exists(Path.ChangeExtension(intermediateAssembly, ".pdb"));
29-
30-
AssemblyDefinition reactAssembly = AssemblyDefinition.ReadAssembly(intermediateAssembly, new ReaderParameters
31-
{
32-
ReadingMode = ReadingMode.Deferred,
33-
ReadSymbols = hasPdb,
34-
InMemory = true,
35-
SymbolReaderProvider = hasPdb ? new PdbReaderProvider() : null
36-
});
37-
38-
39-
if (AlreadyProcessed(reactAssembly))
40-
{
41-
log.WriteLine("SignumTSGenerator already processed: {0}", intermediateAssembly);
42-
return 0;
43-
}
44-
45-
PreloadingAssemblyResolver resolver = new PreloadingAssemblyResolver(references);
46-
4730
var assemblyReferences = (from r in references
4831
where r.Contains(".Entities")
4932
let reactDirectory = FindReactDirectory(r)
@@ -57,23 +40,42 @@ where r.Contains(".Entities")
5740

5841
var entitiesAssembly = Path.GetFileNameWithoutExtension(intermediateAssembly).Replace(".React", ".Entities");
5942
var entitiesAssemblyReference = assemblyReferences.GetOrThrow(entitiesAssembly);
60-
var entitiesModule = ModuleDefinition.ReadModule(entitiesAssemblyReference.AssemblyFullPath, new ReaderParameters { AssemblyResolver = resolver });
43+
44+
var currentDir = Directory.GetCurrentDirectory();
45+
var files = content
46+
.Where(file => Path.GetExtension(file) == ".t4s")
47+
.Select(file => Path.Combine(currentDir, file))
48+
.ToList();
49+
50+
var upToDateContent = string.Join("\r\n",
51+
new[] { entitiesAssemblyReference.AssemblyFullPath }
52+
.Concat(files)
53+
.OrderBy(a => a)
54+
.Select(f => File.GetLastWriteTimeUtc(f).ToString("o") + " " + Path.GetFileName(f)));
55+
56+
var signumUpToDatePath = Path.Combine(Path.GetDirectoryName(args[1]), "SignumUpToDate.txt");
57+
58+
if(File.Exists(signumUpToDatePath) && File.ReadAllText(signumUpToDatePath) == upToDateContent)
59+
{
60+
log.WriteLine($"SignumTSGenerator already processed ({sw.ElapsedMilliseconds.ToString()}ms)");
61+
return 0;
62+
}
63+
64+
var entityResolver = new PreloadingAssemblyResolver(references);
65+
var entitiesModule = ModuleDefinition.ReadModule(entitiesAssemblyReference.AssemblyFullPath, new ReaderParameters
66+
{
67+
AssemblyResolver = entityResolver
68+
});
69+
6170
var options = new AssemblyOptions
6271
{
6372
CurrentAssembly = entitiesAssembly,
6473
AssemblyReferences = assemblyReferences,
6574
AllReferences = references.ToDictionary(a => Path.GetFileNameWithoutExtension(a)),
6675
ModuleDefinition = entitiesModule,
67-
Resolver = resolver,
76+
Resolver = entityResolver,
6877
};
6978

70-
71-
var currentDir = Directory.GetCurrentDirectory();
72-
var files = content
73-
.Where(file => Path.GetExtension(file) == ".t4s")
74-
.Select(file => Path.Combine(currentDir, file))
75-
.ToList();
76-
7779
bool hasErrors = false;
7880
foreach (var file in files)
7981
{
@@ -95,52 +97,26 @@ where r.Contains(".Entities")
9597
catch (Exception ex)
9698
{
9799
hasErrors = true;
98-
log.WriteLine($"Error in {file}");
100+
log.WriteLine($"{file}:error STSG0001:{ex.Message}");
99101
log.WriteLine(ex.Message);
100102
}
101103
}
102104

103-
MarkAsProcessed(reactAssembly, resolver);
104-
105-
reactAssembly.Write(intermediateAssembly, new WriterParameters
105+
if (hasErrors)
106106
{
107-
WriteSymbols = hasPdb,
108-
SymbolWriterProvider = hasPdb ? new PdbWriterProvider() : null
109-
});
110-
111-
log.WriteLine($"SignumTSGenerator finished in {sw.ElapsedMilliseconds.ToString()}ms");
112-
113-
Console.WriteLine();
114-
115-
return hasErrors ? -1 : 0;
116-
}
117-
118-
static bool AlreadyProcessed(AssemblyDefinition assembly)
119-
{
120-
var nameof = typeof(GeneratedCodeAttribute).FullName;
121-
var attr = assembly.CustomAttributes
122-
.Any(a => a.AttributeType.FullName == nameof && ((string)a.ConstructorArguments[0].Value) == "SignumTask");
123-
124-
return attr;
125-
}
126-
127-
static void MarkAsProcessed(AssemblyDefinition assembly, IAssemblyResolver resolver)
128-
{
129-
TypeDefinition generatedCodeAttribute = resolver.Resolve(AssemblyNameReference.Parse(typeof(GeneratedCodeAttribute).Assembly.GetName().Name)).MainModule.GetType(typeof(GeneratedCodeAttribute).FullName);
130-
MethodDefinition constructor = generatedCodeAttribute.Methods.Single(a => a.IsConstructor && a.Parameters.Count == 2);
131-
132-
TypeReference stringType = assembly.MainModule.TypeSystem.String;
133-
assembly.CustomAttributes.Add(new CustomAttribute(assembly.MainModule.ImportReference(constructor))
107+
log.WriteLine($"SignumTSGenerator finished with errors ({sw.ElapsedMilliseconds.ToString()}ms)");
108+
Console.WriteLine();
109+
return 0;
110+
}
111+
else
134112
{
135-
ConstructorArguments =
136-
{
137-
new CustomAttributeArgument(stringType, "SignumTask"),
138-
new CustomAttributeArgument(stringType, typeof(Program).Assembly.GetName().Version.ToString()),
139-
}
140-
});
113+
File.WriteAllText(signumUpToDatePath, upToDateContent);
114+
log.WriteLine($"SignumTSGenerator finished ({sw.ElapsedMilliseconds.ToString()}ms)");
115+
Console.WriteLine();
116+
return 0;
117+
}
141118
}
142119

143-
144120
static string FindReactDirectory(string absoluteFilePath)
145121
{
146122
var prefix = absoluteFilePath;
Binary file not shown.

Signum.TSGenerator/Signum.TSGenerator.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
1010
<LangVersion>latest</LangVersion>
1111
<Platforms>x64;AnyCPU</Platforms>
12-
<Version>2.1.3</Version>
12+
<Version>2.2.2</Version>
1313
</PropertyGroup>
1414

1515
<ItemGroup>

Signum.TSGenerator/Signum.TSGenerator.nuspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<package >
33
<metadata>
44
<id>Signum.TSGenerator</id>
5-
<version>2.1.3</version>
5+
<version>2.2.2</version>
66
<title>TypeScript generator for Signum Framework applications</title>
77
<authors>Olmo del Corral</authors>
88
<license type="expression">MIT</license>

Signum.TSGenerator/Signum.TSGenerator.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<Target Name="GenerateSignumTS">
33
<WriteLinesToFile File="$(BaseIntermediateOutputPath)SignumReferences.txt" Lines="@(ReferencePath)" Overwrite="true" Encoding="Unicode" />
44
<WriteLinesToFile File="$(BaseIntermediateOutputPath)SignumContent.txt" Lines="@(Content);@(None)" Overwrite="true" Encoding="Unicode" />
5-
<Exec command="dotnet &quot;$(MSBuildThisFileDirectory)Signum.TSGenerator.dll&quot; &quot;@(IntermediateAssembly)&quot; &quot;$(BaseIntermediateOutputPath)SignumReferences.txt&quot; &quot;$(BaseIntermediateOutputPath)SignumContent.txt&quot;" ConsoleToMSBuild="false">
5+
<Exec command="dotnet &quot;$(MSBuildThisFileDirectory)Signum.TSGenerator.dll&quot; &quot;@(IntermediateAssembly)&quot; &quot;$(BaseIntermediateOutputPath)SignumReferences.txt&quot; &quot;$(BaseIntermediateOutputPath)SignumContent.txt&quot;" ConsoleToMSBuild="true">
66
<Output TaskParameter="ConsoleOutput" PropertyName="OutputOfExec" />
77
</Exec>
88
</Target>

0 commit comments

Comments
 (0)