Skip to content

Commit 2099dc9

Browse files
Avoid redundant NativeAOT test rebuild
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
1 parent 370a742 commit 2099dc9

1 file changed

Lines changed: 15 additions & 13 deletions

File tree

src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/TrimmableTypeMapBuildTests.cs

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -281,36 +281,38 @@ public R8JniPeer () { }
281281
"Disabling public mapping output should omit the ProGuard mapping from app-bundle metadata.");
282282
}
283283

284-
var outputTimestamps = rewrittenAssemblies
284+
IEnumerable<string> outputFiles = rewrittenAssemblies
285285
.Append (seedMapping)
286286
.Append (rewriteManifest)
287287
.Append (reachabilityManifest)
288-
.Append (finalMapping)
289-
.ToDictionary (path => path, File.GetLastWriteTimeUtc, StringComparer.Ordinal);
288+
.Append (finalMapping);
290289
string? ilcRspFile = null;
290+
string? ilcRspContent = null;
291291
if (runtime == AndroidRuntime.NativeAOT) {
292292
ilcRspFile = FindSingleFile (projectDirectory, $"{proj.ProjectName}.ilc.rsp");
293-
StringAssert.Contains ("r8-jni-rewritten", File.ReadAllText (ilcRspFile), "ILC should compile the rewritten managed inputs.");
293+
ilcRspContent = File.ReadAllText (ilcRspFile);
294+
StringAssert.Contains ("r8-jni-rewritten", ilcRspContent, "ILC should compile the rewritten managed inputs.");
295+
outputFiles = outputFiles.Append (ilcRspFile);
294296
}
297+
var outputTimestamps = outputFiles.ToDictionary (path => path, File.GetLastWriteTimeUtc, StringComparer.Ordinal);
295298

296299
Assert.IsTrue (builder.Build (proj, doNotCleanupOnUpdate: true, saveProject: false), "No-op R8 JNI name-rewriting build should have succeeded.");
297300
builder.Output.AssertTargetIsSkipped ("_AndroidCompileR8JniSeedJava");
298301
builder.Output.AssertTargetIsSkipped ("_AndroidGenerateR8JniSeedMapping");
299302
builder.Output.AssertTargetIsSkipped (runtime == AndroidRuntime.CoreCLR
300303
? "_AndroidRewriteJniNamesBeforeILLink"
301304
: "_AndroidRewriteJniNamesBeforeIlc");
302-
builder.Output.AssertTargetIsSkipped ("_CompileToDalvik");
303-
foreach (var pair in outputTimestamps) {
304-
Assert.AreEqual (pair.Value, File.GetLastWriteTimeUtc (pair.Key), $"No-op build should preserve {pair.Key}.");
305-
}
306-
307305
if (runtime == AndroidRuntime.NativeAOT) {
308-
File.Delete (ilcRspFile);
309-
Assert.IsTrue (builder.Build (proj, doNotCleanupOnUpdate: true, saveProject: false), "ILC response-file regeneration build should have succeeded.");
310-
builder.Output.AssertTargetIsSkipped ("_AndroidRewriteJniNamesBeforeIlc");
311306
builder.Output.AssertTargetIsNotSkipped ("WriteIlcRspFileForCompilation");
312307
FileAssert.Exists (ilcRspFile);
313-
StringAssert.Contains ("r8-jni-rewritten", File.ReadAllText (ilcRspFile), "A regenerated ILC response file should retain rewritten managed inputs when the rewrite target is skipped.");
308+
string actualIlcRspContent = File.ReadAllText (ilcRspFile);
309+
StringAssert.Contains ("r8-jni-rewritten", actualIlcRspContent, "ILC response-file recomputation should retain rewritten managed inputs when the rewrite target is skipped.");
310+
Assert.AreEqual (ilcRspContent, actualIlcRspContent, "ILC response-file recomputation should preserve rewritten managed inputs when the rewrite target is skipped.");
311+
Assert.AreEqual (outputTimestamps [ilcRspFile], File.GetLastWriteTimeUtc (ilcRspFile), "An unchanged ILC response file should preserve its timestamp.");
312+
}
313+
builder.Output.AssertTargetIsSkipped ("_CompileToDalvik");
314+
foreach (var pair in outputTimestamps) {
315+
Assert.AreEqual (pair.Value, File.GetLastWriteTimeUtc (pair.Key), $"No-op build should preserve {pair.Key}.");
314316
}
315317

316318
System.Threading.Thread.Sleep (1100);

0 commit comments

Comments
 (0)