[NUI]Fix build warning[CA1001]
authorhuiyu.eun <huiyu.eun@samsung.com>
Tue, 22 Dec 2020 03:46:26 +0000 (12:46 +0900)
committerdongsug-song <35130733+dongsug-song@users.noreply.github.com>
Tue, 22 Dec 2020 08:57:34 +0000 (17:57 +0900)
https://docs.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1001
CA1001: Types that own disposable fields should be disposable

Signed-off-by: huiyu.eun <huiyu.eun@samsung.com>
16 files changed:
src/Tizen.NUI.Components/Controls/Extension/SlidingSwitchExtension.cs
src/Tizen.NUI.Components/Style/ButtonStyle.cs
src/Tizen.NUI.Components/Style/ControlStyle.cs
src/Tizen.NUI.Components/Style/SliderStyle.cs
src/Tizen.NUI.Wearable/src/public/WearableStyle/CircularProgressStyle.cs
src/Tizen.NUI/src/internal/DisposeQueue.cs
src/Tizen.NUI/src/public/Accessibility/Accessibility.cs
src/Tizen.NUI/src/public/BaseComponents/Style/ViewStyle.cs
src/Tizen.NUI/src/public/KeyValue.cs
src/Tizen.NUI/src/public/Layouting/FlexLayout.cs
src/Tizen.NUI/src/public/Layouting/LayoutItem.cs
src/Tizen.NUI/src/public/Layouting/LayoutTransition.cs
src/Tizen.NUI/src/public/TransitionAnimations/TransitionAnimations.cs
src/Tizen.NUI/src/public/ViewProperty/BackgroundExtraData.cs
src/Tizen.NUI/src/public/ViewProperty/TextShadow.cs
src/Tizen.NUI/src/public/VisualMaps.cs

index 1086ceb..b52ba0e 100755 (executable)
@@ -27,8 +27,9 @@ namespace Tizen.NUI.Components.Extension
     /// </remark>
     /// </summary>
     [EditorBrowsable(EditorBrowsableState.Never)]
-    internal class SlidingSwitchExtension : SwitchExtension
+    internal class SlidingSwitchExtension : SwitchExtension, IDisposable
     {
+        private bool disposed = false;
         private Animation slidingAnimation;
 
         public SlidingSwitchExtension() : base()
@@ -80,5 +81,28 @@ namespace Tizen.NUI.Components.Extension
                 slidingAnimation = null;
             }
         }
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (disposing)
+            {
+                slidingAnimation?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }
index 321e3b8..0b132a1 100755 (executable)
@@ -234,22 +234,17 @@ namespace Tizen.NUI.Components
         /// <summary>
         /// Dispose ButtonStyle and all children on it.
         /// </summary>
-        /// <param name="type">Dispose type.</param>
+        /// <param name="disposing">true in order to free managed objects</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
+        protected override void Dispose(bool disposing)
         {
-            if (Disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
+            if (disposing)
             {
                 iconPadding?.Dispose();
                 textPadding?.Dispose();
             }
 
-            base.Dispose(type);
+            base.Dispose(disposing);
         }
     }
 }
