Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/PartialGenerator.cs')
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/PartialGenerator.cs38
1 files changed, 28 insertions, 10 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/PartialGenerator.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/PartialGenerator.cs
index fbde16fec2..03da34a8f6 100644
--- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/PartialGenerator.cs
+++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/PartialGenerator.cs
@@ -23,12 +23,14 @@
// 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.
-using System;
+
+using System.Linq;
using System.Collections.Generic;
using Gtk;
-using ICSharpCode.NRefactory.TypeSystem;
using MonoDevelop.Core;
-using MonoDevelop.Ide.TypeSystem;
+using System.Threading;
+using ICSharpCode.NRefactory6.CSharp;
+using MonoDevelop.CSharp.Refactoring;
namespace MonoDevelop.CodeGeneration
{
@@ -76,21 +78,37 @@ namespace MonoDevelop.CodeGeneration
if (type == null || Options.EnclosingMember != null)
yield break;
- foreach (var method in Options.EnclosingType.Methods) {
- if (method.IsPartial && method.BodyRegion.IsEmpty) {
+ foreach (var method in Options.EnclosingType.GetMembers ().OfType<Microsoft.CodeAnalysis.IMethodSymbol> ()) {
+ if (method.MethodKind != Microsoft.CodeAnalysis.MethodKind.Ordinary)
+ continue;
+ if (IsEmptyPartialMethod(method)) {
yield return method;
}
}
}
+ static bool IsEmptyPartialMethod(Microsoft.CodeAnalysis.ISymbol member, CancellationToken cancellationToken = default(CancellationToken))
+ {
+ var method = member as Microsoft.CodeAnalysis.IMethodSymbol;
+ if (method == null || method.IsDefinedInMetadata ())
+ return false;
+ foreach (var r in method.DeclaringSyntaxReferences) {
+ var node = r.GetSyntax (cancellationToken) as Microsoft.CodeAnalysis.CSharp.Syntax.MethodDeclarationSyntax;
+ if (node == null)
+ continue;
+ if (node.Body != null || !node.Modifiers.Any(m => m.IsKind (Microsoft.CodeAnalysis.CSharp.SyntaxKind.PartialKeyword)))
+ return false;
+ }
+
+ return true;
+ }
+
+
protected override IEnumerable<string> GenerateCode (List<object> includedMembers)
{
- var generator = Options.CreateCodeGenerator ();
- generator.AutoIndent = false;
- foreach (IMethod member in includedMembers)
- yield return generator.CreateMemberImplementation (Options.EnclosingType, Options.EnclosingPart, member, false).Code;
+ foreach (Microsoft.CodeAnalysis.IMethodSymbol member in includedMembers)
+ yield return CSharpCodeGenerator.CreatePartialMemberImplementation (Options.DocumentContext, Options.Editor, Options.EnclosingType, Options.EnclosingPart.GetLocation (), member, false).Code;
}
}
}
}
-