Skip to content

Commit

Permalink
[Xamarin.Android.Build.Tasks] #deletebinobj going from 15.9 to master (
Browse files Browse the repository at this point in the history
…#3172)

I was actively looking for #deletebinobj bugs, and tried a scenario:

 1. Create the Master/Detail template from VS 2017 15.9
 2. Build with VS 2017 15.9
 3. Install/switch to VS 2019.
 4. Build with VS 2019 16.2/master

Unfortunately this hit a bug:

	Task CompileToDalvik
	...
	Xamarin.Android.Common.targets(2805,3): java.lang.IllegalArgumentException: already added :  Lmono/android/Seppuku;

`Seppuku.java` was another file we missed when creating the
`_CleanupOldStaticResources` target; see 5a9d1a6.

I plan to make a new type of test for this scenario, but for now I
updated the `RemoveOldMonoPackageManager()` to reproduce this issue.
  • Loading branch information
jonathanpeppers authored and jonpryor committed Jun 7, 2019
1 parent 4fddacb commit 7cce305
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3712,27 +3712,37 @@ public void RemoveOldMonoPackageManager ()
"_CompileJava",
};
Assert.IsTrue (b.Output.IsTargetSkipped (targets [0]), $"`{targets [0]}` should be skipped.");
var oldMonoPackageManager = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "MonoPackageManager.java");
var notifyTimeZoneChanges = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "android", "app", "NotifyTimeZoneChanges.java");
var intermediate = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath);
var oldMonoPackageManager = Path.Combine (intermediate, "android", "src", "mono", "MonoPackageManager.java");
var seppuku = Path.Combine (intermediate, "android", "src", "mono", "android", "Seppuku.java");
var notifyTimeZoneChanges = Path.Combine (intermediate, "android", "src", "mono", "android", "app", "NotifyTimeZoneChanges.java");
Directory.CreateDirectory (Path.GetDirectoryName (seppuku));
Directory.CreateDirectory (Path.GetDirectoryName (notifyTimeZoneChanges));
File.WriteAllText (oldMonoPackageManager, @"package mono;
public class MonoPackageManager { }
class MonoPackageManager_Resources { }");
File.WriteAllText (seppuku, @"package mono.android;
public class Seppuku { }");
File.WriteAllText (notifyTimeZoneChanges, @"package mono.android.app;
public class ApplicationRegistration { }");
var oldMonoPackageManagerClass = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "bin", "classes" , "mono", "MonoPackageManager.class");
var oldMonoPackageManagerClass = Path.Combine (intermediate, "android", "bin", "classes" , "mono", "MonoPackageManager.class");
var seppukuClass = Path.Combine (intermediate, "android", "bin", "classes", "mono", "android", "Seppuku.class");
Directory.CreateDirectory (Path.GetDirectoryName (seppukuClass));
File.WriteAllText (oldMonoPackageManagerClass, "");
File.WriteAllText (seppukuClass, "");
Assert.IsTrue (b.Build (proj), "Build should have succeeded.");
foreach (var target in targets) {
Assert.IsFalse (b.Output.IsTargetSkipped (target), $"`{target}` should *not* be skipped.");
}
// Old files that should *not* exist
FileAssert.DoesNotExist (oldMonoPackageManager);
FileAssert.DoesNotExist (oldMonoPackageManagerClass);
FileAssert.DoesNotExist (seppuku);
FileAssert.DoesNotExist (seppukuClass);
FileAssert.DoesNotExist (notifyTimeZoneChanges);
// New files that should exist
var monoPackageManager_Resources = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "src", "mono", "MonoPackageManager_Resources.java");
var monoPackageManager_ResourcesClass = Path.Combine (Root, b.ProjectDirectory, proj.IntermediateOutputPath, "android", "bin", "classes", "mono", "MonoPackageManager_Resources.class");
var monoPackageManager_Resources = Path.Combine (intermediate, "android", "src", "mono", "MonoPackageManager_Resources.java");
var monoPackageManager_ResourcesClass = Path.Combine (intermediate, "android", "bin", "classes", "mono", "MonoPackageManager_Resources.class");
FileAssert.Exists (monoPackageManager_Resources);
FileAssert.Exists (monoPackageManager_ResourcesClass);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1915,13 +1915,15 @@ because xbuild doesn't support framework reference assemblies.
<ItemGroup>
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\MultiDexLoader.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\ResourcePatcher.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\Seppuku.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\MonoPackageManager.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\IncrementalClassLoader.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\Placeholder.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\app\NotifyTimeZoneChanges.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\src\mono\android\incrementaldeployment\MonkeyPatcher.java" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\incrementaldeployment\MultiDexLoader.class" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\ResourcePatcher.class" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\Seppuku.class" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\MonoPackageManager.class" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\MonoPackageManager_Resources.class" />
<_OldStaticResources Include="$(MonoAndroidIntermediate)android\bin\classes\mono\android\incrementaldeployment\IncrementalClassLoader*.class" />
Expand Down

0 comments on commit 7cce305

Please sign in to comment.