index 63c170b..7593717 100755 (executable)
@@ -25,10 +25,8 @@ namespace Tizen.NUI.Components
     /// <since_tizen> 6 </since_tizen>
     /// This will be public opened in tizen_5.5 after ACR done. Before ACR, need to be hidden as inhouse API.
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public class ControlStyle : ViewStyle, global::System.IDisposable
+    public class ControlStyle : ViewStyle
     {
-        private bool isDisposeQueued = false;
-
         static ControlStyle()
         {
             ThemeManager.AddPackageTheme(new DefaultThemeCreator());
@@ -56,69 +54,6 @@ namespace Tizen.NUI.Components
         {
         }
 
-        /// <summary>
-        /// Dispose.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        ~ControlStyle()
-        {
-            if (!isDisposeQueued)
-            {
-                isDisposeQueued = true;
-                DisposeQueue.Instance.Add(this);
-            }
-        }
-
-        /// <summary>
-        /// A Flag to check if it is already disposed.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected bool Disposed { get; set; }
-
-        /// <summary>
-        /// Dispose.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        public void Dispose()
-        {
-            //Throw excpetion if Dispose() is called in separate thread.
-            if (!Window.IsInstalled())
-            {
-                throw new global::System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
-            }
-
-            if (isDisposeQueued)
-            {
-                Dispose(DisposeTypes.Implicit);
-            }
-            else
-            {
-                Dispose(DisposeTypes.Explicit);
-                global::System.GC.SuppressFinalize(this);
-            }
-        }
-
-        /// <summary>
-        /// Dispose.
-        /// </summary>
-        [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual void Dispose(DisposeTypes type)
-        {
-            if (Disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
-            {
-                //Called by User
-                //Release your own managed resources here.
-                //You should release all of your own disposable objects here.
-            }
-
-            Disposed = true;
-        }
-
         private void SubStyleCalledEvent(object sender, global::System.EventArgs e)
         {
             OnPropertyChanged();
index 2847861..a7b7bd8 100755 (executable)
@@ -214,21 +214,16 @@ namespace Tizen.NUI.Components
         /// <summary>
         /// Dispose SliderStyle and all children on it.
         /// </summary>
-        /// <param name="type">Dispose type.</param>
+        /// <param name="disposing">true in order to free managed objects</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
+        protected override void Dispose(bool disposing)
         {
-            if (Disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
+            if (disposing)
             {
                 trackPadding?.Dispose();
             }
 
-            base.Dispose(type);
+            base.Dispose(disposing);
         }
     }
 }
index 684684f..4bfa081 100755 (executable)
@@ -247,22 +247,17 @@ namespace Tizen.NUI.Wearable
         /// <summary>
         /// Dispose CircularProgressStyle and all children on it.
         /// </summary>
-        /// <param name="type">Dispose type.</param>
+        /// <param name="disposing">true in order to free managed objects</param>
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected override void Dispose(DisposeTypes type)
+        protected override void Dispose(bool disposing)
         {
-            if (Disposed)
-            {
-                return;
-            }
-
-            if (type == DisposeTypes.Explicit)
+            if (disposing)
             {
                 trackColor?.Dispose();
                 progressColor?.Dispose();
             }
 
-            base.Dispose(type);
+            base.Dispose(disposing);
         }
 
         private void Initialize()
index 21fd422..6fecc1d 100755 (executable)
@@ -9,9 +9,11 @@
 
 using System;
 using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
 
 namespace Tizen.NUI
 {
+    [SuppressMessage("Microsoft.Design", "CA1001:Types that own disposable fields should be disposable", Justification = "This is a singleton class and is not disposed")]
     internal class DisposeQueue
     {
         private static readonly DisposeQueue _disposableQueue = new DisposeQueue();
index 7631c62..99a9d22 100755 (executable)
@@ -31,6 +31,7 @@ namespace Tizen.NUI.Accessibility
     /// </summary>
     // This will be public opened after ACR done. (Before ACR, need to be hidden as Inhouse API)
     [SuppressMessage("Microsoft.Design", "CA1724: Type names should not match namespaces")]
+    [SuppressMessage("Microsoft.Design", "CA1001:Types that own disposable fields should be disposable", Justification = "This is a singleton class and is not disposed")]
     [EditorBrowsable(EditorBrowsableState.Never)]
     public class Accessibility
     {
index 782e050..b1cd970 100755 (executable)
@@ -26,8 +26,9 @@ namespace Tizen.NUI.BaseComponents
     /// </summary>
     /// This will be public opened in tizen_6.0 after ACR done. Before ACR, need to be hidden as inhouse API.
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public partial class ViewStyle : BindableObject
+    public partial class ViewStyle : BindableObject, IDisposable
     {
+        private bool disposed = false;
         private string styleName;
         private View.States? state;
         private View.States? subState;
@@ -768,5 +769,45 @@ namespace Tizen.NUI.BaseComponents
         {
             Margin = new Extents(start, end, top, bottom);
         }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (disposing)
+            {
+                // Dispose managed state (managed objects).
+                cellIndex?.Dispose();
+                downFocusableView?.Dispose();
+                flexMargin?.Dispose();
+                leftFocusableView?.Dispose();
+                margin?.Dispose();
+                maximumSize?.Dispose();
+                minimumSize?.Dispose();
+                orientation?.Dispose();
+                padding?.Dispose();
+                parentOrigin?.Dispose();
+                pivotPoint?.Dispose();
+                position?.Dispose();
+                rightFocusableView?.Dispose();
+                scale?.Dispose();
+                size?.Dispose();
+                sizeModeFactor?.Dispose();
+                upFocusableView?.Dispose();
+            }
+
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }
index ade27e2..77497d2 100755 (executable)
@@ -16,6 +16,7 @@
  */
 
 using System;
+using System.ComponentModel;
 using Tizen.NUI.Binding;
 
 namespace Tizen.NUI
@@ -23,8 +24,9 @@ namespace Tizen.NUI
     /// <summary>
     /// KeyValue class.
     /// </summary>
-    public class KeyValue
+    public class KeyValue : IDisposable
     {
+        private bool disposed = false;
         /// <summary>
         /// Int key.
         /// </summary>
@@ -548,5 +550,28 @@ namespace Tizen.NUI
                 KeyString = Key;
             }
         }
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+
+            if (disposing)
+            {
+                TrueValue?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }
index dc5b3c7..a11d719 100755 (executable)
@@ -29,7 +29,7 @@ namespace Tizen.NUI
     /// For more information about the flex layout API and how to use it please refer to https://yogalayout.com/docs/
     /// We implement the subset of the API in the class below.
     /// </summary>
-    public class FlexLayout : LayoutGroup, global::System.IDisposable
+    public class FlexLayout : LayoutGroup
     {
         /// <summary>
         /// FlexItemProperty
@@ -285,7 +285,7 @@ namespace Tizen.NUI
 
         /// <inheritdoc/>
         /// <since_tizen> 6 </since_tizen>
-        public void Dispose()
+        public new void Dispose()
         {
             Dispose(true);
             System.GC.SuppressFinalize(this);
@@ -302,7 +302,7 @@ namespace Tizen.NUI
         /// <param name="disposing">true in order to free managed objects</param>
         // Protected implementation of Dispose pattern.
         [EditorBrowsable(EditorBrowsableState.Never)]
-        protected virtual void Dispose(bool disposing)
+        protected override void Dispose(bool disposing)
         {
             if (disposedThis)
             {
@@ -341,8 +341,8 @@ namespace Tizen.NUI
 
             // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
             // TODO: set large fields to null.
-
             disposedThis = true;
+            base.Dispose(disposing);
         }
 
         /// <inheritdoc/>
index 97a63c1..4a83d70 100755 (executable)
@@ -37,8 +37,9 @@ namespace Tizen.NUI
     /// [Draft] Base class for layouts. It is used to layout a View
     /// It can be laid out by a LayoutGroup.
     /// </summary>
-    public class LayoutItem
+    public class LayoutItem : IDisposable
     {
+        private bool disposed = false;
         static bool LayoutDebugFrameData = false; // Debug flag
         private MeasureSpecification OldWidthMeasureSpec; // Store measure specification to compare against later
         private MeasureSpecification OldHeightMeasureSpec; // Store measure specification to compare against later
@@ -624,5 +625,29 @@ namespace Tizen.NUI
 
             return changed;
         }
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if(disposed)
+            {
+                return;
+            }
+
+            if (disposing)
+            {
+                _margin?.Dispose();
+                _padding?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }
index 3611f15..e43d141 100755 (executable)
@@ -17,6 +17,7 @@
 
 using System.Collections.Generic;
 using System;
+using System.ComponentModel;
 
 namespace Tizen.NUI
 {
@@ -100,8 +101,9 @@ namespace Tizen.NUI
     /// Parts of the transition that can be configured to provide a custom effect.
     /// </summary>
     /// <since_tizen> 6 </since_tizen>
-    public class TransitionComponents
+    public class TransitionComponents : IDisposable
     {
+        private bool disposed = false;
         /// <summary>
         /// TransitionComponents default constructor.
         /// </summary>
@@ -143,6 +145,28 @@ namespace Tizen.NUI
         /// </summary>
         /// <since_tizen> 6 </since_tizen>
         public AlphaFunction AlphaFunction;
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+            if (disposing)
+            {
+                AlphaFunction?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 
     /// <summary>
index f2799d5..dbd016c 100755 (executable)
@@ -42,8 +42,9 @@ namespace Tizen.NUI
     /// Transition animation effect
     /// </summary>
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public class TransitionAnimation
+    public class TransitionAnimation : IDisposable
     {
+        private bool disposed = false;
         private ImageViewStyle defaultImageStyle;
         private List<TransitionAnimationData> animationDataList;
         
@@ -136,6 +137,28 @@ namespace Tizen.NUI
                 defaultImageStyle = value;
             }
         }
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+            if (disposing)
+            {
+                defaultImageStyle?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 
     /// <summary>
index 8d95088..ba4efd8 100755 (executable)
  * limitations under the License.
  *
  */
+using System;
+using System.ComponentModel;
 
 namespace Tizen.NUI
 {
     /// <summary>
     /// The class storing Background extra properties such as CornerRadius, ImageBorder.
     /// </summary>
-    internal class BackgroundExtraData
+    internal class BackgroundExtraData : IDisposable
     {
+        private bool disposed = false;
         internal BackgroundExtraData()
         {
         }
@@ -53,6 +56,28 @@ namespace Tizen.NUI
         {
             return CornerRadius == 0 && Rectangle.IsNullOrZero(BackgroundImageBorder);
         }
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+            if (disposing)
+            {
+                backgroundImageBorder?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }
 
index af116f8..2a31ec3 100755 (executable)
@@ -24,8 +24,9 @@ namespace Tizen.NUI
     /// The Text Shadow for TextLabel.
     /// </summary>
     [EditorBrowsable(EditorBrowsableState.Never)]
-    public class TextShadow : ICloneable
+    public class TextShadow : ICloneable, IDisposable
     {
+        private bool disposed = false;
         private readonly PropertyMap propertyMap = null;
 
         internal delegate void PropertyChangedCallback(TextShadow instance);
@@ -113,5 +114,30 @@ namespace Tizen.NUI
 
             return new PropertyValue(instance.propertyMap);
         }
+
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+            if (disposing)
+            {
+                propertyMap?.Dispose();
+                Color?.Dispose();
+                Offset?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }
index da51c33..7c2f82b 100755 (executable)
@@ -14,6 +14,7 @@
  * limitations under the License.
  *
  */
+using System;
 using System.ComponentModel;
 using Tizen.NUI.BaseComponents;
 
@@ -23,8 +24,9 @@ namespace Tizen.NUI
     /// A class encapsulating the transform map of the visual.
     /// </summary>
     /// <since_tizen> 3 </since_tizen>
-    public class VisualMap
+    public class VisualMap : IDisposable
     {
+        private bool disposed = false;
         /// <summary>
         /// outputVisualMap.
         /// </summary>
@@ -676,5 +678,36 @@ namespace Tizen.NUI
             if (_visualOrigin != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.Origin, new PropertyValue((int)_visualOrigin)); }
             if (_visualAnchorPoint != null) { _visualTransformMap.Add((int)VisualTransformPropertyType.AnchorPoint, new PropertyValue((int)_visualAnchorPoint)); }
         }
+
+
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        protected virtual void Dispose(bool disposing)
+        {
+            if (disposed)
+            {
+                return;
+            }
+            if (disposing)
+            {
+                _commonlyUsedMap?.Dispose();
+                _mixColor?.Dispose();
+                _outputVisualMap?.Dispose();
+                _shader?.Dispose();
+                _visualOffset?.Dispose();
+                _visualOffsetPolicy?.Dispose();
+                _visualSize?.Dispose();
+                _visualSizePolicy?.Dispose();
+                _visualTransformMap?.Dispose();
+            }
+            disposed = true;
+        }
+
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public void Dispose()
+        {
+            Dispose(true);
+            global::System.GC.SuppressFinalize(this);
+        }
     }
 }