diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 60afae7..0000000 --- a/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -packages/ -*.nupkg -*.suo -*.userprefs -*.user -ReactiveUI.Fody/obj/ -ReactiveUI.Fody/bin/ -ReactiveUI.Fody.Helpers.Net45/obj/ -ReactiveUI.Fody.Helpers.Net45/bin/ -ReactiveUI.Fody.Helpers.Ios/bin/ -ReactiveUI.Fody.Helpers.Ios/obj/ -ReactiveUI.Fody.Helpers.Android/bin/ -ReactiveUI.Fody.Helpers.Android/obj/ -Nuget/ReactiveUI.Fody.1.0.26/ -ReactiveUI.Fody.1.0.26/ -ReactiveUI.Fody.Helpers.Pcl/obj/ -ReactiveUI.Fody.Helpers.Pcl/bin/ -ReactiveUI.Fody.Tests/bin/ -ReactiveUI.Fody.Tests/obj/ -Weavers/bin/Weavers.dll -Weavers/bin/Weavers.pdb -_ReSharper.Caches \ No newline at end of file diff --git a/.nuget/packages.config b/.nuget/packages.config deleted file mode 100644 index b76f65f..0000000 --- a/.nuget/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index d6373fb..0000000 --- a/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Kirk Woll - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Nuget/Nuget.exe b/Nuget/Nuget.exe deleted file mode 100644 index 9ca6659..0000000 Binary files a/Nuget/Nuget.exe and /dev/null differ diff --git a/Nuget/ReactiveUIFody.nuspec b/Nuget/ReactiveUIFody.nuspec deleted file mode 100644 index 60f406a..0000000 --- a/Nuget/ReactiveUIFody.nuspec +++ /dev/null @@ -1,22 +0,0 @@ - - - - ReactiveUI.Fody - 2.0.0 - kirk - kirk - https://github.com/kswoll/ReactiveUI.Fody - http://www.opensource.org/licenses/mit-license.php - Fix some other bugs around properties in generic types. - false - Fody extension to generate RaisePropertyChange notifications for properties and ObservableAsPropertyHelper properties. - Copyright 2015 - reactiveui fody - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e00371e --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +HTTP/1.1 301 Moved Permanently +Location: https://github.com/reactiveui/ReactiveUI/pull/1503 \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Android/Properties/AssemblyInfo.cs b/ReactiveUI.Fody.Helpers.Android/Properties/AssemblyInfo.cs deleted file mode 100644 index 19a7513..0000000 --- a/ReactiveUI.Fody.Helpers.Android/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Android.App; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ReactiveUI.Fody.Helpers")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ReactiveUI.Fody.Helpers")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: ComVisible(false)] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReactiveUI.Fody.Helpers.Android/ReactiveUI.Fody.Helpers.Android.csproj b/ReactiveUI.Fody.Helpers.Android/ReactiveUI.Fody.Helpers.Android.csproj deleted file mode 100644 index 054d3c9..0000000 --- a/ReactiveUI.Fody.Helpers.Android/ReactiveUI.Fody.Helpers.Android.csproj +++ /dev/null @@ -1,85 +0,0 @@ - - - - Debug - AnyCPU - 8.0.30703 - 2.0 - {6D2A6846-A8B7-4186-807D-12E335BD1C67} - {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - Properties - ReactiveUI.Fody.Helpers - ReactiveUI.Fody.Helpers - 512 - Resources\Resource.Designer.cs - Off - True - True - v5.0 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - ..\packages\reactiveui-core.7.0.0\lib\portable-net45+netcore45+wpa81+win8+wp8+UAP10+MonoAndroid403+MonoTouch10+Xamarin.iOS10\ReactiveUI.dll - True - - - ..\packages\Splat.1.6.0\lib\monoandroid\Splat.dll - - - - - ..\packages\Rx-Core.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll - - - ..\packages\Rx-PlatformServices.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Android/Resources/AboutResources.txt b/ReactiveUI.Fody.Helpers.Android/Resources/AboutResources.txt deleted file mode 100644 index 194ae28..0000000 --- a/ReactiveUI.Fody.Helpers.Android/Resources/AboutResources.txt +++ /dev/null @@ -1,50 +0,0 @@ -Images, layout descriptions, binary blobs and string dictionaries can be included -in your application as resource files. Various Android APIs are designed to -operate on the resource IDs instead of dealing with images, strings or binary blobs -directly. - -For example, a sample Android app that contains a user interface layout (main.xml), -an internationalization string table (strings.xml) and some icons (drawable-XXX/icon.png) -would keep its resources in the "Resources" directory of the application: - -Resources/ - drawable-hdpi/ - icon.png - - drawable-ldpi/ - icon.png - - drawable-mdpi/ - icon.png - - layout/ - main.xml - - values/ - strings.xml - -In order to get the build system to recognize Android resources, set the build action to -"AndroidResource". The native Android APIs do not operate directly with filenames, but -instead operate on resource IDs. When you compile an Android application that uses resources, -the build system will package the resources for distribution and generate a class called -"Resource" that contains the tokens for each one of the resources included. For example, -for the above Resources layout, this is what the Resource class would expose: - -public class Resource { - public class drawable { - public const int icon = 0x123; - } - - public class layout { - public const int main = 0x456; - } - - public class strings { - public const int first_string = 0xabc; - public const int second_string = 0xbcd; - } -} - -You would then use R.drawable.icon to reference the drawable/icon.png file, or Resource.layout.main -to reference the layout/main.xml file, or Resource.strings.first_string to reference the first -string in the dictionary file values/strings.xml. \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Android/Resources/Resource.Designer.cs b/ReactiveUI.Fody.Helpers.Android/Resources/Resource.Designer.cs deleted file mode 100644 index d481454..0000000 --- a/ReactiveUI.Fody.Helpers.Android/Resources/Resource.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -#pragma warning disable 1591 -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -[assembly: global::Android.Runtime.ResourceDesignerAttribute("ReactiveUI.Fody.Helpers.Resource", IsApplication=false)] - -namespace ReactiveUI.Fody.Helpers -{ - - - [System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")] - public partial class Resource - { - - static Resource() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - public partial class Attribute - { - - static Attribute() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private Attribute() - { - } - } - - public partial class String - { - - // aapt resource value: 0x7f020002 - public static int ApplicationName = 2130837506; - - // aapt resource value: 0x7f020001 - public static int Hello = 2130837505; - - // aapt resource value: 0x7f020000 - public static int library_name = 2130837504; - - static String() - { - global::Android.Runtime.ResourceIdManager.UpdateIdValues(); - } - - private String() - { - } - } - } -} -#pragma warning restore 1591 diff --git a/ReactiveUI.Fody.Helpers.Android/Resources/Values/Strings.xml b/ReactiveUI.Fody.Helpers.Android/Resources/Values/Strings.xml deleted file mode 100644 index 8fd1763..0000000 --- a/ReactiveUI.Fody.Helpers.Android/Resources/Values/Strings.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - Hello World, Click Me! - $projectname$ - diff --git a/ReactiveUI.Fody.Helpers.Android/packages.config b/ReactiveUI.Fody.Helpers.Android/packages.config deleted file mode 100644 index dd7de72..0000000 --- a/ReactiveUI.Fody.Helpers.Android/packages.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Ios/Properties/AssemblyInfo.cs b/ReactiveUI.Fody.Helpers.Ios/Properties/AssemblyInfo.cs deleted file mode 100644 index 922930a..0000000 --- a/ReactiveUI.Fody.Helpers.Ios/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ReactiveUI.Fody.Helpers.Ios")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ReactiveUI.Fody.Helpers.Ios")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2986e217-fe12-4070-8926-fe6ac596094e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReactiveUI.Fody.Helpers.Ios/ReactiveUI.Fody.Helpers.Ios.csproj b/ReactiveUI.Fody.Helpers.Ios/ReactiveUI.Fody.Helpers.Ios.csproj deleted file mode 100644 index c02be2e..0000000 --- a/ReactiveUI.Fody.Helpers.Ios/ReactiveUI.Fody.Helpers.Ios.csproj +++ /dev/null @@ -1,69 +0,0 @@ - - - - Debug - iPhoneSimulator - 8.0.30703 - 2.0 - {377C39ED-0F7E-4522-A41E-96C5BA0C4FCB} - {FEACFBD2-3405-455C-9665-78FE426C6842};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Library - ReactiveUI.Fody.Helpers - Resources - ReactiveUI.Fody.Helpers - - - true - full - false - bin\iPhone\Debug - DEBUG - prompt - 4 - false - true - iPhone Developer - - - none - true - bin\iPhone\Release - prompt - 4 - false - iPhone Developer - - - - - - - - - - ..\packages\reactiveui-core.7.0.0\lib\portable-net45+netcore45+wpa81+win8+wp8+UAP10+MonoAndroid403+MonoTouch10+Xamarin.iOS10\ReactiveUI.dll - True - - - ..\packages\Splat.1.6.0\lib\Xamarin.iOS10\Splat.dll - - - - ..\packages\Rx-Core.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.Linq.dll - - - ..\packages\Rx-PlatformServices.2.2.5\lib\portable-windows8+net45+wp8\System.Reactive.PlatformServices.dll - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Ios/packages.config b/ReactiveUI.Fody.Helpers.Ios/packages.config deleted file mode 100644 index 81695d7..0000000 --- a/ReactiveUI.Fody.Helpers.Ios/packages.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Net45/Properties/AssemblyInfo.cs b/ReactiveUI.Fody.Helpers.Net45/Properties/AssemblyInfo.cs deleted file mode 100644 index 0898907..0000000 --- a/ReactiveUI.Fody.Helpers.Net45/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ReactiveUI.Fody.Helpers.Net45")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ReactiveUI.Fody.Helpers.Net45")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("525a89d6-cbd1-4776-9692-952d32f01e28")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReactiveUI.Fody.Helpers.Net45/ReactiveUI.Fody.Helpers.Net45.csproj b/ReactiveUI.Fody.Helpers.Net45/ReactiveUI.Fody.Helpers.Net45.csproj deleted file mode 100644 index 136c318..0000000 --- a/ReactiveUI.Fody.Helpers.Net45/ReactiveUI.Fody.Helpers.Net45.csproj +++ /dev/null @@ -1,79 +0,0 @@ - - - - - Debug - AnyCPU - {1CA52110-BE45-4C45-B709-28061077E2A5} - Library - Properties - ReactiveUI.Fody.Helpers - ReactiveUI.Fody.Helpers - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\reactiveui-core.7.0.0\lib\portable-net45+netcore45+wpa81+win8+wp8+UAP10+MonoAndroid403+MonoTouch10+Xamarin.iOS10\ReactiveUI.dll - True - - - ..\packages\Splat.1.6.0\lib\Net45\Splat.dll - - - - - ..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll - - - ..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll - - - ..\packages\Rx-XAML.2.2.5\lib\net45\System.Reactive.Windows.Threading.dll - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Net45/packages.config b/ReactiveUI.Fody.Helpers.Net45/packages.config deleted file mode 100644 index 525cbf7..0000000 --- a/ReactiveUI.Fody.Helpers.Net45/packages.config +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Pcl/Properties/AssemblyInfo.cs b/ReactiveUI.Fody.Helpers.Pcl/Properties/AssemblyInfo.cs deleted file mode 100644 index 3758f57..0000000 --- a/ReactiveUI.Fody.Helpers.Pcl/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Resources; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ReactiveUI.Fody.Helpers.Pcl")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ReactiveUI.Fody.Helpers.Pcl")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] -[assembly: NeutralResourcesLanguage("en")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReactiveUI.Fody.Helpers.Pcl/ReactiveUI.Fody.Helpers.Pcl.csproj b/ReactiveUI.Fody.Helpers.Pcl/ReactiveUI.Fody.Helpers.Pcl.csproj deleted file mode 100644 index 2441955..0000000 --- a/ReactiveUI.Fody.Helpers.Pcl/ReactiveUI.Fody.Helpers.Pcl.csproj +++ /dev/null @@ -1,72 +0,0 @@ - - - - - 10.0 - Debug - AnyCPU - {8509509A-17C7-4CF0-84AD-5DD208446766} - Library - Properties - ReactiveUI.Fody.Helpers - ReactiveUI.Fody.Helpers - en-US - 512 - {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - Profile259 - v4.5 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - ..\packages\reactiveui-core.7.0.0\lib\portable-net45+netcore45+wpa81+win8+wp8+UAP10+MonoAndroid403+MonoTouch10+Xamarin.iOS10\ReactiveUI.dll - True - - - ..\packages\Splat.1.6.0\lib\Portable-net45+win+wpa81+wp80\Splat.dll - - - ..\packages\Rx-Core.2.2.5\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.2.5\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.2.5\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.Linq.dll - - - ..\packages\Rx-PlatformServices.2.2.5\lib\portable-net45+winrt45+wp8+wpa81\System.Reactive.PlatformServices.dll - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers.Pcl/packages.config b/ReactiveUI.Fody.Helpers.Pcl/packages.config deleted file mode 100644 index 7fd9b2f..0000000 --- a/ReactiveUI.Fody.Helpers.Pcl/packages.config +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers/LogPropertyOnErrorException.cs b/ReactiveUI.Fody.Helpers/LogPropertyOnErrorException.cs deleted file mode 100644 index a031de3..0000000 --- a/ReactiveUI.Fody.Helpers/LogPropertyOnErrorException.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace ReactiveUI.Fody.Helpers -{ - public class LogPropertyOnErrorException : Exception - { - public new object Source { get; } - public string Property { get; } - - public LogPropertyOnErrorException(object source, string property, Exception innerException) : - base($"An exception occurred when a property change notification was fired on {source.GetType().FullName}.{property} on an instance of {source.GetType().FullName}: {source}", innerException) - { - Source = source; - Property = property; - } - } -} diff --git a/ReactiveUI.Fody.Helpers/LogPropertyOnErrorObservable.cs b/ReactiveUI.Fody.Helpers/LogPropertyOnErrorObservable.cs deleted file mode 100644 index abfb957..0000000 --- a/ReactiveUI.Fody.Helpers/LogPropertyOnErrorObservable.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; - -namespace ReactiveUI.Fody.Helpers -{ - internal class LogPropertyOnErrorObservable : IObservable - { - private readonly IObservable @this; - private readonly object source; - private readonly string property; - - public LogPropertyOnErrorObservable(IObservable @this, object source, string property) - { - this.@this = @this; - this.source = source; - this.property = property; - } - - public IDisposable Subscribe(IObserver observer) - { - return @this.Subscribe(new LogPropertyOnErrorObserver(observer, source, property)); - } - - private class LogPropertyOnErrorObserver : IObserver - { - private readonly IObserver @this; - private readonly object source; - private readonly string property; - - public LogPropertyOnErrorObserver(IObserver @this, object source, string property) - { - this.@this = @this; - this.source = source; - this.property = property; - } - - public void OnCompleted() - { - @this.OnCompleted(); - } - - public void OnError(Exception error) - { - @this.OnError(new LogPropertyOnErrorException(source, property, error)); - } - - public void OnNext(T value) - { - @this.OnNext(value); - } - } - } -} diff --git a/ReactiveUI.Fody.Helpers/ObservableAsPropertyAttribute.cs b/ReactiveUI.Fody.Helpers/ObservableAsPropertyAttribute.cs deleted file mode 100644 index f2c1c80..0000000 --- a/ReactiveUI.Fody.Helpers/ObservableAsPropertyAttribute.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace ReactiveUI.Fody.Helpers -{ - [AttributeUsage(AttributeTargets.Property | AttributeTargets.Method)] - public class ObservableAsPropertyAttribute : Attribute - { - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers/ObservableAsPropertyExtensions.cs b/ReactiveUI.Fody.Helpers/ObservableAsPropertyExtensions.cs deleted file mode 100644 index 34398ca..0000000 --- a/ReactiveUI.Fody.Helpers/ObservableAsPropertyExtensions.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Linq.Expressions; -using System.Reactive.Concurrency; -using System.Reflection; -using ReactiveUI.Fody.Helpers.Settings; - -namespace ReactiveUI.Fody.Helpers -{ - public static class ObservableAsPropertyExtensions - { - public static ObservableAsPropertyHelper ToPropertyEx(this IObservable @this, TObj source, Expression> property, TRet initialValue = default(TRet), bool deferSubscription = false, IScheduler scheduler = null) where TObj : ReactiveObject - { - // Now assign the field via reflection. - var propertyInfo = property.GetPropertyInfo(); - if (propertyInfo == null) - throw new Exception("Could not resolve expression " + property + " into a property."); - - if (GlobalSettings.IsLogPropertyOnErrorEnabled) - @this = new LogPropertyOnErrorObservable(@this, source, propertyInfo.Name); - - var result = @this.ToProperty(source, property, initialValue, deferSubscription, scheduler); - - var field = propertyInfo.DeclaringType.GetTypeInfo().GetDeclaredField("$" + propertyInfo.Name); - if (field == null) - throw new Exception("Backing field not found for " + propertyInfo); - - field.SetValue(source, result); - - return result; - } - - static PropertyInfo GetPropertyInfo(this LambdaExpression expression) - { - var current = expression.Body; - var unary = current as UnaryExpression; - if (unary != null) - current = unary.Operand; - var call = (MemberExpression)current; - return (PropertyInfo)call.Member; - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers/ReactiveAttribute.cs b/ReactiveUI.Fody.Helpers/ReactiveAttribute.cs deleted file mode 100644 index e0fce68..0000000 --- a/ReactiveUI.Fody.Helpers/ReactiveAttribute.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; - -namespace ReactiveUI.Fody.Helpers -{ - [AttributeUsage(AttributeTargets.Property)] - public class ReactiveAttribute : Attribute - { - } -} diff --git a/ReactiveUI.Fody.Helpers/ReactiveDependencyAttribute.cs b/ReactiveUI.Fody.Helpers/ReactiveDependencyAttribute.cs deleted file mode 100644 index 5b7719f..0000000 --- a/ReactiveUI.Fody.Helpers/ReactiveDependencyAttribute.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace ReactiveUI.Fody.Helpers -{ - [AttributeUsage(AttributeTargets.Property)] - public class ReactiveDependencyAttribute : Attribute - { - private readonly string _targetName; - - public ReactiveDependencyAttribute(string targetName) - { - _targetName = targetName; - } - - /// - /// The name of the backing property - /// - public string Target => _targetName; - - /// - /// Target property on the backing property - /// - public string TargetProperty { get; set; } - } -} diff --git a/ReactiveUI.Fody.Helpers/ReactivePropertyExtensions.cs b/ReactiveUI.Fody.Helpers/ReactivePropertyExtensions.cs deleted file mode 100644 index 582aea5..0000000 --- a/ReactiveUI.Fody.Helpers/ReactivePropertyExtensions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Reflection; -using ReactiveUI.Fody.Helpers.Settings; - -namespace ReactiveUI.Fody.Helpers -{ - public static class ReactivePropertyExtensions - { - public static TRet RaiseAndSetIfChanged(this TObj @this, ref TRet backingField, TRet newValue, string propertyName = null) where TObj : IReactiveObject - { - if (GlobalSettings.IsLogPropertyOnErrorEnabled) - { - try - { - return IReactiveObjectExtensions.RaiseAndSetIfChanged(@this, ref backingField, newValue, propertyName); - } - catch (Exception ex) - { - throw new LogPropertyOnErrorException(@this, propertyName, ex); - } - } - else - { - return IReactiveObjectExtensions.RaiseAndSetIfChanged(@this, ref backingField, newValue, propertyName); - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.projitems b/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.projitems deleted file mode 100644 index 3a4a9ea..0000000 --- a/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.projitems +++ /dev/null @@ -1,21 +0,0 @@ - - - - $(MSBuildAllProjects);$(MSBuildThisFileFullPath) - true - 4433ff2e-3150-4d7f-be18-a2258799b79d - - - ReactiveUI.Fody.Helpers - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.shproj b/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.shproj deleted file mode 100644 index fa87c2f..0000000 --- a/ReactiveUI.Fody.Helpers/ReactiveUI.Fody.Helpers.shproj +++ /dev/null @@ -1,12 +0,0 @@ - - - - 4433ff2e-3150-4d7f-be18-a2258799b79d - - - - - - - - diff --git a/ReactiveUI.Fody.Helpers/Settings/GlobalSettings.cs b/ReactiveUI.Fody.Helpers/Settings/GlobalSettings.cs deleted file mode 100644 index 4020b72..0000000 --- a/ReactiveUI.Fody.Helpers/Settings/GlobalSettings.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace ReactiveUI.Fody.Helpers.Settings -{ - public static class GlobalSettings - { - public static bool IsLogPropertyOnErrorEnabled { get; set; } - } -} diff --git a/ReactiveUI.Fody.Tests/FodyWeavers.xml b/ReactiveUI.Fody.Tests/FodyWeavers.xml deleted file mode 100644 index 73418ad..0000000 --- a/ReactiveUI.Fody.Tests/FodyWeavers.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/Issues/Issue10Tests.cs b/ReactiveUI.Fody.Tests/Issues/Issue10Tests.cs deleted file mode 100644 index 5414857..0000000 --- a/ReactiveUI.Fody.Tests/Issues/Issue10Tests.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; - -namespace ReactiveUI.Fody.Tests.Issues -{ - [TestFixture] - public class Issue10Tests - { - [Test] - public void UninitializedObservableAsPropertyHelperDoesntThrowAndReturnsDefaultValue() - { - var model = new TestModel(); - Assert.AreEqual(null, model.MyProperty); - Assert.AreEqual(0, model.MyIntProperty); - Assert.AreEqual(default(DateTime), model.MyDateTimeProperty); - } - - class TestModel : ReactiveObject - { - [ObservableAsProperty] - public string MyProperty { get; private set; } - - [ObservableAsProperty] - public int MyIntProperty { get; private set; } - - [ObservableAsProperty] - public DateTime MyDateTimeProperty { get; private set; } - - public string OtherProperty { get; private set; } - - public TestModel() - { - OtherProperty = MyProperty; - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/Issues/Issue11Tests.cs b/ReactiveUI.Fody.Tests/Issues/Issue11Tests.cs deleted file mode 100644 index 915cac6..0000000 --- a/ReactiveUI.Fody.Tests/Issues/Issue11Tests.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Reactive.Linq; -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; - -namespace ReactiveUI.Fody.Tests.Issues -{ - [TestFixture] - public class Issue11Tests - { - [Test] - public void AllowObservableAsPropertyAttributeOnAccessor() - { - var model = new TestModel("foo"); - Assert.AreEqual("foo", model.MyProperty); - } - - public class TestModel : ReactiveObject - { - public extern string MyProperty { [ObservableAsProperty]get; } - - public TestModel(string myProperty) - { - Observable.Return(myProperty).ToPropertyEx(this, x => x.MyProperty); - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/Issues/Issue13Tests.cs b/ReactiveUI.Fody.Tests/Issues/Issue13Tests.cs deleted file mode 100644 index cf70dcc..0000000 --- a/ReactiveUI.Fody.Tests/Issues/Issue13Tests.cs +++ /dev/null @@ -1,36 +0,0 @@ -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reactive.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace ReactiveUI.Fody.Tests.Issues -{ - [TestFixture] - public class Issue13Tests - { - [Test] - public void AccessingAChainedObservableAsPropertyOfDoubleDoesntThrow() - { - var vm = new VM(); - Assert.AreEqual(0.0, vm.P2); - } - - class VM : ReactiveObject - { - [ObservableAsProperty] public double P1 { get; } - [ObservableAsProperty] public double P2 { get; } - - public VM() - { - Observable.Return(0.0).ToPropertyEx(this, vm => vm.P1); - this.WhenAnyValue(vm => vm.P1).ToPropertyEx(this, vm => vm.P2); - } - } - - } - -} diff --git a/ReactiveUI.Fody.Tests/Issues/Issue31Tests.cs b/ReactiveUI.Fody.Tests/Issues/Issue31Tests.cs deleted file mode 100644 index 081d457..0000000 --- a/ReactiveUI.Fody.Tests/Issues/Issue31Tests.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Reactive.Linq; -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; -using GlobalSettings = ReactiveUI.Fody.Helpers.Settings.GlobalSettings; - -namespace ReactiveUI.Fody.Tests.Issues -{ - [TestFixture] - public class Issue31Tests - { - [Test] - public void ExceptionPropertyInfoForReactiveProperty() - { - try - { - GlobalSettings.IsLogPropertyOnErrorEnabled = true; - - try - { - var model = new ReactivePropertyModel(); - model.MyProperty = "foo"; - Assert.Fail(); - } - catch (LogPropertyOnErrorException ex) - { - Assert.AreEqual(nameof(ObservableAsPropertyModel.MyProperty), ex.Property); - } - } - finally - { - GlobalSettings.IsLogPropertyOnErrorEnabled = false; - } - } - - [Test] - public void ExceptionPropertyInfoForObservableAsProperty() - { - try - { - GlobalSettings.IsLogPropertyOnErrorEnabled = true; - - try - { - new ObservableAsPropertyModel(); - Assert.Fail(); - } - catch (UnhandledErrorException ex) - { - var propertyException = (LogPropertyOnErrorException)ex.InnerException; - Assert.AreEqual(nameof(ObservableAsPropertyModel.MyProperty), propertyException.Property); - } - } - finally - { - GlobalSettings.IsLogPropertyOnErrorEnabled = false; - } - } - - public class ObservableAsPropertyModel : ReactiveObject - { - public extern string MyProperty { [ObservableAsProperty]get; } - - public ObservableAsPropertyModel() - { - Observable.Throw(new Exception("Observable error")).ToPropertyEx(this, x => x.MyProperty); - } - } - - public class ReactivePropertyModel : ReactiveObject - { - [Reactive]public string MyProperty { get; set; } - - public ReactivePropertyModel() - { - this.ObservableForProperty(x => x.MyProperty).Subscribe(_ => - { - throw new Exception("Subscribe error"); - }); - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/Issues/Issue41Tests.cs b/ReactiveUI.Fody.Tests/Issues/Issue41Tests.cs deleted file mode 100644 index 1b52203..0000000 --- a/ReactiveUI.Fody.Tests/Issues/Issue41Tests.cs +++ /dev/null @@ -1,151 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; - -namespace ReactiveUI.Fody.Tests.Issues -{ - [TestFixture] - public class Issue41Tests - { - [Test] - public void PropertyChangedRaisedForDerivedPropertyOnIntPropertySet() - { - // Arrange - var model = new TestModel(); - var expectedInpcPropertyName = nameof(TestModel.DerivedProperty); - var receivedInpcPropertyNames = new List(); - - var inpc = (INotifyPropertyChanged) model; - inpc.PropertyChanged += (sender, args) => receivedInpcPropertyNames.Add(args.PropertyName); - - // Act - model.IntProperty = 5; - - // Assert - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName)); - } - - [Test] - public void PropertyChangedRaisedOnStringPropertySet() - { - // Arrange - var model = new TestModel(); - var expectedInpcPropertyName = nameof(TestModel.DerivedProperty); - var receivedInpcPropertyNames = new List(); - - var inpc = (INotifyPropertyChanged) model; - inpc.PropertyChanged += (sender, args) => receivedInpcPropertyNames.Add(args.PropertyName); - - // Act - model.StringProperty = "Foo"; - - // Assert - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName)); - } - - [Test] - public void PropertyChangedRaisedForDerivedPropertyAndAnotherExpressionBodiedPropertyAndCombinedExpressionBodyPropertyWithAutoPropOnIntPropertySet() - { - // Arrange - var model = new TestModel(); - var expectedInpcPropertyName1 = nameof(TestModel.AnotherExpressionBodiedProperty); - var expectedInpcPropertyName2 = nameof(TestModel.DerivedProperty); - var expectedInpcPropertyName3 = nameof(TestModel.CombinedExpressionBodyPropertyWithAutoProp); - var receivedInpcPropertyNames = new List(); - - var inpc = (INotifyPropertyChanged) model; - inpc.PropertyChanged += (sender, args) => receivedInpcPropertyNames.Add(args.PropertyName); - - // Act - model.IntProperty = 5; - - // Assert - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName1)); - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName2)); - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName3)); - } - - [Test] - public void PropertyChangedRaisedForCombinedExpressionBodyPropertyWithAutoPropOnStringPropertySet() - { - // Arrange - var model = new TestModel(); - var expectedInpcPropertyName = nameof(TestModel.CombinedExpressionBodyPropertyWithAutoProp); - var receivedInpcPropertyNames = new List(); - - var inpc = (INotifyPropertyChanged)model; - inpc.PropertyChanged += (sender, args) => receivedInpcPropertyNames.Add(args.PropertyName); - - // Act - model.StringProperty = "Foo"; - - // Assert - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName)); - } - - [Test] - public void PropertyChangedRaisedForCombinedExpressionBodyPropertyWithAutoPropNonReactivePropertyOnIntPropertySet() - { - // Arrange - var model = new TestModel(); - var expectedInpcPropertyName = nameof(TestModel.CombinedExpressionBodyPropertyWithAutoPropNonReactiveProperty); - var receivedInpcPropertyNames = new List(); - - var inpc = (INotifyPropertyChanged)model; - inpc.PropertyChanged += (sender, args) => receivedInpcPropertyNames.Add(args.PropertyName); - - // Act - model.IntProperty = 5; - - // Assert - Assert.IsTrue(receivedInpcPropertyNames.Contains(expectedInpcPropertyName)); - } - - [Test] - // Ensure that this only works with dependent properties that have the [Reactive] attribute - public void PropertyChangedNotRaisedForCombinedExpressionBodyPropertyWithAutoPropNonReactivePropertyOnNonReactivePropertySet() - { - // Arrange - var model = new TestModel(); - var expectedInpcPropertyName = nameof(TestModel.CombinedExpressionBodyPropertyWithAutoPropNonReactiveProperty); - var receivedInpcPropertyNames = new List(); - - var inpc = (INotifyPropertyChanged)model; - inpc.PropertyChanged += (sender, args) => receivedInpcPropertyNames.Add(args.PropertyName); - - // Act - model.NonReactiveProperty = "Foo"; - - // Assert - Assert.IsEmpty(receivedInpcPropertyNames); - } - - class TestModel : ReactiveObject - { - [Reactive] - public int IntProperty { get; set; } - - [Reactive] - public string StringProperty { get; set; } - - public string NonReactiveProperty { get; set; } - - [Reactive] - // Raise property change when either StringProperty or IntProperty are set - public string DerivedProperty => StringProperty + IntProperty; - - [Reactive] - // Raise property change when IntProperty is set - public int AnotherExpressionBodiedProperty => IntProperty; - - [Reactive] - // Raise property changed when StringProperty or IntProperty is set (as AnotherExpressionBodiedProperty is dependent upon IntProperty) - public string CombinedExpressionBodyPropertyWithAutoProp => AnotherExpressionBodiedProperty + StringProperty; - - [Reactive] - public string CombinedExpressionBodyPropertyWithAutoPropNonReactiveProperty => CombinedExpressionBodyPropertyWithAutoProp + NonReactiveProperty; - } - } -} diff --git a/ReactiveUI.Fody.Tests/Issues/Issue47Tests.cs b/ReactiveUI.Fody.Tests/Issues/Issue47Tests.cs deleted file mode 100644 index 2cf313b..0000000 --- a/ReactiveUI.Fody.Tests/Issues/Issue47Tests.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using ReactiveUI.Fody.Helpers; - -namespace ReactiveUI.Fody.Tests.Issues -{ - public class Issue47Tests - { - /// - /// The "test" here is simply for these to compile - /// Tests ObservableAsPropertyWeaver.EmitDefaultValue - /// - class TestModel : ReactiveObject - { - public extern int IntProperty { [ObservableAsProperty] get; } - public extern double DoubleProperty { [ObservableAsProperty] get; } - public extern float FloatProperty { [ObservableAsProperty] get; } - public extern long LongProperty { [ObservableAsProperty] get; } - } - } -} diff --git a/ReactiveUI.Fody.Tests/ObservableAsPropertyTests.cs b/ReactiveUI.Fody.Tests/ObservableAsPropertyTests.cs deleted file mode 100644 index 7593e47..0000000 --- a/ReactiveUI.Fody.Tests/ObservableAsPropertyTests.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Reactive.Linq; -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; - -namespace ReactiveUI.Fody.Tests -{ - public class ObservableAsPropertyTests - { - [Test] - public void TestPropertyReturnsFoo() - { - var model = new TestModel(); - Assert.AreEqual("foo", model.TestProperty); - } - - class TestModel : ReactiveObject - { - [ObservableAsProperty] - public string TestProperty { get; private set; } - - public TestModel() - { - Observable.Return("foo").ToPropertyEx(this, x => x.TestProperty); - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/Properties/AssemblyInfo.cs b/ReactiveUI.Fody.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index fd3fa06..0000000 --- a/ReactiveUI.Fody.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ReactiveUI.Fody.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ReactiveUI.Fody.Tests")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("a735c110-6877-4c3a-8056-9abc5fb2dd91")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReactiveUI.Fody.Tests/ReactiveDependencyTests.cs b/ReactiveUI.Fody.Tests/ReactiveDependencyTests.cs deleted file mode 100644 index b442540..0000000 --- a/ReactiveUI.Fody.Tests/ReactiveDependencyTests.cs +++ /dev/null @@ -1,182 +0,0 @@ -using System; -using System.ComponentModel; -using NUnit.Framework; -using ReactiveUI.Fody.Helpers; - -namespace ReactiveUI.Fody.Tests -{ - public class ReactiveDependencyTests - { - [Test] - public void IntPropertyOnWeavedFacadeReturnsBaseModelIntPropertyDefaultValueTest() - { - var model = new BaseModel(); - var expectedResult = model.IntProperty; - - var facade = new FacadeModel(model); - - Assert.AreEqual(expectedResult, facade.IntProperty); - } - - [Test] - public void AnotherStringPropertyOnFacadeReturnsBaseModelStringPropertyDefaultValueTest() - { - var model = new BaseModel(); - var expectedResult = model.StringProperty; - - var facade = new FacadeModel(model); - - Assert.AreEqual(expectedResult, facade.AnotherStringProperty); - } - - [Test] - public void SettingAnotherStringPropertyUpdatesTheDependencyStringProperty() - { - var expectedResult = "New String Value"; - var facade = new FacadeModel(new BaseModel()); - - facade.AnotherStringProperty = expectedResult; - - Assert.AreEqual(expectedResult, facade.Dependency.StringProperty); - } - - [Test] - public void SettingFacadeIntPropertyUpdatesDependencyIntProperty() - { - var expectedResult = 999; - var facade = new FacadeModel(new BaseModel()); - - facade.IntProperty = expectedResult; - - Assert.AreEqual(expectedResult, facade.Dependency.IntProperty); - } - - [Test] - public void FacadeIntPropertyChangedEventFiresOnAssignementTest() - { - var expectedPropertyChanged = "IntProperty"; - var resultPropertyChanged = string.Empty; - - var facade = new FacadeModel(new BaseModel()); - - var obj = (INotifyPropertyChanged) facade; - obj.PropertyChanged += (sender, args) => resultPropertyChanged = args.PropertyName; - - facade.IntProperty = 999; - - Assert.AreEqual(expectedPropertyChanged, resultPropertyChanged); - } - - [Test] - public void FacadeAnotherStringPropertyChangedEventFiresOnAssignementTest() - { - var expectedPropertyChanged = "AnotherStringProperty"; - var resultPropertyChanged = string.Empty; - - var facade = new FacadeModel(new BaseModel()); - - var obj = (INotifyPropertyChanged) facade; - obj.PropertyChanged += (sender, args) => resultPropertyChanged = args.PropertyName; - - facade.AnotherStringProperty = "Some New Value"; - - Assert.AreEqual(expectedPropertyChanged, resultPropertyChanged); - } - - [Test] - public void StringPropertyOnWeavedDecoratorReturnsBaseModelDefaultStringValue() - { - var model = new BaseModel(); - var expectedResult = model.StringProperty; - - var decorator = new DecoratorModel(model); - - Assert.AreEqual(expectedResult, decorator.StringProperty); - } - - [Test] - public void DecoratorStringPropertyRaisesPropertyChanged() - { - var expectedPropertyChanged = "StringProperty"; - var resultPropertyChanged = string.Empty; - - var decorator = new DecoratorModel(new BaseModel()); - - var obj = (INotifyPropertyChanged) decorator; - obj.PropertyChanged += (sender, args) => resultPropertyChanged = args.PropertyName; - - decorator.StringProperty = "Some New Value"; - - Assert.AreEqual(expectedPropertyChanged, resultPropertyChanged); - } - } - - public class BaseModel : ReactiveObject - { - public virtual int IntProperty { get; set; } = 5; - public virtual string StringProperty { get; set; } = "Initial Value"; - } - - public class FacadeModel : ReactiveObject - { - private BaseModel _dependency; - - public FacadeModel() - { - _dependency = new BaseModel(); - } - - public FacadeModel(BaseModel dependency) - { - _dependency = dependency; - } - - public BaseModel Dependency - { - get { return _dependency; } - private set { _dependency = value; } - } - - // Property with the same name, will look for a like for like name on the named dependency - [ReactiveDependency(nameof(Dependency))] - public int IntProperty { get; set; } - - // Property named differently to that on the dependency but still pass through value - [ReactiveDependency(nameof(Dependency), TargetProperty = "StringProperty")] - public string AnotherStringProperty { get; set; } - } - - public class DecoratorModel : BaseModel - { - private readonly BaseModel _model; - - // Testing ctor - public DecoratorModel() - { - _model = new BaseModel(); - } - - public DecoratorModel(BaseModel baseModel) - { - _model = baseModel; - } - - [Reactive] - public string SomeCoolNewProperty { get; set; } - - // Works with private fields - [ReactiveDependency(nameof(_model))] - public override string StringProperty { get; set; } - - // Can't be attributed as has additional functionality in the decorated get - public override int IntProperty - { - get { return _model.IntProperty * 2; } - set - { - _model.IntProperty = value; - this.RaisePropertyChanged(); - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj b/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj deleted file mode 100644 index 4de2d67..0000000 --- a/ReactiveUI.Fody.Tests/ReactiveUI.Fody.Tests.csproj +++ /dev/null @@ -1,128 +0,0 @@ - - - - - Debug - AnyCPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91} - Library - Properties - ReactiveUI.Fody.Tests - ReactiveUI.Fody.Tests - v4.5 - 512 - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\NUnit.3.2.0\lib\net45\nunit.framework.dll - True - - - ..\packages\reactiveui-core.7.0.0\lib\Net45\ReactiveUI.dll - True - - - ..\packages\Splat.1.6.0\lib\Net45\Splat.dll - True - - - - - ..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll - True - - - ..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll - True - - - ..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll - True - - - ..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll - True - - - ..\packages\Rx-XAML.2.2.5\lib\net45\System.Reactive.Windows.Threading.dll - True - - - - - - - - - - - - - - - - - - - - - - Designer - - - - - Designer - - - - - - - - {1ca52110-be45-4c45-b709-28061077e2a5} - ReactiveUI.Fody.Helpers.Net45 - - - - - - - - copy $(SolutionDir)ReactiveUI.Fody\bin\$(ConfigurationName)\ReactiveUI.Fody.dll $(SolutionDir)Weavers\bin\Weavers.dll -copy $(SolutionDir)ReactiveUI.Fody\bin\$(ConfigurationName)\ReactiveUI.Fody.pdb $(SolutionDir)Weavers\bin\Weavers.pdb - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody.Tests/packages.config b/ReactiveUI.Fody.Tests/packages.config deleted file mode 100644 index 9e05f2a..0000000 --- a/ReactiveUI.Fody.Tests/packages.config +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody/CecilExtensions.cs b/ReactiveUI.Fody/CecilExtensions.cs deleted file mode 100644 index 9434f31..0000000 --- a/ReactiveUI.Fody/CecilExtensions.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Mono.Cecil; -using Mono.Cecil.Cil; - -namespace ReactiveUI.Fody -{ - public static class CecilExtensions - { - public static void Emit(this MethodBody body, Action il) - { - il(body.GetILProcessor()); - } - - public static GenericInstanceMethod MakeGenericMethod(this MethodReference method, params TypeReference[] genericArguments) - { - var result = new GenericInstanceMethod(method); - foreach (var argument in genericArguments) - result.GenericArguments.Add(argument); - return result; - } - - public static bool IsAssignableFrom(this TypeReference baseType, TypeReference type, Action logger = null) - { - return baseType.Resolve().IsAssignableFrom(type.Resolve(), logger); - } - - public static bool IsAssignableFrom(this TypeDefinition baseType, TypeDefinition type, Action logger = null) - { - logger = logger ?? (x => {}); - - Queue queue = new Queue(); - queue.Enqueue(type); - - while (queue.Any()) - { - var current = queue.Dequeue(); - logger(current.FullName); - - if (baseType.FullName == current.FullName) - return true; - - if (current.BaseType != null) - queue.Enqueue(current.BaseType.Resolve()); - - foreach (var @interface in current.Interfaces) - { - queue.Enqueue(@interface.InterfaceType.Resolve()); - } - } - - return false; - } - - public static bool IsDefined(this IMemberDefinition member, TypeReference attributeType) - { - return member.HasCustomAttributes && member.CustomAttributes.Any(x => x.AttributeType.FullName == attributeType.FullName); - } - - public static MethodReference Bind(this MethodReference method, GenericInstanceType genericType) - { - var reference = new MethodReference(method.Name, method.ReturnType, genericType); - reference.HasThis = method.HasThis; - reference.ExplicitThis = method.ExplicitThis; - reference.CallingConvention = method.CallingConvention; - - foreach (var parameter in method.Parameters) - reference.Parameters.Add(new ParameterDefinition(parameter.ParameterType)); - - return reference; - } - /* - public static MethodReference BindDefinition(this MethodReference method, TypeReference genericTypeDefinition) - { - if (!genericTypeDefinition.HasGenericParameters) - return method; - - var genericDeclaration = new GenericInstanceType(genericTypeDefinition); - foreach (var parameter in genericTypeDefinition.GenericParameters) - { - genericDeclaration.GenericArguments.Add(parameter); - } - var reference = new MethodReference(method.Name, method.ReturnType, genericDeclaration); - reference.HasThis = method.HasThis; - reference.ExplicitThis = method.ExplicitThis; - reference.CallingConvention = method.CallingConvention; - - foreach (var parameter in method.Parameters) - reference.Parameters.Add(new ParameterDefinition(parameter.ParameterType)); - - return reference; - } - */ - public static FieldReference BindDefinition(this FieldReference field, TypeReference genericTypeDefinition) - { - if (!genericTypeDefinition.HasGenericParameters) - return field; - - var genericDeclaration = new GenericInstanceType(genericTypeDefinition); - foreach (var parameter in genericTypeDefinition.GenericParameters) - { - genericDeclaration.GenericArguments.Add(parameter); - } - var reference = new FieldReference(field.Name, field.FieldType, genericDeclaration); - return reference; - } - - public static AssemblyNameReference FindAssembly(this ModuleDefinition currentModule, string assemblyName) - { - return currentModule.AssemblyReferences.SingleOrDefault(x => x.Name == assemblyName); - } - - public static TypeReference FindType(this ModuleDefinition currentModule, string @namespace, string typeName, IMetadataScope scope = null, params string[] typeParameters) - { - var result = new TypeReference(@namespace, typeName, currentModule, scope); - foreach (var typeParameter in typeParameters) - { - result.GenericParameters.Add(new GenericParameter(typeParameter, result)); - } - return result; - } - - public static bool CompareTo(this TypeReference type, TypeReference compareTo) - { - return type.FullName == compareTo.FullName; - } - - public static IEnumerable GetMethodDependencies(this MethodDefinition method) - { - if (!method.IsGetter) return Enumerable.Empty(); - - return method.Body.Instructions.Where(i => - { - var operand = i.Operand as MethodDefinition; - return i.OpCode == OpCodes.Call && (operand?.IsGetter ?? false); - }) - .SelectMany(instruction => - { - var methodDefinition = (MethodDefinition) instruction.Operand; - return methodDefinition.GetMethodDependencies().Concat(new[] { methodDefinition }); - }); - } - - public static bool TryGetMethodDependencies(this MethodDefinition method, out MethodDefinition[] getMethods) - { - getMethods = method.GetMethodDependencies() - .Distinct() - .ToArray(); - - return getMethods.Any(); - } - -/* - - public static IEnumerable GetAllTypes(this ModuleDefinition module) - { - var stack = new Stack(); - foreach (var type in module.Types) - { - stack.Push(type); - } - while (stack.Any()) - { - var current = stack.Pop(); - yield return current; - - foreach (var nestedType in current.NestedTypes) - { - stack.Push(nestedType); - } - } - } -*/ - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody/ModuleWeaver.cs b/ReactiveUI.Fody/ModuleWeaver.cs deleted file mode 100644 index 8528bdc..0000000 --- a/ReactiveUI.Fody/ModuleWeaver.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using Mono.Cecil; - -namespace ReactiveUI.Fody -{ - public class ModuleWeaver - { - public ModuleDefinition ModuleDefinition { get; set; } - - // Will log an MessageImportance.High message to MSBuild. - public Action LogInfo { get; set; } - - // Will log an error message to MSBuild. OPTIONAL - public Action LogError { get; set; } - - public void Execute() - { - var propertyWeaver = new ReactiveUIPropertyWeaver - { - ModuleDefinition = ModuleDefinition, - LogInfo = LogInfo, - LogError = LogError - }; - propertyWeaver.Execute(); - - var observableAsPropertyWeaver = new ObservableAsPropertyWeaver - { - ModuleDefinition = ModuleDefinition, - LogInfo = LogInfo - }; - observableAsPropertyWeaver.Execute(); - - var reactiveDependencyWeaver = new ReactiveDependencyPropertyWeaver - { - ModuleDefinition = ModuleDefinition, - LogInfo = LogInfo, - LogError = LogError - }; - reactiveDependencyWeaver.Execute(); - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody/ObservableAsPropertyWeaver.cs b/ReactiveUI.Fody/ObservableAsPropertyWeaver.cs deleted file mode 100644 index b59557e..0000000 --- a/ReactiveUI.Fody/ObservableAsPropertyWeaver.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System; -using System.Linq; -using Mono.Cecil; -using Mono.Cecil.Cil; -using Mono.Cecil.Rocks; - -namespace ReactiveUI.Fody -{ - public class ObservableAsPropertyWeaver - { - public ModuleDefinition ModuleDefinition { get; set; } - - // Will log an MessageImportance.High message to MSBuild. OPTIONAL - public Action LogInfo { get; set; } - - public void Execute() - { - var reactiveUI = ModuleDefinition.AssemblyReferences.Where(x => x.Name == "ReactiveUI").OrderByDescending(x => x.Version).FirstOrDefault(); - if (reactiveUI == null) - { - LogInfo("Could not find assembly: ReactiveUI (" + string.Join(", ", ModuleDefinition.AssemblyReferences.Select(x => x.Name)) + ")"); - return; - } - LogInfo($"{reactiveUI.Name} {reactiveUI.Version}"); - var helpers = ModuleDefinition.AssemblyReferences.Where(x => x.Name == "ReactiveUI.Fody.Helpers").OrderByDescending(x => x.Version).FirstOrDefault(); - if (helpers == null) - { - LogInfo("Could not find assembly: ReactiveUI.Fody.Helpers (" + string.Join(", ", ModuleDefinition.AssemblyReferences.Select(x => x.Name)) + ")"); - return; - } - LogInfo($"{helpers.Name} {helpers.Version}"); - - var reactiveObject = ModuleDefinition.FindType("ReactiveUI", "ReactiveObject", reactiveUI); - - // The types we will scan are subclasses of ReactiveObject - var targetTypes = ModuleDefinition.GetAllTypes().Where(x => x.BaseType != null && reactiveObject.IsAssignableFrom(x.BaseType)); - - var observableAsPropertyHelper = ModuleDefinition.FindType("ReactiveUI", "ObservableAsPropertyHelper`1", reactiveUI, "T"); - var observableAsPropertyAttribute = ModuleDefinition.FindType("ReactiveUI.Fody.Helpers", "ObservableAsPropertyAttribute", helpers); - var observableAsPropertyHelperGetValue = ModuleDefinition.ImportReference(observableAsPropertyHelper.Resolve().Properties.Single(x => x.Name == "Value").GetMethod); - var exceptionType = ModuleDefinition.ImportReference(typeof(Exception)); - var exceptionConstructor = ModuleDefinition.ImportReference(exceptionType.Resolve().GetConstructors().Single(x => x.Parameters.Count == 1)); - - foreach (var targetType in targetTypes) - { - foreach (var property in targetType.Properties.Where(x => x.IsDefined(observableAsPropertyAttribute) || (x.GetMethod?.IsDefined(observableAsPropertyAttribute) ?? false)).ToArray()) - { - var genericObservableAsPropertyHelper = observableAsPropertyHelper.MakeGenericInstanceType(property.PropertyType); - var genericObservableAsPropertyHelperGetValue = observableAsPropertyHelperGetValue.Bind(genericObservableAsPropertyHelper); - ModuleDefinition.ImportReference(genericObservableAsPropertyHelperGetValue); - - // Declare a field to store the property value - var field = new FieldDefinition("$" + property.Name, FieldAttributes.Private, genericObservableAsPropertyHelper); - targetType.Fields.Add(field); - - // It's an auto-property, so remove the generated field - if (property.SetMethod != null && property.SetMethod.HasBody) - { - // Remove old field (the generated backing field for the auto property) - var oldField = (FieldReference)property.GetMethod.Body.Instructions.Where(x => x.Operand is FieldReference).Single().Operand; - var oldFieldDefinition = oldField.Resolve(); - targetType.Fields.Remove(oldFieldDefinition); - - // Re-implement setter to throw an exception - property.SetMethod.Body = new MethodBody(property.SetMethod); - property.SetMethod.Body.Emit(il => - { - il.Emit(OpCodes.Ldstr, "Never call the setter of an ObservabeAsPropertyHelper property."); - il.Emit(OpCodes.Newobj, exceptionConstructor); - il.Emit(OpCodes.Throw); - il.Emit(OpCodes.Ret); - }); - } - - property.GetMethod.Body = new MethodBody(property.GetMethod); - property.GetMethod.Body.Emit(il => - { - var isValid = il.Create(OpCodes.Nop); - il.Emit(OpCodes.Ldarg_0); // this - il.Emit(OpCodes.Ldfld, field.BindDefinition(targetType)); // pop -> this.$PropertyName - il.Emit(OpCodes.Dup); // Put an extra copy of this.$PropertyName onto the stack - il.Emit(OpCodes.Brtrue, isValid); // If the helper is null, return the default value for the property - il.Emit(OpCodes.Pop); // Drop this.$PropertyName - EmitDefaultValue(property.GetMethod.Body, il, property.PropertyType); // Put the default value onto the stack - il.Emit(OpCodes.Ret); // Return that default value - il.Append(isValid); // Add a marker for if the helper is not null - il.Emit(OpCodes.Callvirt, genericObservableAsPropertyHelperGetValue); // pop -> this.$PropertyName.Value - il.Emit(OpCodes.Ret); // Return the value that is on the stack - }); - } - } - } - - public void EmitDefaultValue(MethodBody methodBody, ILProcessor il, TypeReference type) - { - if (type.CompareTo(ModuleDefinition.TypeSystem.Boolean) || type.CompareTo(ModuleDefinition.TypeSystem.Byte) || - type.CompareTo(ModuleDefinition.TypeSystem.Int16) || type.CompareTo(ModuleDefinition.TypeSystem.Int32)) - { - il.Emit(OpCodes.Ldc_I4_0); - } - else if (type.CompareTo(ModuleDefinition.TypeSystem.Single)) - { - il.Emit(OpCodes.Ldc_R4, (float)0); - } - else if (type.CompareTo(ModuleDefinition.TypeSystem.Int64)) - { - il.Emit(OpCodes.Ldc_I8, (long)0); - } - else if (type.CompareTo(ModuleDefinition.TypeSystem.Double)) - { - il.Emit(OpCodes.Ldc_R8, (double)0); - } - else if (type.IsGenericParameter || type.IsValueType) - { - methodBody.InitLocals = true; - var local = new VariableDefinition(type); - il.Body.Variables.Add(local); - il.Emit(OpCodes.Ldloca_S, local); - il.Emit(OpCodes.Initobj, type); - il.Emit(OpCodes.Ldloc, local); - } - else - { - il.Emit(OpCodes.Ldnull); - } - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody/Properties/AssemblyInfo.cs b/ReactiveUI.Fody/Properties/AssemblyInfo.cs deleted file mode 100644 index 42b937b..0000000 --- a/ReactiveUI.Fody/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("ReactiveUI.Fody")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("ReactiveUI.Fody")] -[assembly: AssemblyCopyright("Copyright © 2015")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("0171c060-b220-4e4d-af25-2e2fc92e9267")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ReactiveUI.Fody/ReactiveDependencyPropertyWeaver.cs b/ReactiveUI.Fody/ReactiveDependencyPropertyWeaver.cs deleted file mode 100644 index a761018..0000000 --- a/ReactiveUI.Fody/ReactiveDependencyPropertyWeaver.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System; -using System.Linq; -using Mono.Cecil; -using Mono.Cecil.Cil; -using Mono.Cecil.Rocks; - -namespace ReactiveUI.Fody -{ - public class ReactiveDependencyPropertyWeaver - { - public ModuleDefinition ModuleDefinition { get; set; } - - // Will log an MessageImportance.High message to MSBuild. OPTIONAL - public Action LogInfo { get; set; } - - // Will log an error message to MSBuild. OPTIONAL - public Action LogError { get; set; } - - public void Execute() - { - var reactiveUI = ModuleDefinition.AssemblyReferences.Where(x => x.Name == "ReactiveUI").OrderByDescending(x => x.Version).FirstOrDefault(); - if (reactiveUI == null) - { - LogInfo("Could not find assembly: ReactiveUI (" + string.Join(", ", ModuleDefinition.AssemblyReferences.Select(x => x.Name)) + ")"); - return; - } - LogInfo($"{reactiveUI.Name} {reactiveUI.Version}"); - var helpers = ModuleDefinition.AssemblyReferences.Where(x => x.Name == "ReactiveUI.Fody.Helpers").OrderByDescending(x => x.Version).FirstOrDefault(); - if (helpers == null) - { - LogInfo("Could not find assembly: ReactiveUI.Fody.Helpers (" + string.Join(", ", ModuleDefinition.AssemblyReferences.Select(x => x.Name)) + ")"); - return; - } - LogInfo($"{helpers.Name} {helpers.Version}"); - var reactiveObject = new TypeReference("ReactiveUI", "IReactiveObject", ModuleDefinition, reactiveUI); - - var targetTypes = ModuleDefinition.GetAllTypes().Where(x => x.BaseType != null && reactiveObject.IsAssignableFrom(x.BaseType)).ToArray(); - var reactiveObjectExtensions = new TypeReference("ReactiveUI", "IReactiveObjectExtensions", ModuleDefinition, reactiveUI).Resolve(); - if (reactiveObjectExtensions == null) throw new Exception("reactiveObjectExtensions is null"); - - var raisePropertyChangedMethod = ModuleDefinition.ImportReference(reactiveObjectExtensions.Methods.Single(x => x.Name == "RaisePropertyChanged")); - if (raisePropertyChangedMethod == null) throw new Exception("raisePropertyChangedMethod is null"); - - var reactiveDependencyAttribute = ModuleDefinition.FindType("ReactiveUI.Fody.Helpers", "ReactiveDependencyAttribute", helpers); - if (reactiveDependencyAttribute == null) throw new Exception("reactiveDecoratorAttribute is null"); - - foreach (var targetType in targetTypes.Where(x => x.Properties.Any(y => y.IsDefined(reactiveDependencyAttribute))).ToArray()) - { - foreach (var facadeProperty in targetType.Properties.Where(x => x.IsDefined(reactiveDependencyAttribute)).ToArray()) - { - // If the property already has a body then do not weave to prevent loss of instructions - if (!facadeProperty.GetMethod.Body.Instructions.Any(x => x.Operand is FieldReference) || facadeProperty.GetMethod.Body.HasVariables) - { - LogError($"Property {facadeProperty.Name} is not an auto property and therefore not suitable for ReactiveDependency weaving"); - continue; - } - - var attribute = facadeProperty.CustomAttributes.First(x => x.AttributeType.FullName == reactiveDependencyAttribute.FullName); - - var targetNamedArgument = attribute.ConstructorArguments.FirstOrDefault(); - var targetValue = targetNamedArgument.Value?.ToString(); - if (string.IsNullOrEmpty(targetValue)) - { - LogError("No target property defined on the object"); - continue; - } - - if (targetType.Properties.All(x => x.Name != targetValue) && targetType.Fields.All(x => x.Name != targetValue)) - { - LogError($"dependency object property/field name '{targetValue}' not found on target type {targetType.Name}"); - continue; - } - - var objPropertyTarget = targetType.Properties.FirstOrDefault(x => x.Name == targetValue); - var objFieldTarget = targetType.Fields.FirstOrDefault(x => x.Name == targetValue); - - var objDependencyTargetType = objPropertyTarget != null - ? objPropertyTarget.PropertyType.Resolve() - : objFieldTarget?.FieldType.Resolve(); - - if(objDependencyTargetType == null) - { - LogError("Couldn't result the dependency type"); - continue; - } - - // Look for the target property on the member obj - var destinationPropertyNamedArgument = attribute.Properties.FirstOrDefault(x => x.Name == "TargetProperty"); - var destinationPropertyName = destinationPropertyNamedArgument.Argument.Value?.ToString(); - - // If no target property was specified use this property's name as the target on the decorated object (ala a decorated property) - if (string.IsNullOrEmpty(destinationPropertyName)) destinationPropertyName = facadeProperty.Name; - - if (objDependencyTargetType.Properties.All(x => x.Name != destinationPropertyName)) - { - LogError($"Target property {destinationPropertyName} on dependency of type {objDependencyTargetType.DeclaringType.Name} not found"); - continue; - } - - var destinationProperty = objDependencyTargetType.Properties.First(x => x.Name == destinationPropertyName); - - // The property on the facade/decorator should have a setter - if (facadeProperty.SetMethod == null) - { - LogError($"Property {facadeProperty.DeclaringType.FullName}.{facadeProperty.Name} has no setter, therefore it is not possible for the property to change, and thus should not be marked with [ReactiveDecorator]"); - continue; - } - - // The property on the dependency should have a setter e.g. Dependency.SomeProperty = value; - if (destinationProperty.SetMethod == null) - { - LogError($"Dependency object's property {destinationProperty.DeclaringType.FullName}.{destinationProperty.Name} has no setter, therefore it is not possible for the property to change, and thus should not be marked with [ReactiveDecorator]"); - continue; - } - - // Remove old field (the generated backing field for the auto property) - var oldField = (FieldReference)facadeProperty.GetMethod.Body.Instructions.Where(x => x.Operand is FieldReference).Single().Operand; - var oldFieldDefinition = oldField.Resolve(); - targetType.Fields.Remove(oldFieldDefinition); - - // See if there exists an initializer for the auto-property - var constructors = targetType.Methods.Where(x => x.IsConstructor); - foreach (var constructor in constructors) - { - var fieldAssignment = constructor.Body.Instructions.SingleOrDefault(x => Equals(x.Operand, oldFieldDefinition) || Equals(x.Operand, oldField)); - if (fieldAssignment != null) - { - // Replace field assignment with a property set (the stack semantics are the same for both, - // so happily we don't have to manipulate the bytecode any further.) - var setterCall = constructor.Body.GetILProcessor().Create(facadeProperty.SetMethod.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, facadeProperty.SetMethod); - constructor.Body.GetILProcessor().Replace(fieldAssignment, setterCall); - } - } - - // Build out the getter which simply returns the value of the generated field - facadeProperty.GetMethod.Body = new MethodBody(facadeProperty.GetMethod); - facadeProperty.GetMethod.Body.Emit(il => - { - il.Emit(OpCodes.Ldarg_0); // this - if (objPropertyTarget != null) - { - il.Emit(objPropertyTarget.GetMethod.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, objPropertyTarget.GetMethod); - } - else - { - il.Emit(OpCodes.Ldfld, objFieldTarget); - } - il.Emit(destinationProperty.GetMethod.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, destinationProperty.GetMethod); - il.Emit(OpCodes.Ret); - }); - - TypeReference genericTargetType = targetType; - if (targetType.HasGenericParameters) - { - var genericDeclaration = new GenericInstanceType(targetType); - foreach (var parameter in targetType.GenericParameters) - { - genericDeclaration.GenericArguments.Add(parameter); - } - genericTargetType = genericDeclaration; - } - - var methodReference = raisePropertyChangedMethod.MakeGenericMethod(genericTargetType); - facadeProperty.SetMethod.Body = new MethodBody(facadeProperty.SetMethod); - facadeProperty.SetMethod.Body.Emit(il => - { - il.Emit(OpCodes.Ldarg_0); - if (objPropertyTarget != null) - { - il.Emit(objPropertyTarget.GetMethod.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, objPropertyTarget.GetMethod); - } - else - { - il.Emit(OpCodes.Ldfld, objFieldTarget); - } - il.Emit(OpCodes.Ldarg_1); - il.Emit(destinationProperty.SetMethod.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, destinationProperty.SetMethod); // Set the nested property - il.Emit(OpCodes.Ldarg_0); - il.Emit(OpCodes.Ldstr, facadeProperty.Name); // "PropertyName" - il.Emit(OpCodes.Call, methodReference); // this.RaisePropertyChanged("PropertyName") - il.Emit(OpCodes.Ret); - }); - } - } - } - } -} diff --git a/ReactiveUI.Fody/ReactiveUI.Fody.csproj b/ReactiveUI.Fody/ReactiveUI.Fody.csproj deleted file mode 100644 index dc15be4..0000000 --- a/ReactiveUI.Fody/ReactiveUI.Fody.csproj +++ /dev/null @@ -1,90 +0,0 @@ - - - - - Debug - AnyCPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989} - Library - Properties - ReactiveUI.Fody - ReactiveUI.Fody - v4.5 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - 6 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\FodyCecil.2.0.9\lib\net40\Mono.Cecil.dll - - - ..\packages\FodyCecil.2.0.9\lib\net40\Mono.Cecil.Mdb.dll - - - ..\packages\FodyCecil.2.0.9\lib\net40\Mono.Cecil.Pdb.dll - - - ..\packages\FodyCecil.2.0.9\lib\net40\Mono.Cecil.Rocks.dll - - - - - ..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll - - - ..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll - - - ..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll - - - ..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll - - - ..\packages\Rx-XAML.2.2.5\lib\net45\System.Reactive.Windows.Threading.dll - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUI.Fody/ReactiveUIPropertyWeaver.cs b/ReactiveUI.Fody/ReactiveUIPropertyWeaver.cs deleted file mode 100644 index 11104fa..0000000 --- a/ReactiveUI.Fody/ReactiveUIPropertyWeaver.cs +++ /dev/null @@ -1,177 +0,0 @@ -using System; -using System.Linq; -using Mono.Cecil; -using Mono.Cecil.Cil; -using Mono.Cecil.Rocks; - -namespace ReactiveUI.Fody -{ - /// - /// Weaver that replaces properties marked with `[DataMember]` on subclasses of `ReactiveObject` with an - /// implementation that invokes `RaisePropertyChanged` as is required for reaciveui. - /// - public class ReactiveUIPropertyWeaver - { - public ModuleDefinition ModuleDefinition { get; set; } - - // Will log an MessageImportance.High message to MSBuild. OPTIONAL - public Action LogInfo { get; set; } - - // Will log an error message to MSBuild. OPTIONAL - public Action LogError { get; set; } - - public void Execute() - { - var reactiveUI = ModuleDefinition.AssemblyReferences.Where(x => x.Name == "ReactiveUI").OrderByDescending(x => x.Version).FirstOrDefault(); - if (reactiveUI == null) - { - LogInfo("Could not find assembly: ReactiveUI (" + string.Join(", ", ModuleDefinition.AssemblyReferences.Select(x => x.Name)) + ")"); - return; - } - LogInfo($"{reactiveUI.Name} {reactiveUI.Version}"); - var helpers = ModuleDefinition.AssemblyReferences.Where(x => x.Name == "ReactiveUI.Fody.Helpers").OrderByDescending(x => x.Version).FirstOrDefault(); - if (helpers == null) - { - LogInfo("Could not find assembly: ReactiveUI.Fody.Helpers (" + string.Join(", ", ModuleDefinition.AssemblyReferences.Select(x => x.Name)) + ")"); - return; - } - LogInfo($"{helpers.Name} {helpers.Version}"); - var reactiveObject = new TypeReference("ReactiveUI", "IReactiveObject", ModuleDefinition, reactiveUI); - var targetTypes = ModuleDefinition.GetAllTypes().Where(x => x.BaseType != null && reactiveObject.IsAssignableFrom(x.BaseType)).ToArray(); - var reactivePropertyExtensions = ModuleDefinition.FindType("ReactiveUI.Fody.Helpers", "ReactivePropertyExtensions", helpers).Resolve(); - if (reactivePropertyExtensions == null) - throw new Exception("reactivePropertyExtensions is null"); - - var raiseAndSetIfChangedMethod = ModuleDefinition.ImportReference(reactivePropertyExtensions.Methods.Single(x => x.Name == "RaiseAndSetIfChanged")); - if (raiseAndSetIfChangedMethod == null) - throw new Exception("raiseAndSetIfChangedMethod is null"); - - var reactiveAttribute = ModuleDefinition.FindType("ReactiveUI.Fody.Helpers", "ReactiveAttribute", helpers); - if (reactiveAttribute == null) - throw new Exception("reactiveAttribute is null"); - - var reactiveObjectExtensions = new TypeReference("ReactiveUI", "IReactiveObjectExtensions", ModuleDefinition, reactiveUI).Resolve(); - if (reactiveObjectExtensions == null) - throw new Exception("reactiveObjectExtensions is null"); - - var raisePropertyChangedMethod = ModuleDefinition.ImportReference(reactiveObjectExtensions.Methods.Single(x => x.Name == "RaisePropertyChanged")); - if (raisePropertyChangedMethod == null) - throw new Exception("raisePropertyChangedMethod is null"); - - foreach (var targetType in targetTypes) - { - var setMethodByGetMethods = targetType.Properties - .Where(x => x.SetMethod != null && x.GetMethod != null && x.IsDefined(reactiveAttribute)) - .ToDictionary(x => x.GetMethod, x => x.SetMethod); - - foreach (var property in targetType.Properties.Where(x => x.IsDefined(reactiveAttribute)).ToArray()) - { - TypeReference genericTargetType = targetType; - if (targetType.HasGenericParameters) - { - var genericDeclaration = new GenericInstanceType(targetType); - foreach (var parameter in targetType.GenericParameters) - { - genericDeclaration.GenericArguments.Add(parameter); - } - genericTargetType = genericDeclaration; - } - - MethodDefinition[] getMethods; - if (property.SetMethod == null && property.GetMethod.TryGetMethodDependencies(out getMethods)) - { - var setMethodsForGetInstructions = getMethods - .Where(x => setMethodByGetMethods.ContainsKey(x)) - .Select(x => setMethodByGetMethods[x]) - .ToArray(); - - if (!setMethodsForGetInstructions.Any()) - { - LogError($"Get only Property {property.DeclaringType.FullName}.{property.Name} has no supported dependent properties. " + - $"Only dependent auto properties decorated with the [Reactive] attribute can be weaved to raise property change on {property.Name}"); - } - - var raisePropertyChangedMethodReference = raisePropertyChangedMethod.MakeGenericMethod(genericTargetType); - - foreach (var method in setMethodsForGetInstructions) - { - method.Body.Emit(il => - { - var last = method.Body.Instructions.Last(i => i.OpCode == OpCodes.Ret); - il.InsertBefore(last, il.Create(OpCodes.Ldarg_0)); - il.InsertBefore(last, il.Create(OpCodes.Ldstr, property.Name)); - il.InsertBefore(last, il.Create(OpCodes.Call, raisePropertyChangedMethodReference)); - }); - } - - // Move on to next property for the target type - continue; - } - - if (property.SetMethod == null) - { - LogError($"Property {property.DeclaringType.FullName}.{property.Name} has no setter, therefore it is not possible for the property to change, and thus should not be marked with [Reactive]"); - continue; - } - - // Declare a field to store the property value - var field = new FieldDefinition("$" + property.Name, FieldAttributes.Private, property.PropertyType); - targetType.Fields.Add(field); - - // Remove old field (the generated backing field for the auto property) - var oldField = (FieldReference)property.GetMethod.Body.Instructions.Where(x => x.Operand is FieldReference).Single().Operand; - var oldFieldDefinition = oldField.Resolve(); - targetType.Fields.Remove(oldFieldDefinition); - - // See if there exists an initializer for the auto-property - var constructors = targetType.Methods.Where(x => x.IsConstructor); - foreach (var constructor in constructors) - { - var fieldAssignment = constructor.Body.Instructions.SingleOrDefault(x => Equals(x.Operand, oldFieldDefinition) || Equals(x.Operand, oldField)); - if (fieldAssignment != null) - { - // Replace field assignment with a property set (the stack semantics are the same for both, - // so happily we don't have to manipulate the bytecode any further.) - var setterCall = constructor.Body.GetILProcessor().Create(property.SetMethod.IsVirtual ? OpCodes.Callvirt : OpCodes.Call, property.SetMethod); - constructor.Body.GetILProcessor().Replace(fieldAssignment, setterCall); - } - } - - // Build out the getter which simply returns the value of the generated field - property.GetMethod.Body = new MethodBody(property.GetMethod); - property.GetMethod.Body.Emit(il => - { - il.Emit(OpCodes.Ldarg_0); // this - il.Emit(OpCodes.Ldfld, field.BindDefinition(targetType)); // pop -> this.$PropertyName - il.Emit(OpCodes.Ret); // Return the field value that is lying on the stack - }); - - var methodReference = raiseAndSetIfChangedMethod.MakeGenericMethod(genericTargetType, property.PropertyType); - - // Build out the setter which fires the RaiseAndSetIfChanged method - if (property.SetMethod == null) - { - throw new Exception("[Reactive] is decorating " + property.DeclaringType.FullName + "." + property.Name + ", but the property has no setter so there would be nothing to react to. Consider removing the attribute."); - } - property.SetMethod.Body = new MethodBody(property.SetMethod); - property.SetMethod.Body.Emit(il => - { - RaiseAndSetIfChanged(methodReference, targetType, field, il, property.Name); - }); - } - } - } - - private void RaiseAndSetIfChanged(MethodReference raiseAndSetIfChangedMethod, TypeDefinition targetType, FieldDefinition field, ILProcessor il, string propertyName) - { - il.Emit(OpCodes.Ldarg_0); // this - il.Emit(OpCodes.Ldarg_0); // this - il.Emit(OpCodes.Ldflda, field.BindDefinition(targetType)); // pop -> ref this.$PropertyName - il.Emit(OpCodes.Ldarg_1); // value - il.Emit(OpCodes.Ldstr, propertyName); // "PropertyName" - il.Emit(OpCodes.Call, raiseAndSetIfChangedMethod); // pop * 4 -> this.RaiseAndSetIfChanged(this.$PropertyName, value, "PropertyName") - il.Emit(OpCodes.Pop); // We don't care about the result of RaiseAndSetIfChanged, so pop it off the stack (stack is now empty) - il.Emit(OpCodes.Ret); // Return out of the function - } - } -} \ No newline at end of file diff --git a/ReactiveUI.Fody/packages.config b/ReactiveUI.Fody/packages.config deleted file mode 100644 index ca8927f..0000000 --- a/ReactiveUI.Fody/packages.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/ReactiveUIFody.sln b/ReactiveUIFody.sln deleted file mode 100644 index ee9340f..0000000 --- a/ReactiveUIFody.sln +++ /dev/null @@ -1,52 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody", "ReactiveUI.Fody\ReactiveUI.Fody.csproj", "{CCACB6C3-4C59-4372-85D1-CDDCE0D26989}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "ReactiveUI.Fody.Helpers", "ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.shproj", "{4433FF2E-3150-4D7F-BE18-A2258799B79D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Helpers.Net45", "ReactiveUI.Fody.Helpers.Net45\ReactiveUI.Fody.Helpers.Net45.csproj", "{1CA52110-BE45-4C45-B709-28061077E2A5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Helpers.Pcl", "ReactiveUI.Fody.Helpers.Pcl\ReactiveUI.Fody.Helpers.Pcl.csproj", "{8509509A-17C7-4CF0-84AD-5DD208446766}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{841EF03D-D23E-45CB-8BF5-362F32225C96}" - ProjectSection(SolutionItems) = preProject - .nuget\packages.config = .nuget\packages.config - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Tests", "ReactiveUI.Fody.Tests\ReactiveUI.Fody.Tests.csproj", "{A735C110-6877-4C3A-8056-9ABC5FB2DD91}" -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{1ca52110-be45-4c45-b709-28061077e2a5}*SharedItemsImports = 4 - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{4433ff2e-3150-4d7f-be18-a2258799b79d}*SharedItemsImports = 13 - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{8509509a-17c7-4cf0-84ad-5dd208446766}*SharedItemsImports = 4 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Release|Any CPU.Build.0 = Release|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Release|Any CPU.Build.0 = Release|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Release|Any CPU.Build.0 = Release|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/ReactiveUIFody.sln.DotSettings b/ReactiveUIFody.sln.DotSettings deleted file mode 100644 index bbbbf64..0000000 --- a/ReactiveUIFody.sln.DotSettings +++ /dev/null @@ -1,7 +0,0 @@ - - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW - DO_NOT_SHOW \ No newline at end of file diff --git a/ReactiveUIFodyAll.sln b/ReactiveUIFodyAll.sln deleted file mode 100644 index 79d3137..0000000 --- a/ReactiveUIFodyAll.sln +++ /dev/null @@ -1,69 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody", "ReactiveUI.Fody\ReactiveUI.Fody.csproj", "{CCACB6C3-4C59-4372-85D1-CDDCE0D26989}" -EndProject -Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "ReactiveUI.Fody.Helpers", "ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.shproj", "{4433FF2E-3150-4D7F-BE18-A2258799B79D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Helpers.Net45", "ReactiveUI.Fody.Helpers.Net45\ReactiveUI.Fody.Helpers.Net45.csproj", "{1CA52110-BE45-4C45-B709-28061077E2A5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Helpers.Android", "ReactiveUI.Fody.Helpers.Android\ReactiveUI.Fody.Helpers.Android.csproj", "{6D2A6846-A8B7-4186-807D-12E335BD1C67}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Helpers.Ios", "ReactiveUI.Fody.Helpers.Ios\ReactiveUI.Fody.Helpers.Ios.csproj", "{377C39ED-0F7E-4522-A41E-96C5BA0C4FCB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Helpers.Pcl", "ReactiveUI.Fody.Helpers.Pcl\ReactiveUI.Fody.Helpers.Pcl.csproj", "{8509509A-17C7-4CF0-84AD-5DD208446766}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{841EF03D-D23E-45CB-8BF5-362F32225C96}" - ProjectSection(SolutionItems) = preProject - .nuget\packages.config = .nuget\packages.config - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ReactiveUI.Fody.Tests", "ReactiveUI.Fody.Tests\ReactiveUI.Fody.Tests.csproj", "{A735C110-6877-4C3A-8056-9ABC5FB2DD91}" - ProjectSection(ProjectDependencies) = postProject - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989} = {CCACB6C3-4C59-4372-85D1-CDDCE0D26989} - EndProjectSection -EndProject -Global - GlobalSection(SharedMSBuildProjectFiles) = preSolution - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{1ca52110-be45-4c45-b709-28061077e2a5}*SharedItemsImports = 4 - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{377c39ed-0f7e-4522-a41e-96c5ba0c4fcb}*SharedItemsImports = 4 - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{8509509a-17c7-4cf0-84ad-5dd208446766}*SharedItemsImports = 4 - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{4433ff2e-3150-4d7f-be18-a2258799b79d}*SharedItemsImports = 13 - ReactiveUI.Fody.Helpers\ReactiveUI.Fody.Helpers.projitems*{6d2a6846-a8b7-4186-807d-12e335bd1c67}*SharedItemsImports = 4 - EndGlobalSection - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCACB6C3-4C59-4372-85D1-CDDCE0D26989}.Release|Any CPU.Build.0 = Release|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1CA52110-BE45-4C45-B709-28061077E2A5}.Release|Any CPU.Build.0 = Release|Any CPU - {6D2A6846-A8B7-4186-807D-12E335BD1C67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6D2A6846-A8B7-4186-807D-12E335BD1C67}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6D2A6846-A8B7-4186-807D-12E335BD1C67}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6D2A6846-A8B7-4186-807D-12E335BD1C67}.Release|Any CPU.Build.0 = Release|Any CPU - {377C39ED-0F7E-4522-A41E-96C5BA0C4FCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {377C39ED-0F7E-4522-A41E-96C5BA0C4FCB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {377C39ED-0F7E-4522-A41E-96C5BA0C4FCB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {377C39ED-0F7E-4522-A41E-96C5BA0C4FCB}.Release|Any CPU.Build.0 = Release|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8509509A-17C7-4CF0-84AD-5DD208446766}.Release|Any CPU.Build.0 = Release|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A735C110-6877-4C3A-8056-9ABC5FB2DD91}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 44206a8..0000000 --- a/Readme.md +++ /dev/null @@ -1,66 +0,0 @@ -# ReactiveUI.Fody - -[![Windows Build Status]](https://ci.appveyor.com/project/KirkWoll/reactiveui-fody) - -C# Fody extension to generate RaisePropertyChange notifications for properties and ObservableAsPropertyHelper properties. - -## Install ## -Nuget package ReactiveUI.Fody: - -> Install-Package ReactiveUI.Fody - -Currently, you need to manually add `` to your Fody weavers configuration. If this is your first Fody plugin then `FodyWeavers.xml` should look like this after the change: - - - - - - -##Reactive Properties## - -Eases the need for boilerplate in your view models when using [reactiveui](https://github.com/reactiveui/ReactiveUI). Typically, in your view models you must declare properties like this: - - string _SearchId; - - public string SearchId - { - get { return _SearchId; } - set { this.RaiseAndSetIfChanged(ref _SearchId, value); } - } - -This is tedious since all you'd like to do is declare properties as normal: - - [Reactive]public string SearchId { get; set; } - -If a property is annotated with the `[Reactive]` attribute, the plugin will weave the boilerplate into your -output based on the simple auto-property declaration you provide. - -##ObservableAsPropertyHelper Properties - -Similarly, in order to handle observable property helper properties, you must declare them like this: - - ObservableAsPropertyHelper _PersonInfo; - - public string PersonInfo - { - get { return _PersonInfo.Value; } - } - -Then elsewhere you'd set it up via: - - ... - .ToProperty(this, x => x.PersonInfo, out _PersonInfo); - -This plugin will instead allow you to declare the property like: - - public extern string PersonInfo { [ObservableAsProperty]get; } - -It will generate the field and implement the property for you. Because there is no field for you to pass to -`.ToProperty`, you should use the `.ToPropertyEx` extension method provided by this library: - - ... - .ToPropertyEx(this, x => x.PersonInfo); - -This extension will assign the auto-generated field for you rather than relying on the `out` parameter. - -[Windows Build Status]: https://ci.appveyor.com/api/projects/status/github/kswoll/ReactiveUI.Fody?svg=true diff --git a/Weavers/bin/_._ b/Weavers/bin/_._ deleted file mode 100644 index e69de29..0000000 diff --git a/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.dll b/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.dll deleted file mode 100644 index aa490ab..0000000 Binary files a/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.dll and /dev/null differ diff --git a/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.dll.mdb b/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.dll.mdb deleted file mode 100644 index 466fbad..0000000 Binary files a/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.dll.mdb and /dev/null differ diff --git a/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.pdb b/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.pdb deleted file mode 100644 index 48b8480..0000000 Binary files a/artifacts/MonoAndroid/ReactiveUI.Fody.Helpers.pdb and /dev/null differ diff --git a/artifacts/Xamarin.iOS10/ReactiveUI.Fody.Helpers.dll b/artifacts/Xamarin.iOS10/ReactiveUI.Fody.Helpers.dll deleted file mode 100644 index 523db3f..0000000 Binary files a/artifacts/Xamarin.iOS10/ReactiveUI.Fody.Helpers.dll and /dev/null differ diff --git a/artifacts/Xamarin.iOS10/ReactiveUI.Fody.Helpers.pdb b/artifacts/Xamarin.iOS10/ReactiveUI.Fody.Helpers.pdb deleted file mode 100644 index 03736b5..0000000 Binary files a/artifacts/Xamarin.iOS10/ReactiveUI.Fody.Helpers.pdb and /dev/null differ diff --git a/makepackage.bat b/makepackage.bat deleted file mode 100644 index ad60539..0000000 --- a/makepackage.bat +++ /dev/null @@ -1,34 +0,0 @@ -REM "C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe" ReactiveUIFody.sln - -cd Nuget - -..\packages\NugetUtilities.1.0.5\UpdateVersion.exe ReactiveUIFody.nuspec -Increment - -mkdir build -cd build - -copy ..\Nuget.exe . -copy ..\ReactiveUIFody.nuspec . - -mkdir lib -mkdir lib\net45 -mkdir lib\Xamarin.iOS10 -mkdir lib\MonoAndroid -mkdir "lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10" - -copy ..\..\ReactiveUI.Fody\bin\Debug\ReactiveUI.Fody.* . -REM copy ..\..\ReactiveUI.Fody.Helpers.Ios\bin\iPhone\Debug\ReactiveUI.Fody.Helpers.* lib\Xamarin.iOS10 -copy ..\..\ReactiveUI.Fody.1.0.26\lib\Xamarin.iOS10\ReactiveUI.Fody.Helpers.* lib\Xamarin.iOS10 -copy ..\..\ReactiveUI.Fody.Helpers.Net45\bin\Debug\ReactiveUI.Fody.Helpers.* lib\net45 -copy ..\..\ReactiveUI.Fody.Helpers.Pcl\bin\Debug\ReactiveUI.Fody.Helpers.* "lib\portable-net45+win+wpa81+wp80+MonoAndroid10+xamarinios10+MonoTouch10" -REM copy ..\..\ReactiveUI.Fody.Helpers.Android\bin\Debug\ReactiveUI.Fody.Helpers.* lib\MonoAndroid -copy ..\..\ReactiveUI.Fody.1.0.26\lib\MonoAndroid\ReactiveUI.Fody.Helpers.* lib\MonoAndroid - - -nuget pack ReactiveUIFody.nuspec - -copy *.nupkg .. - -cd .. -rmdir build /S /Q -cd .. \ No newline at end of file