From ad593ef67cc8863c60fc909cf511e3bd06247903 Mon Sep 17 00:00:00 2001 From: MeltyPlayer Date: Thu, 25 Apr 2024 20:42:53 -0500 Subject: [PATCH] Migrated the tree file/directory types to the readonly generator. --- FinModelUtility/Fin/Fin/Fin.csproj | 2 +- .../Fin/Fin/src/io/Interfaces_Tree.cs | 74 ++++++++++++------- FinModelUtility/Formats/Ast/Ast/Ast.csproj | 2 +- FinModelUtility/Formats/Cmb/Cmb/Cmb.csproj | 2 +- FinModelUtility/Formats/Dat/Dat/Dat.csproj | 2 +- .../Formats/F3dzex2/F3dzex2.csproj | 2 +- FinModelUtility/Formats/Glo/Glo/Glo.csproj | 2 +- .../Formats/Granny3d/Granny3d.csproj | 2 +- FinModelUtility/Formats/Gx/Gx.csproj | 2 +- .../Formats/JSystem/JSystem/JSystem.csproj | 2 +- .../Formats/Level5/Level5/Level5.csproj | 2 +- FinModelUtility/Formats/Mdl/Mdl/Mdl.csproj | 2 +- FinModelUtility/Formats/Mod/Mod/Mod.csproj | 2 +- FinModelUtility/Formats/Modl/Modl/Modl.csproj | 2 +- .../Formats/Nitro/Nitro/Nitro.csproj | 2 +- .../Formats/Visceral/Visceral/Visceral.csproj | 2 +- FinModelUtility/Formats/Xmod/Xmod.csproj | 2 +- .../Games/BanjoKazooie/BanjoKazooie.csproj | 2 +- .../HaloWarsTools/HaloWarsTools.csproj | 2 +- .../PaperMarioDirectorsCut.csproj | 2 +- .../SuperMario64/SuperMario64.csproj | 2 +- .../TimeSplitters2/TimeSplitters2.csproj | 2 +- .../ModelPluginWrappers.csproj | 2 +- 23 files changed, 70 insertions(+), 48 deletions(-) diff --git a/FinModelUtility/Fin/Fin/Fin.csproj b/FinModelUtility/Fin/Fin/Fin.csproj index 312da892f..6ad338699 100644 --- a/FinModelUtility/Fin/Fin/Fin.csproj +++ b/FinModelUtility/Fin/Fin/Fin.csproj @@ -41,6 +41,6 @@ - + \ No newline at end of file diff --git a/FinModelUtility/Fin/Fin/src/io/Interfaces_Tree.cs b/FinModelUtility/Fin/Fin/src/io/Interfaces_Tree.cs index 25c44ee3f..0af0d5612 100644 --- a/FinModelUtility/Fin/Fin/src/io/Interfaces_Tree.cs +++ b/FinModelUtility/Fin/Fin/src/io/Interfaces_Tree.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using schema.readOnly; + namespace fin.io { // TODO: Come up with a better name for these "tree" interfaces? // The idea is that: @@ -11,60 +13,80 @@ namespace fin.io { // - system files refer to real files that exist within the file system // - these can be readonly or mutable - public interface IReadOnlyTreeIoObject : IEquatable where TIoObject : - IReadOnlyTreeIoObject + ITreeIoObject where TDirectory : - IReadOnlyTreeDirectory - where TFile : IReadOnlyTreeFile { + ITreeDirectory + where TFile : ITreeFile { string FullPath { get; } string Name { get; } + [Const] TDirectory AssertGetParent(); + + [Const] bool TryGetParent(out TDirectory parent); + + [Const] IEnumerable GetAncestry(); } - public interface IReadOnlyTreeDirectory - : IReadOnlyTreeIoObject + : ITreeIoObject where TIoObject : - IReadOnlyTreeIoObject + ITreeIoObject where TDirectory : - IReadOnlyTreeDirectory - where TFile : IReadOnlyTreeFile { + ITreeDirectory + where TFile : ITreeFile { bool IsEmpty { get; } + [Const] IEnumerable GetExistingSubdirs(); + + [Const] TDirectory AssertGetExistingSubdir(string path); + [Const] bool TryToGetExistingSubdir(string path, out TDirectory outDirectory); + [Const] IEnumerable GetExistingFiles(); + + [Const] TFile AssertGetExistingFile(string path); + [Const] bool TryToGetExistingFile(string path, out TFile outFile); + [Const] bool TryToGetExistingFileWithFileType(string pathWithoutExtension, out TFile outFile, params TFileType[] fileTypes); + [Const] IEnumerable GetFilesWithNameRecursive(string name); + + [Const] IEnumerable GetFilesWithFileType( TFileType fileType, bool includeSubdirs = false); } - public interface IReadOnlyTreeFile - : IReadOnlyTreeIoObject, - IReadOnlyGenericFile + [GenerateReadOnly] + public partial interface ITreeFile + : ITreeIoObject, + IGenericFile where TIoObject : - IReadOnlyTreeIoObject + ITreeIoObject where TDirectory : - IReadOnlyTreeDirectory - where TFile : IReadOnlyTreeFile { + ITreeDirectory + where TFile : ITreeFile { TFileType FileType { get; } string FullNameWithoutExtension { get; } @@ -72,17 +94,17 @@ public interface IReadOnlyTreeFile } - public interface IReadOnlyTreeIoObject - : IReadOnlyTreeIoObject { } + [GenerateReadOnly] + public partial interface ITreeIoObject + : ITreeIoObject; - public interface IReadOnlyTreeDirectory - : IReadOnlyTreeIoObject, - IReadOnlyTreeDirectory { } + [GenerateReadOnly] + public partial interface ITreeDirectory + : ITreeIoObject, + ITreeDirectory; - public interface IReadOnlyTreeFile - : IReadOnlyTreeIoObject, - IReadOnlyTreeFile { } + [GenerateReadOnly] + public partial interface ITreeFile + : ITreeIoObject, + ITreeFile; } \ No newline at end of file diff --git a/FinModelUtility/Formats/Ast/Ast/Ast.csproj b/FinModelUtility/Formats/Ast/Ast/Ast.csproj index 06c9d2e5d..f5bc260d4 100644 --- a/FinModelUtility/Formats/Ast/Ast/Ast.csproj +++ b/FinModelUtility/Formats/Ast/Ast/Ast.csproj @@ -12,6 +12,6 @@ - + diff --git a/FinModelUtility/Formats/Cmb/Cmb/Cmb.csproj b/FinModelUtility/Formats/Cmb/Cmb/Cmb.csproj index 9616c85a1..a4fb247c8 100644 --- a/FinModelUtility/Formats/Cmb/Cmb/Cmb.csproj +++ b/FinModelUtility/Formats/Cmb/Cmb/Cmb.csproj @@ -23,7 +23,7 @@ - + diff --git a/FinModelUtility/Formats/Dat/Dat/Dat.csproj b/FinModelUtility/Formats/Dat/Dat/Dat.csproj index 93c273b50..c70ff2acc 100644 --- a/FinModelUtility/Formats/Dat/Dat/Dat.csproj +++ b/FinModelUtility/Formats/Dat/Dat/Dat.csproj @@ -15,7 +15,7 @@ - + diff --git a/FinModelUtility/Formats/F3dzex2/F3dzex2.csproj b/FinModelUtility/Formats/F3dzex2/F3dzex2.csproj index 9054588a7..9f72e298c 100644 --- a/FinModelUtility/Formats/F3dzex2/F3dzex2.csproj +++ b/FinModelUtility/Formats/F3dzex2/F3dzex2.csproj @@ -15,7 +15,7 @@ - + diff --git a/FinModelUtility/Formats/Glo/Glo/Glo.csproj b/FinModelUtility/Formats/Glo/Glo/Glo.csproj index b47f94db4..ab9ced98d 100644 --- a/FinModelUtility/Formats/Glo/Glo/Glo.csproj +++ b/FinModelUtility/Formats/Glo/Glo/Glo.csproj @@ -15,7 +15,7 @@ - + diff --git a/FinModelUtility/Formats/Granny3d/Granny3d.csproj b/FinModelUtility/Formats/Granny3d/Granny3d.csproj index dc5afe3f4..6ceb877f1 100644 --- a/FinModelUtility/Formats/Granny3d/Granny3d.csproj +++ b/FinModelUtility/Formats/Granny3d/Granny3d.csproj @@ -13,7 +13,7 @@ - + diff --git a/FinModelUtility/Formats/Gx/Gx.csproj b/FinModelUtility/Formats/Gx/Gx.csproj index 6b72feea8..ad89931ed 100644 --- a/FinModelUtility/Formats/Gx/Gx.csproj +++ b/FinModelUtility/Formats/Gx/Gx.csproj @@ -14,7 +14,7 @@ - + diff --git a/FinModelUtility/Formats/JSystem/JSystem/JSystem.csproj b/FinModelUtility/Formats/JSystem/JSystem/JSystem.csproj index ee48cdc5b..e15a089fa 100644 --- a/FinModelUtility/Formats/JSystem/JSystem/JSystem.csproj +++ b/FinModelUtility/Formats/JSystem/JSystem/JSystem.csproj @@ -60,7 +60,7 @@ - + diff --git a/FinModelUtility/Formats/Level5/Level5/Level5.csproj b/FinModelUtility/Formats/Level5/Level5/Level5.csproj index d3ca22682..c6e40e972 100644 --- a/FinModelUtility/Formats/Level5/Level5/Level5.csproj +++ b/FinModelUtility/Formats/Level5/Level5/Level5.csproj @@ -13,7 +13,7 @@ - + diff --git a/FinModelUtility/Formats/Mdl/Mdl/Mdl.csproj b/FinModelUtility/Formats/Mdl/Mdl/Mdl.csproj index b9c746e3d..1710c09be 100644 --- a/FinModelUtility/Formats/Mdl/Mdl/Mdl.csproj +++ b/FinModelUtility/Formats/Mdl/Mdl/Mdl.csproj @@ -8,6 +8,6 @@ - + diff --git a/FinModelUtility/Formats/Mod/Mod/Mod.csproj b/FinModelUtility/Formats/Mod/Mod/Mod.csproj index ff51c2195..384a476fd 100644 --- a/FinModelUtility/Formats/Mod/Mod/Mod.csproj +++ b/FinModelUtility/Formats/Mod/Mod/Mod.csproj @@ -58,7 +58,7 @@ - + diff --git a/FinModelUtility/Formats/Modl/Modl/Modl.csproj b/FinModelUtility/Formats/Modl/Modl/Modl.csproj index 4eeb2cb0e..8b9acba9a 100644 --- a/FinModelUtility/Formats/Modl/Modl/Modl.csproj +++ b/FinModelUtility/Formats/Modl/Modl/Modl.csproj @@ -16,7 +16,7 @@ - + diff --git a/FinModelUtility/Formats/Nitro/Nitro/Nitro.csproj b/FinModelUtility/Formats/Nitro/Nitro/Nitro.csproj index 4063f2da0..1fd64242a 100644 --- a/FinModelUtility/Formats/Nitro/Nitro/Nitro.csproj +++ b/FinModelUtility/Formats/Nitro/Nitro/Nitro.csproj @@ -8,7 +8,7 @@ - + diff --git a/FinModelUtility/Formats/Visceral/Visceral/Visceral.csproj b/FinModelUtility/Formats/Visceral/Visceral/Visceral.csproj index 8b0138e35..729c1204e 100644 --- a/FinModelUtility/Formats/Visceral/Visceral/Visceral.csproj +++ b/FinModelUtility/Formats/Visceral/Visceral/Visceral.csproj @@ -14,7 +14,7 @@ - + diff --git a/FinModelUtility/Formats/Xmod/Xmod.csproj b/FinModelUtility/Formats/Xmod/Xmod.csproj index 918f2a169..ceaacba03 100644 --- a/FinModelUtility/Formats/Xmod/Xmod.csproj +++ b/FinModelUtility/Formats/Xmod/Xmod.csproj @@ -10,7 +10,7 @@ - + diff --git a/FinModelUtility/Games/BanjoKazooie/BanjoKazooie.csproj b/FinModelUtility/Games/BanjoKazooie/BanjoKazooie.csproj index dad7d8c87..4d836f301 100644 --- a/FinModelUtility/Games/BanjoKazooie/BanjoKazooie.csproj +++ b/FinModelUtility/Games/BanjoKazooie/BanjoKazooie.csproj @@ -15,7 +15,7 @@ - + diff --git a/FinModelUtility/Games/HaloWars/HaloWarsTools/HaloWarsTools.csproj b/FinModelUtility/Games/HaloWars/HaloWarsTools/HaloWarsTools.csproj index fab6b4025..a0317cca2 100644 --- a/FinModelUtility/Games/HaloWars/HaloWarsTools/HaloWarsTools.csproj +++ b/FinModelUtility/Games/HaloWars/HaloWarsTools/HaloWarsTools.csproj @@ -21,7 +21,7 @@ - + diff --git a/FinModelUtility/Games/PaperMarioDirectorsCut/PaperMarioDirectorsCut/PaperMarioDirectorsCut.csproj b/FinModelUtility/Games/PaperMarioDirectorsCut/PaperMarioDirectorsCut/PaperMarioDirectorsCut.csproj index 6242a21a1..6ce3bdfbe 100644 --- a/FinModelUtility/Games/PaperMarioDirectorsCut/PaperMarioDirectorsCut/PaperMarioDirectorsCut.csproj +++ b/FinModelUtility/Games/PaperMarioDirectorsCut/PaperMarioDirectorsCut/PaperMarioDirectorsCut.csproj @@ -8,7 +8,7 @@ - + diff --git a/FinModelUtility/Games/SuperMario64/SuperMario64/SuperMario64.csproj b/FinModelUtility/Games/SuperMario64/SuperMario64/SuperMario64.csproj index f26fb866f..0efc4bb76 100644 --- a/FinModelUtility/Games/SuperMario64/SuperMario64/SuperMario64.csproj +++ b/FinModelUtility/Games/SuperMario64/SuperMario64/SuperMario64.csproj @@ -67,6 +67,6 @@ - + \ No newline at end of file diff --git a/FinModelUtility/Games/TimeSplitters2/TimeSplitters2/TimeSplitters2.csproj b/FinModelUtility/Games/TimeSplitters2/TimeSplitters2/TimeSplitters2.csproj index 75da3d2d8..4fb828808 100644 --- a/FinModelUtility/Games/TimeSplitters2/TimeSplitters2/TimeSplitters2.csproj +++ b/FinModelUtility/Games/TimeSplitters2/TimeSplitters2/TimeSplitters2.csproj @@ -8,7 +8,7 @@ - + diff --git a/FinModelUtility/ModelPluginWrappers/ModelPluginWrappers.csproj b/FinModelUtility/ModelPluginWrappers/ModelPluginWrappers.csproj index 08e3ec60b..fea7d64fc 100644 --- a/FinModelUtility/ModelPluginWrappers/ModelPluginWrappers.csproj +++ b/FinModelUtility/ModelPluginWrappers/ModelPluginWrappers.csproj @@ -18,7 +18,7 @@ - +