From d24050320bc543050ed0e1dd95a3e91c2df493f3 Mon Sep 17 00:00:00 2001 From: Ulrich Buchgraber Date: Wed, 8 Mar 2017 01:48:11 +0100 Subject: [PATCH] !WIP! Employ new .NET Core projects (with "net45" Target FW) TODO: * project.assets.json on obj dir => https://github.com/dotnet/sdk/issues/980 * R# sdk: error with installation detection => https://youtrack.jetbrains.com/issue/RSRP-463584 --- ImplicitNullability.sln | 14 ++++++ Shared | 2 +- ...icitNullability.Plugin.Tests.R20171.csproj | 46 +++++++++++++++++++ .../Infrastructure/Compatibility.cs | 18 ++++++++ .../InspectionExpectationCommentsTestBase.cs | 2 +- .../ImplicitNullability.Plugin.R20171.csproj | 42 +++++++++++++++++ .../ImplicitNullabilityProvider.cs | 10 ++++ 7 files changed, 132 insertions(+), 2 deletions(-) create mode 100644 Src/ImplicitNullability.Plugin.Tests/ImplicitNullability.Plugin.Tests.R20171.csproj create mode 100644 Src/ImplicitNullability.Plugin.Tests/Infrastructure/Compatibility.cs create mode 100644 Src/ImplicitNullability.Plugin/ImplicitNullability.Plugin.R20171.csproj diff --git a/ImplicitNullability.sln b/ImplicitNullability.sln index 8792f6a..66ab1a3 100644 --- a/ImplicitNullability.sln +++ b/ImplicitNullability.sln @@ -39,6 +39,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImplicitNullability.Plugin. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ImplicitNullability.Plugin.VsFormatDefinitions", "Src\ImplicitNullability.Plugin.VsFormatDefinitions\ImplicitNullability.Plugin.VsFormatDefinitions.csproj", "{06B8BCDD-6F91-42C7-A474-C50CD24C397E}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImplicitNullability.Plugin.R20171", "Src\ImplicitNullability.Plugin\ImplicitNullability.Plugin.R20171.csproj", "{F11EC71A-6C97-446D-B2CC-FF9D94BECF41}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ImplicitNullability.Plugin.Tests.R20171", "Src\ImplicitNullability.Plugin.Tests\ImplicitNullability.Plugin.Tests.R20171.csproj", "{8709C388-4692-4C91-A383-A738A966657A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -87,6 +91,14 @@ Global {06B8BCDD-6F91-42C7-A474-C50CD24C397E}.Debug|Any CPU.Build.0 = Debug|Any CPU {06B8BCDD-6F91-42C7-A474-C50CD24C397E}.Release|Any CPU.ActiveCfg = Release|Any CPU {06B8BCDD-6F91-42C7-A474-C50CD24C397E}.Release|Any CPU.Build.0 = Release|Any CPU + {F11EC71A-6C97-446D-B2CC-FF9D94BECF41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F11EC71A-6C97-446D-B2CC-FF9D94BECF41}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F11EC71A-6C97-446D-B2CC-FF9D94BECF41}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F11EC71A-6C97-446D-B2CC-FF9D94BECF41}.Release|Any CPU.Build.0 = Release|Any CPU + {8709C388-4692-4C91-A383-A738A966657A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8709C388-4692-4C91-A383-A738A966657A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8709C388-4692-4C91-A383-A738A966657A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8709C388-4692-4C91-A383-A738A966657A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -102,5 +114,7 @@ Global {DB452FAF-D3A5-4CE9-AA1B-A738CB79F50D} = {67859B65-179D-40D0-80DB-003011824913} {1B815C86-2DD2-4B1F-A50A-3BFB7132D99E} = {67859B65-179D-40D0-80DB-003011824913} {06B8BCDD-6F91-42C7-A474-C50CD24C397E} = {67859B65-179D-40D0-80DB-003011824913} + {F11EC71A-6C97-446D-B2CC-FF9D94BECF41} = {67859B65-179D-40D0-80DB-003011824913} + {8709C388-4692-4C91-A383-A738A966657A} = {67859B65-179D-40D0-80DB-003011824913} EndGlobalSection EndGlobal diff --git a/Shared b/Shared index a80eeda..9f3f281 160000 --- a/Shared +++ b/Shared @@ -1 +1 @@ -Subproject commit a80eeda061cbf95fbc65d4a79dfd9dc708fae46c +Subproject commit 9f3f2817a5632bad63a1c2e653d167b4ee740b91 diff --git a/Src/ImplicitNullability.Plugin.Tests/ImplicitNullability.Plugin.Tests.R20171.csproj b/Src/ImplicitNullability.Plugin.Tests/ImplicitNullability.Plugin.Tests.R20171.csproj new file mode 100644 index 0000000..a30a401 --- /dev/null +++ b/Src/ImplicitNullability.Plugin.Tests/ImplicitNullability.Plugin.Tests.R20171.csproj @@ -0,0 +1,46 @@ + + + + net45 + ImplicitNullability.Plugin.Tests + + obj\R20171\ + false + false + false + None + + + + TRACE;DEBUG;NET45;RESHARPER20171 + bin\R20171\Debug\ + + + + TRACE;RELEASE;NET45;RESHARPER20171 + bin\R20171\Release\ + + + + + + + + + + + PreserveNewest + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Src/ImplicitNullability.Plugin.Tests/Infrastructure/Compatibility.cs b/Src/ImplicitNullability.Plugin.Tests/Infrastructure/Compatibility.cs new file mode 100644 index 0000000..b5b2324 --- /dev/null +++ b/Src/ImplicitNullability.Plugin.Tests/Infrastructure/Compatibility.cs @@ -0,0 +1,18 @@ +#if RESHARPER20161 || RESHARPER20162 || RESHARPER20163 +using System; +using JetBrains.Annotations; +using JetBrains.ReSharper.Psi.Tree; + +namespace ImplicitNullability.Plugin.Tests.Infrastructure +{ + public static class Compatibility + { + [CanBeNull] + public static ITreeNode FindPreviousNode([NotNull] this ITreeNode node, [NotNull] Func predicate) + { + return node.FindPrevNode(predicate); + } + } +} + +#endif diff --git a/Src/ImplicitNullability.Plugin.Tests/Infrastructure/InspectionExpectationCommentsTestBase.cs b/Src/ImplicitNullability.Plugin.Tests/Infrastructure/InspectionExpectationCommentsTestBase.cs index 67be5ec..90519dd 100644 --- a/Src/ImplicitNullability.Plugin.Tests/Infrastructure/InspectionExpectationCommentsTestBase.cs +++ b/Src/ImplicitNullability.Plugin.Tests/Infrastructure/InspectionExpectationCommentsTestBase.cs @@ -111,7 +111,7 @@ private string ExtractExpectedWarningId(string commentText, string[] definedExpe [CanBeNull] private ITreeNode FindPreviousNonWhiteSpaceNode(ITreeNode currentNode) { - return currentNode.FindPrevNode(x => x is IWhitespaceNode ? TreeNodeActionType.CONTINUE : TreeNodeActionType.ACCEPT); + return currentNode.FindPreviousNode(x => x is IWhitespaceNode ? TreeNodeActionType.CONTINUE : TreeNodeActionType.ACCEPT); } private static IReadOnlyCollection RunInspections(ISolution solution, ICollection sourceFiles) diff --git a/Src/ImplicitNullability.Plugin/ImplicitNullability.Plugin.R20171.csproj b/Src/ImplicitNullability.Plugin/ImplicitNullability.Plugin.R20171.csproj new file mode 100644 index 0000000..5cb0f13 --- /dev/null +++ b/Src/ImplicitNullability.Plugin/ImplicitNullability.Plugin.R20171.csproj @@ -0,0 +1,42 @@ + + + + net45 + ImplicitNullability.Plugin + + obj\R20171\ + false + false + false + None + + + + TRACE;DEBUG;NET45;RESHARPER20171 + bin\R20171\Debug\ + + + + TRACE;RELEASE;NET45;RESHARPER20171 + bin\R20171\Release\ + + + + + ReSharperExtensionsShared\DebugUtility.cs + + + ReSharperExtensionsShared\SimpleTreeNodeHighlightingBase.cs + + + + + + + + + + + + + \ No newline at end of file diff --git a/Src/ImplicitNullability.Plugin/ImplicitNullabilityProvider.cs b/Src/ImplicitNullability.Plugin/ImplicitNullabilityProvider.cs index 489a856..8b89e1f 100644 --- a/Src/ImplicitNullability.Plugin/ImplicitNullabilityProvider.cs +++ b/Src/ImplicitNullability.Plugin/ImplicitNullabilityProvider.cs @@ -6,6 +6,11 @@ using JetBrains.ReSharper.Psi.Util; using JetBrains.Util; using static JetBrains.ReSharper.Psi.DeclaredElementConstants; +#if !(RESHARPER20161 || RESHARPER20162 || RESHARPER20163) +using JetBrains.ReSharper.Psi.CSharp; +using JetBrains.ReSharper.Psi.CSharp.Util; + +#endif namespace ImplicitNullability.Plugin { @@ -145,7 +150,12 @@ CodeAnnotationAttributesChecker codeAnnotationAttributesChecker { if (!ContainsContractAnnotationAttribute(method)) { +#if RESHARPER20161 || RESHARPER20162 || RESHARPER20163 var taskUnderlyingType = method.ReturnType.GetTaskUnderlyingType(); +#else + // TODO: How do we get the CSharpLanguageLevel / a "context" node? + var taskUnderlyingType = method.ReturnType.GetTasklikeUnderlyingType(CSharpLanguageLevel.Latest); +#endif if (taskUnderlyingType != null) result = GetNullabilityForType(taskUnderlyingType);