-
Notifications
You must be signed in to change notification settings - Fork 60
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GingerUtils Project Cleanup #4046
base: master
Are you sure you want to change the base?
GingerUtils Project Cleanup #4046
Conversation
WalkthroughThis pull request involves the removal of the "GingerUtilsTest" project from the Visual Studio solution file Changes
Sequence DiagramsequenceDiagram
participant Developer
participant GingerUtils
participant CoreLibraries
Developer->>GingerUtils: Refactor Namespaces
GingerUtils->>CoreLibraries: Update References
GingerUtils-->>Developer: Consolidated Utility Structure
Possibly related PRs
Suggested reviewers
Poem
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🔇 Additional comments (1)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🔭 Outside diff range comments (7)
Ginger/GingerUtils/OS/LinuxOS.cs (1)
Line range hint
44-44
: Potential issue with inline collection initialization.The syntax
List<object> removeModules = [];
is not standard C# for initializing a list. Verify you are targeting a C# version that supports this feature or usenew List<object>()
instead for broader compatibility.Consider reverting to the standard constructor usage:
-List<object> removeModules = []; +List<object> removeModules = new List<object>();Ginger/GingerUtils/OS/MacOS.cs (1)
Property hiding is correct, but base property should be marked virtual
The verification shows that the
UserAgent
property inLinuxOS
is not marked as virtual, which means thenew
keyword inMacOS
class is the correct approach for hiding the base implementation. However, this design could be improved:
- The
UserAgent
property inLinuxOS
should be marked asvirtual
to enable proper inheritance- Then
MacOS
class should useoverride
instead ofnew
This would make the inheritance relationship more explicit and prevent potential issues when using base class references.
Current references to
MacOS
in the codebase are correct and no namespace-related issues were found. The class is properly referenced inOperatingSystemBase
for instantiation.🔗 Analysis chain
Line range hint
20-24
: Confirm ‘new’ keyword usage and verify code references
Thenew
keyword hides the baseUserAgent
property instead of overriding it. If the intention was to override, ensure the base property inLinuxOS
is defined as virtual or abstract, and then useoverride
instead. If hiding is intended, confirm that no functionality is lost or confused by overshadowing. Additionally, verify that all references to the updatedMacOS
class and the newnamespace GingerUtils.OS
are updated throughout the codebase to prevent compilation or runtime issues.
Let me verify the base class implementation to understand if the
UserAgent
property is marked as virtual.
Let me try a different approach to check the LinuxOS class implementation.
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Description: Verify references to MacOS have been updated to the new namespace, ensuring no usage references the old namespace. rg -A 5 "MacOS"Length of output: 2256
Script:
#!/bin/bash # Check the LinuxOS class implementation for UserAgent property ast-grep --pattern 'class LinuxOS { $$$ $_ UserAgent $$$ $$$ }'Length of output: 6005
Script:
#!/bin/bash # Check the LinuxOS class implementation using ripgrep rg -A 10 "class LinuxOS"Length of output: 952
Ginger/GingerCoreNET/GlobalSolutionLib/GlobalSolutionUtils.cs (5)
Line range hint
305-305
: Critical syntax issue with list initialization.
List<string> filePaths = [];
is not valid C#. Usenew List<string>()
to properly instantiate the list.-List<string> filePaths = []; +List<string> filePaths = new List<string>();
Line range hint
379-379
: Repeating the same initialization bug.Same as above, replace
List<string> filePaths = [];
with a new instance.-List<string> filePaths = []; +List<string> filePaths = new List<string>();
Line range hint
412-412
: Again, incorrect list initialization.Use
new List<string>()
for C# list instantiation.-List<string> filePaths = []; +List<string> filePaths = new List<string>();
Line range hint
473-475
: Multiple invalid list initializations.For each of these variables:
•
List<string> filePathsActivity = [];
•List<string> filePathsActs = [];
•List<string> filePathsVars = [];
you must replace
[];
withnew List<string>();
.-List<string> filePathsActivity = []; -List<string> filePathsActs = []; -List<string> filePathsVars = []; +List<string> filePathsActivity = new List<string>(); +List<string> filePathsActs = new List<string>(); +List<string> filePathsVars = new List<string>();
Line range hint
821-821
: Invalid generic list instantiation.Change
List<VariableBase> variablePasswords = [];
to use the new operator.-List<VariableBase> variablePasswords = []; +List<VariableBase> variablePasswords = new List<VariableBase>();
🧹 Nitpick comments (4)
Ginger/GingerUtils/Helpers/ShellHelper.cs (1)
23-23
: Consider validating/sanitizing commands for security.
Since this class builds shell commands dynamically and injects user-provided input, there is a potential risk of command injection if untrusted data is passed. WhileGetEscapeArgs()
provides basic escaping, it may not cover all edge cases across different OS platforms. Consider adding stricter validation or additional sanitization to reduce the risk.Ginger/GingerPluginCore/CommLib/SocketHelper.cs (1)
Line range hint
52-78
: Enhance port allocation approachIn the
GetOpenPort()
method, you repeatedly create a newRandom
instance within the loop, which can introduce potential collisions on modern CPUs (e.g., when multiple threads are contending). A more robust approach involves reusing a singleRandom
instance or utilizing thread-safe random number generation. Additionally, consider verifying if the port is actually available (binding a socket briefly) to reduce the chance of port conflicts in multi-process scenarios.Ginger/Ginger/Reports/HTMLReportPage .xaml.cs (2)
127-127
: Consider renaming the method to avoid confusion.The method name
FileToBitmapImage
might suggest returning aSystem.Windows.Media.Imaging.BitmapImage
, but it actually returns aSystem.Drawing.Bitmap
. Consider using a more accurate name, such asFileToBitmap
.
126-136
: Post-disposal usage might lead to resource leaks.This method returns a disposable
Bitmap
. Ensure you properly dispose of the returned object after usage to avoid memory leaks, or convert it into a more WPF-friendly format (BitmapImage
) within the same scope if that's the ultimate goal in a WPF application.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (35)
Ginger/Ginger.sln
(0 hunks)Ginger/Ginger/Reports/HTMLReportPage .xaml.cs
(1 hunks)Ginger/Ginger/TimeLineLib/TimeLinePage.xaml.cs
(1 hunks)Ginger/GingerControls/TimeLineGraphLib/TimeLineGraphLevelToMarginConverterAlign.cs
(1 hunks)Ginger/GingerControls/TimeLineGraphLib/TimeLineGraphLevelToMarginConverterIndent.cs
(1 hunks)Ginger/GingerControls/TimeLineGraphLib/TimelineEventControl.xaml.cs
(1 hunks)Ginger/GingerCoreCommon/WorkSpaceLib/Solution.cs
(0 hunks)Ginger/GingerCoreNET/BPMN/Exportation/ActivitiesGroupToBPMNExporter.cs
(1 hunks)Ginger/GingerCoreNET/BPMN/Exportation/BusinessFlowToBPMNExporter.cs
(1 hunks)Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs
(1 hunks)Ginger/GingerCoreNET/GlobalSolutionLib/GlobalSolutionUtils.cs
(1 hunks)Ginger/GingerCoreNET/Run/GingerExecutionEngine.cs
(3 hunks)Ginger/GingerCoreNET/Run/RunListenerLib/GingerRunnerTimeLine.cs
(1 hunks)Ginger/GingerCoreNET/RunLib/CLILib/RunSetAutoRunConfiguration.cs
(1 hunks)Ginger/GingerCoreNET/RunLib/CLILib/RunSetAutoRunShortcut.cs
(1 hunks)Ginger/GingerCoreNET/Utility/FileUtils.cs
(1 hunks)Ginger/GingerCoreNET/Utility/StringManager.cs
(2 hunks)Ginger/GingerCoreNET/WorkSpaceLib/SolutionOperations.cs
(1 hunks)Ginger/GingerCoreNET/WorkSpaceLib/WorkSpace.cs
(1 hunks)Ginger/GingerCoreNETUnitTest/RunListeners/RunnerListenerTest.cs
(1 hunks)Ginger/GingerPluginCore/CommLib/SocketHelper.cs
(1 hunks)Ginger/GingerUtils/BitmapManager.cs
(0 hunks)Ginger/GingerUtils/GingerUtils.csproj
(0 hunks)Ginger/GingerUtils/Helpers/ShellHelper.cs
(1 hunks)Ginger/GingerUtils/MRUManager.cs
(0 hunks)Ginger/GingerUtils/OS/LinuxOS.cs
(1 hunks)Ginger/GingerUtils/OS/MacOS.cs
(1 hunks)Ginger/GingerUtils/OS/OperatingSystemBase.cs
(2 hunks)Ginger/GingerUtils/OS/WindowsOS.cs
(1 hunks)Ginger/GingerUtils/ShellService.cs
(0 hunks)Ginger/GingerUtils/StringCompressor.cs
(0 hunks)Ginger/GingerUtils/TimeLineLib/TimeLineEvent.cs
(1 hunks)Ginger/GingerUtils/TimeLineLib/TimeLineEvents.cs
(1 hunks)Ginger/GingerUtilsTest/ShellHelperTest.cs
(0 hunks)Ginger/GingerUtilsTest/StringCompressorTest.cs
(0 hunks)
💤 Files with no reviewable changes (9)
- Ginger/GingerUtils/GingerUtils.csproj
- Ginger/GingerUtilsTest/StringCompressorTest.cs
- Ginger/GingerUtils/MRUManager.cs
- Ginger/GingerUtils/BitmapManager.cs
- Ginger/GingerCoreCommon/WorkSpaceLib/Solution.cs
- Ginger/GingerUtilsTest/ShellHelperTest.cs
- Ginger/Ginger.sln
- Ginger/GingerUtils/ShellService.cs
- Ginger/GingerUtils/StringCompressor.cs
✅ Files skipped from review due to trivial changes (11)
- Ginger/GingerUtils/OS/WindowsOS.cs
- Ginger/GingerCoreNET/RunLib/CLILib/RunSetAutoRunConfiguration.cs
- Ginger/GingerUtils/TimeLineLib/TimeLineEvent.cs
- Ginger/GingerCoreNET/BPMN/Exportation/ActivitiesGroupToBPMNExporter.cs
- Ginger/GingerCoreNET/WorkSpaceLib/WorkSpace.cs
- Ginger/GingerCoreNETUnitTest/RunListeners/RunnerListenerTest.cs
- Ginger/GingerCoreNET/RunLib/CLILib/RunSetAutoRunShortcut.cs
- Ginger/Ginger/TimeLineLib/TimeLinePage.xaml.cs
- Ginger/GingerCoreNET/Run/RunListenerLib/GingerRunnerTimeLine.cs
- Ginger/GingerCoreNET/Utility/FileUtils.cs
- Ginger/GingerCoreNET/Run/GingerExecutionEngine.cs
🔇 Additional comments (20)
Ginger/GingerCoreNET/BPMN/Exportation/BusinessFlowToBPMNExporter.cs (4)
23-23
: Use of the new utility namespace is appropriate.
Bringing in Amdocs.Ginger.CoreNET.Utility
is consistent with the project restructuring and helps keep utility functions consolidated.
Line range hint 71-80
: Extended exception handling is well-designed.
Catching NoValidActivityFoundInGroupException
and respecting the _options.IgnoreGroupWithNoValidActivity
flag makes the export flow more flexible. This helps handle scenarios where an activity group lacks valid activities without prematurely failing the entire export. This approach is a good fit for user-defined preferences.
Line range hint 100-100
: Unique zip file path improves reliability.
Using FileUtils.GetUniqueFilePath
fortifies against potential file name collisions during ZIP creation. This is especially helpful in cases where parallel operations or repeated exports might otherwise overwrite existing files.
Line range hint 112-112
: Unique directory path approach is effective but consider concurrency.
FileUtils.GetUniqueDirectoryPath
ensures that existing directories won’t be overwritten. While this approach is efficient, be mindful of concurrency scenarios where multiple processes may attempt to create or remove the same directory. If the code handles such parallel invocations, ensure proper synchronization or exception handling to prevent possible race conditions.
Ginger/GingerUtils/OS/LinuxOS.cs (1)
27-27
: Namespace alignment looks good.
Changing the namespace to GingerUtils.OS
is consistent with the refactoring goals and helps consolidate OS-related utilities under a single logical grouping. This update should improve discoverability and maintainability.
Ginger/GingerControls/TimeLineGraphLib/TimeLineGraphLevelToMarginConverterAlign.cs (1)
19-19
: Namespace change aligns with the consolidation strategy.
This namespace import update is consistent with the broader refactoring effort to relocate TimeLine functionalities under GingerUtils.TimeLineLib
. No issues found in this change.
Ginger/GingerUtils/TimeLineLib/TimeLineEvents.cs (1)
23-23
:
Fix the invalid list initialization.
Using []
to initialize a List<TimeLineEvent>
will not compile. Update this to properly instantiate a new list, for example:
- private List<TimeLineEvent> mEvents = [];
+ private List<TimeLineEvent> mEvents = new List<TimeLineEvent>();
Likely invalid or redundant comment.
Ginger/GingerControls/TimeLineGraphLib/TimelineEventControl.xaml.cs (1)
19-19
: Consistent namespace import.
The updated import to GingerUtils.TimeLineLib
is aligned with the restructuring of timeline components. No further action needed.
Ginger/GingerControls/TimeLineGraphLib/TimeLineGraphLevelToMarginConverterIndent.cs (1)
19-19
: Confirm the new namespace usage.
This change correctly updates the namespace from GingerUtils.TimeLine
to GingerUtils.TimeLineLib
. Please ensure that all calls to TimeLineEvent
are also updated in the rest of the codebase to avoid referencing the old namespace.
As a follow-up, run the script below to confirm that there are no remaining references to the old TimeLine
namespace:
✅ Verification successful
The namespace change is correctly implemented across the codebase
The verification shows that:
- There are no remaining references to the old namespace
GingerUtils.TimeLine
- The new namespace
GingerUtils.TimeLineLib
is consistently used across all relevant files - All
TimeLineEvent
usages are properly referenced from the new namespace location
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# Description: Verify references to the old namespace
rg -A 3 'using GingerUtils.TimeLine;'
Length of output: 39
Script:
#!/bin/bash
# Let's verify both old and new namespace references
echo "=== Checking for old namespace ==="
rg -l "GingerUtils\.TimeLine\b"
echo -e "\n=== Checking for new namespace ==="
rg -l "GingerUtils\.TimeLineLib\b"
echo -e "\n=== Checking specific TimeLineEvent usage ==="
rg -A 3 "TimeLineEvent"
Length of output: 16818
Ginger/GingerCoreNET/Utility/StringManager.cs (2)
35-35
: Use var
consistently with established coding standards.
Switching from char
to var
is a minor stylistic change. Ensure it aligns with your project's coding guidelines regarding the usage of var
.
20-20
: Validate that all references to the old Ginger.Utils
namespace have been updated.
While changing the namespace to Amdocs.Ginger.CoreNET.Utility
appears intentional, references to the old namespace may remain in other parts of the codebase.
Below is a script to help locate any references to the old namespace:
✅ Verification successful
Let me try a different search strategy to verify the namespace changes.
Let me check the actual usage of StringManager in the files that reference it.
No references to old namespace found, changes are properly synchronized
The verification shows that:
- The file
GingerExecutionEngine.cs
correctly uses the new namespace through the import statementusing Amdocs.Ginger.CoreNET.Utility
- No other files in the codebase are using the old
Ginger.Utils
namespace (except for a documentation fileGinger Namespace.txt
) - The
StringManager
class is properly referenced and used in its new namespace location
🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash
# This script searches for references to "Ginger.Utils" in the entire codebase
rg -A 3 $'namespace Ginger.Utils|using Ginger.Utils'
Length of output: 53
Script:
#!/bin/bash
# Search for any references to StringManager class
rg -l "StringManager"
# Search for any remaining references to Ginger.Utils namespace
rg -l "Ginger\.Utils"
# Find all files in the Utility directory to understand the scope
fd . "Ginger/GingerCoreNET/Utility"
Length of output: 375
Script:
#!/bin/bash
# Check the content of files that reference StringManager
echo "=== Content of GingerExecutionEngine.cs ==="
rg -A 3 "StringManager" "Ginger/GingerCoreNET/Run/GingerExecutionEngine.cs"
# Check namespace declarations and using statements in these files
echo -e "\n=== Namespace and using statements in GingerExecutionEngine.cs ==="
rg "^(namespace|using) " "Ginger/GingerCoreNET/Run/GingerExecutionEngine.cs"
echo -e "\n=== Namespace and using statements in StringManager.cs ==="
rg "^(namespace|using) " "Ginger/GingerCoreNET/Utility/StringManager.cs"
Length of output: 2809
Ginger/GingerUtils/Helpers/ShellHelper.cs (1)
23-23
: Namespace updated as expected, but be mindful of removed test coverage.
The namespace change to GingerUtils.Helpers
aligns with the PR's objective to consolidate and reorganize. However, the corresponding test class (ShellHelperTest.cs
) appears to have been removed. If you still rely on these helpers, consider re-adding or relocating the tests to preserve coverage and proactively detect regressions.
Ginger/GingerPluginCore/CommLib/SocketHelper.cs (1)
19-19
: Namespace Change Validation
The namespace has been updated from Amdocs.Ginger.Common.OS
to GingerUtils.OS
. Ensure that all dependent references and usages of OperatingSystemBase
throughout the codebase are updated accordingly to avoid runtime issues.
Ginger/Ginger/Reports/HTMLReportPage .xaml.cs (1)
143-143
:
Correct syntax for the ObservableList initialization.
ObservableList<Bitmap> Bitmp = [];
is invalid C#. Use a proper constructor call:
- ObservableList<Bitmap> Bitmp = [];
+ ObservableList<Bitmap> Bitmp = new ObservableList<Bitmap>();
Likely invalid or redundant comment.
Ginger/GingerCoreNET/Drivers/CoreDrivers/Web/Selenium/SeleniumDriver.cs (1)
42-42
: LGTM: Using directive updated to GingerUtils.OS
The change from Amdocs.Ginger.Common.OS
to GingerUtils.OS
aligns with the project's namespace reorganization.
Ginger/GingerUtils/OS/OperatingSystemBase.cs (3)
19-19
: LGTM: Using directive updated to GingerUtils.Helpers
The change from Amdocs.Ginger.Common.Helpers
to GingerUtils.Helpers
aligns with the project's namespace reorganization.
25-25
: LGTM: Namespace updated to GingerUtils.OS
The namespace change from Amdocs.Ginger.Common.OS
to GingerUtils.OS
is consistent with the project's namespace reorganization.
46-46
: LGTM: Parameter type updated to lowercase string
Changed parameter type from String
to string
to follow C# conventions where string
is preferred over String
.
Ginger/GingerCoreNET/WorkSpaceLib/SolutionOperations.cs (1)
28-28
: LGTM: Using directive updated to GingerUtils.OS
The change from Amdocs.Ginger.Common.OS
to GingerUtils.OS
aligns with the project's namespace reorganization.
Ginger/GingerCoreNET/GlobalSolutionLib/GlobalSolutionUtils.cs (1)
36-36
: Good alignment of namespaces with the new module location.
Switching from Amdocs.Ginger.Common.OS
to GingerUtils.OS
helps consolidate references under the GingerUtils
namespace as intended in this project cleanup. If everything compiles correctly and no other part of the code depends on the old namespace, this change is .
if (string.IsNullOrEmpty(path)) | ||
{ | ||
return null; | ||
} | ||
|
||
Bitmap bmp = (Bitmap)Bitmap.FromFile(path); | ||
return (bmp); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Codebase verification
Based on the search results, I can see that there are several instances of Bitmap.FromFile
and Image.FromFile
usage in the codebase. Notably, in RunSetActionHTMLReportSendEmailOperations.cs
, there's a proper try-catch pattern for image loading, while other places like the file under review don't have error handling. This confirms that error handling for image loading is an established practice in the codebase.
Handle file operations exceptions when loading bitmap images.
The current implementation in HTMLReportPage.xaml.cs
should include error handling as it can throw various exceptions like FileNotFoundException
, OutOfMemoryException
, or other GDI+ exceptions. Here's the verified fix:
private Bitmap FileToBitmapImage(String path)
{
if (string.IsNullOrEmpty(path))
{
return null;
}
+ if (!File.Exists(path))
+ {
+ return null;
+ }
+ try
+ {
Bitmap bmp = (Bitmap)Bitmap.FromFile(path);
return (bmp);
+ }
+ catch (Exception ex)
+ {
+ // Log exception if needed
+ return null;
+ }
}
The fix is necessary because:
- The codebase shows precedent for proper error handling around image loading operations (e.g., in
RunSetActionHTMLReportSendEmailOperations.cs
) Bitmap.FromFile
can throw multiple exceptions that should be handled gracefully- The method is used in report generation, where we want to continue even if an image fails to load
- File existence check is a common pattern seen throughout the codebase for file operations
🔗 Analysis chain
Handle potential file exceptions and check file existence.
Bitmap.FromFile(path)
will throw an exception if the file does not exist or is unreadable. Avoid possible runtime exceptions by verifying file existence or wrapping this call in a try-catch block.
Proposed approach:
if (string.IsNullOrEmpty(path))
{
return null;
}
+ if (!File.Exists(path))
+ {
+ // Log or handle file not found scenario
+ return null;
+ }
try
{
Bitmap bmp = (Bitmap)Bitmap.FromFile(path);
return (bmp);
}
catch (Exception ex)
{
+ // Catch potential IO or GDI+ exceptions
+ // Log exception details (ex.Message)
return null;
}
Let me gather information about error handling patterns and file operations in the codebase.
Based on the search results, I can see that there are many instances of File.Exists
checks throughout the codebase, but no consistent pattern of exception handling around Bitmap.FromFile
. Let me search specifically for similar bitmap loading patterns.
Let me try a different search pattern to find Bitmap usage and error handling patterns.
🏁 Scripts executed
The following scripts were executed for the analysis:
Error: No shell scripts found
Script:
#!/bin/bash
# Search for similar Bitmap.FromFile usage patterns
rg "Bitmap\.FromFile" -A 5 -B 5
# Look for existing file existence checks
rg "File\.Exists" -A 3 -B 3
# Search for exception handling patterns around file operations
ast-grep --pattern 'try {
$$$
Bitmap $_ = $$$
$$$
} catch ($$$) {
$$$
}'
Length of output: 67186
Script:
#!/bin/bash
# Search for Bitmap loading patterns and their error handling
rg "Bitmap\s*=.*Bitmap\.FromFile" -B 5 -A 5
# Look for similar image loading patterns with try-catch
ast-grep --pattern 'try {
$$$
Image $_ = $$$
$$$
} catch ($$$) {
$$$
}'
Length of output: 852
Script:
#!/bin/bash
# Search for Bitmap.FromFile usage with more context
rg "Bitmap\.FromFile" -B 10 -A 10
# Look for try-catch blocks around file operations
ast-grep --pattern 'try {
$$$
Bitmap.$_($$$)
$$$
}'
# Search for similar image loading patterns
rg "Image\.(FromFile|Load)" -B 5 -A 5
Length of output: 17418
This PR consolidates rarely used helper files from GingerUtils into GingerCoreNET, GingerCoreCommon, and Ginger to streamline logic and reduce confusion by colocating relevant files. Also, includes updated namespaces that match folder path to aid discoverability.
==============================================
Thank you for your contribution.
Before submitting this PR, please make sure:
Summary by CodeRabbit
Based on the comprehensive summary, here are the updated release notes:
Project Structure
Amdocs.Ginger.Common
toGingerUtils
.Namespace Changes
GingerUtils.OS
instead ofAmdocs.Ginger.Common.OS
.GingerUtils.TimeLineLib
.Utility Modifications
BitmapManager
,MRUManager
,ShellService
, andStringCompressor
classes.Testing
ShellHelperTest
andStringCompressorTest
unit test files.Performance
These changes represent a significant refactoring of the project's utility and helper classes, focusing on namespace organization and code cleanup.