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/EqualityMembersGenerator.cs')
-rw-r--r--main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/EqualityMembersGenerator.cs319
1 files changed, 160 insertions, 159 deletions
diff --git a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/EqualityMembersGenerator.cs b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/EqualityMembersGenerator.cs
index 49d89a70e6..d5849c638b 100644
--- a/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/EqualityMembersGenerator.cs
+++ b/main/src/addins/CSharpBinding/MonoDevelop.CSharp.CodeGeneration/EqualityMembersGenerator.cs
@@ -1,159 +1,160 @@
-//
-// EqualityMembersGenerator.cs
-//
-// Author:
-// Mike Krüger <mkrueger@novell.com>
-//
-// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
-//
-// 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.
-
-using System.Collections.Generic;
-using ICSharpCode.NRefactory.CSharp;
-using MonoDevelop.Core;
-using ICSharpCode.NRefactory.TypeSystem;
-
-namespace MonoDevelop.CodeGeneration
-{
- class EqualityMembersGenerator : ICodeGenerator
- {
- public string Icon {
- get {
- return "md-newmethod";
- }
- }
-
- public string Text {
- get {
- return GettextCatalog.GetString ("Equality members");
- }
- }
-
- public string GenerateDescription {
- get {
- return GettextCatalog.GetString ("Select members to include in equality.");
- }
- }
-
- public bool IsValid (CodeGenerationOptions options)
- {
- return new CreateEquality (options).IsValid ();
- }
-
- public IGenerateAction InitalizeSelection (CodeGenerationOptions options, Gtk.TreeView treeView)
- {
- var createEventMethod = new CreateEquality (options);
- createEventMethod.Initialize (treeView);
- return createEventMethod;
- }
-
- class CreateEquality : AbstractGenerateAction
- {
- public CreateEquality (CodeGenerationOptions options) : base (options)
- {
- }
-
- protected override IEnumerable<object> GetValidMembers ()
- {
- if (Options.EnclosingType == null || Options.EnclosingMember != null)
- yield break;
- foreach (IField field in Options.EnclosingType.Fields) {
- if (field.IsSynthetic)
- continue;
- yield return field;
- }
-
- foreach (IProperty property in Options.EnclosingType.Properties) {
- if (property.IsSynthetic)
- continue;
- if (property.CanGet)
- yield return property;
- }
- }
-
- protected override IEnumerable<string> GenerateCode (List<object> includedMembers)
- {
- // Genereate Equals
- var methodDeclaration = new MethodDeclaration ();
- methodDeclaration.Name = "Equals";
-
- methodDeclaration.ReturnType = new PrimitiveType ("bool");
- methodDeclaration.Modifiers = Modifiers.Public | Modifiers.Override;
- methodDeclaration.Body = new BlockStatement ();
- methodDeclaration.Parameters.Add (new ParameterDeclaration (new PrimitiveType ("object"), "obj"));
- var paramId = new IdentifierExpression ("obj");
- var ifStatement = new IfElseStatement ();
- ifStatement.Condition = new BinaryOperatorExpression (paramId, BinaryOperatorType.Equality, new PrimitiveExpression (null));
- ifStatement.TrueStatement = new ReturnStatement (new PrimitiveExpression (false));
- methodDeclaration.Body.Statements.Add (ifStatement);
-
- ifStatement = new IfElseStatement ();
- var arguments = new List<Expression> ();
- arguments.Add (new ThisReferenceExpression ());
- arguments.Add (paramId.Clone ());
- ifStatement.Condition = new InvocationExpression (new IdentifierExpression ("ReferenceEquals"), arguments);
- ifStatement.TrueStatement = new ReturnStatement (new PrimitiveExpression (true));
- methodDeclaration.Body.Statements.Add (ifStatement);
-
- ifStatement = new IfElseStatement ();
- ifStatement.Condition = new BinaryOperatorExpression (new InvocationExpression (new MemberReferenceExpression (paramId.Clone (), "GetType")), BinaryOperatorType.InEquality, new TypeOfExpression (new SimpleType (Options.EnclosingType.Name)));
- ifStatement.TrueStatement = new ReturnStatement (new PrimitiveExpression (false));
- methodDeclaration.Body.Statements.Add (ifStatement);
-
- var varType = new SimpleType (Options.EnclosingType.Name);
- var varDecl = new VariableDeclarationStatement (varType, "other", new CastExpression (varType.Clone (), paramId.Clone ()));
- methodDeclaration.Body.Statements.Add (varDecl);
-
- var otherId = new IdentifierExpression ("other");
- Expression binOp = null;
- foreach (IMember member in includedMembers) {
- Expression right = new BinaryOperatorExpression (new IdentifierExpression (member.Name), BinaryOperatorType.Equality, new MemberReferenceExpression (otherId.Clone (), member.Name));
- binOp = binOp == null ? right : new BinaryOperatorExpression (binOp, BinaryOperatorType.ConditionalAnd, right);
- }
-
- methodDeclaration.Body.Statements.Add (new ReturnStatement (binOp));
- yield return methodDeclaration.ToString (Options.FormattingOptions);
-
- methodDeclaration = new MethodDeclaration ();
- methodDeclaration.Name = "GetHashCode";
-
- methodDeclaration.ReturnType = new PrimitiveType ("int");
- methodDeclaration.Modifiers = Modifiers.Public | Modifiers.Override;
- methodDeclaration.Body = new BlockStatement ();
-
- binOp = null;
- foreach (IMember member in includedMembers) {
- Expression right;
- right = new InvocationExpression (new MemberReferenceExpression (new IdentifierExpression (member.Name), "GetHashCode"));
-
- IType type = member.ReturnType;
- if (type != null && type.Kind != TypeKind.Struct && type.Kind != TypeKind.Enum)
- right = new ParenthesizedExpression (new ConditionalExpression (new BinaryOperatorExpression (new IdentifierExpression (member.Name), BinaryOperatorType.InEquality, new PrimitiveExpression (null)), right, new PrimitiveExpression (0)));
-
- binOp = binOp == null ? right : new BinaryOperatorExpression (binOp, BinaryOperatorType.ExclusiveOr, right);
- }
- var uncheckedBlock = new BlockStatement ();
- uncheckedBlock.Statements.Add (new ReturnStatement (binOp));
-
- methodDeclaration.Body.Statements.Add (new UncheckedStatement (uncheckedBlock));
- yield return methodDeclaration.ToString (Options.FormattingOptions);
- }
- }
- }
-}
+////
+//// EqualityMembersGenerator.cs
+////
+//// Author:
+//// Mike Krüger <mkrueger@novell.com>
+////
+//// Copyright (c) 2009 Novell, Inc (http://www.novell.com)
+////
+//// 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.
+//
+//using System.Collections.Generic;
+//using MonoDevelop.Core;
+//using Microsoft.CodeAnalysis;
+//using ICSharpCode.NRefactory.CSharp;
+//using ICSharpCode.NRefactory6.CSharp;
+//
+//namespace MonoDevelop.CodeGeneration
+//{
+// class EqualityMembersGenerator : ICodeGenerator
+// {
+// public string Icon {
+// get {
+// return "md-newmethod";
+// }
+// }
+//
+// public string Text {
+// get {
+// return GettextCatalog.GetString ("Equality members");
+// }
+// }
+//
+// public string GenerateDescription {
+// get {
+// return GettextCatalog.GetString ("Select members to include in equality.");
+// }
+// }
+//
+// public bool IsValid (CodeGenerationOptions options)
+// {
+// return new CreateEquality (options).IsValid ();
+// }
+//
+// public IGenerateAction InitalizeSelection (CodeGenerationOptions options, Gtk.TreeView treeView)
+// {
+// var createEventMethod = new CreateEquality (options);
+// createEventMethod.Initialize (treeView);
+// return createEventMethod;
+// }
+//
+// class CreateEquality : AbstractGenerateAction
+// {
+// public CreateEquality (CodeGenerationOptions options) : base (options)
+// {
+// }
+//
+// protected override IEnumerable<object> GetValidMembers ()
+// {
+// if (Options.EnclosingType == null || Options.EnclosingMember != null)
+// yield break;
+// foreach (IFieldSymbol field in Options.EnclosingType.GetMembers ().OfType<IFieldSymbol> ()) {
+// if (field.IsImplicitlyDeclared)
+// continue;
+// yield return field;
+// }
+//
+// foreach (IPropertySymbol property in Options.EnclosingType.GetMembers ().OfType<IPropertySymbol> ()) {
+// if (property.IsImplicitlyDeclared)
+// continue;
+// if (property.GetMethod != null)
+// yield return property;
+// }
+// }
+//
+// protected override IEnumerable<string> GenerateCode (List<object> includedMembers)
+// {
+// // Genereate Equals
+// var methodDeclaration = new MethodDeclaration ();
+// methodDeclaration.Name = "Equals";
+//
+// methodDeclaration.ReturnType = new PrimitiveType ("bool");
+// methodDeclaration.Modifiers = Modifiers.Public | Modifiers.Override;
+// methodDeclaration.Body = new BlockStatement ();
+// methodDeclaration.Parameters.Add (new ParameterDeclaration (new PrimitiveType ("object"), "obj"));
+// var paramId = new IdentifierExpression ("obj");
+// var ifStatement = new IfElseStatement ();
+// ifStatement.Condition = new BinaryOperatorExpression (paramId, BinaryOperatorType.Equality, new PrimitiveExpression (null));
+// ifStatement.TrueStatement = new ReturnStatement (new PrimitiveExpression (false));
+// methodDeclaration.Body.Statements.Add (ifStatement);
+//
+// ifStatement = new IfElseStatement ();
+// var arguments = new List<Expression> ();
+// arguments.Add (new ThisReferenceExpression ());
+// arguments.Add (paramId.Clone ());
+// ifStatement.Condition = new InvocationExpression (new IdentifierExpression ("ReferenceEquals"), arguments);
+// ifStatement.TrueStatement = new ReturnStatement (new PrimitiveExpression (true));
+// methodDeclaration.Body.Statements.Add (ifStatement);
+//
+// ifStatement = new IfElseStatement ();
+// ifStatement.Condition = new BinaryOperatorExpression (new InvocationExpression (new MemberReferenceExpression (paramId.Clone (), "GetType")), BinaryOperatorType.InEquality, new TypeOfExpression (new SimpleType (Options.EnclosingType.Name)));
+// ifStatement.TrueStatement = new ReturnStatement (new PrimitiveExpression (false));
+// methodDeclaration.Body.Statements.Add (ifStatement);
+//
+// var varType = new SimpleType (Options.EnclosingType.Name);
+// var varDecl = new VariableDeclarationStatement (varType, "other", new CastExpression (varType.Clone (), paramId.Clone ()));
+// methodDeclaration.Body.Statements.Add (varDecl);
+//
+// var otherId = new IdentifierExpression ("other");
+// Expression binOp = null;
+// foreach (ISymbol member in includedMembers) {
+// Expression right = new BinaryOperatorExpression (new IdentifierExpression (member.Name), BinaryOperatorType.Equality, new MemberReferenceExpression (otherId.Clone (), member.Name));
+// binOp = binOp == null ? right : new BinaryOperatorExpression (binOp, BinaryOperatorType.ConditionalAnd, right);
+// }
+//
+// methodDeclaration.Body.Statements.Add (new ReturnStatement (binOp));
+// yield return methodDeclaration.ToString ();
+//
+// methodDeclaration = new MethodDeclaration ();
+// methodDeclaration.Name = "GetHashCode";
+//
+// methodDeclaration.ReturnType = new PrimitiveType ("int");
+// methodDeclaration.Modifiers = Modifiers.Public | Modifiers.Override;
+// methodDeclaration.Body = new BlockStatement ();
+//
+// binOp = null;
+// foreach (ISymbol member in includedMembers) {
+// Expression right;
+// right = new InvocationExpression (new MemberReferenceExpression (new IdentifierExpression (member.Name), "GetHashCode"));
+//
+// var type = member.GetReturnType ();
+// if (type != null && type.TypeKind != TypeKind.Struct && type.TypeKind != TypeKind.Enum)
+// right = new ParenthesizedExpression (new ConditionalExpression (new BinaryOperatorExpression (new IdentifierExpression (member.Name), BinaryOperatorType.InEquality, new PrimitiveExpression (null)), right, new PrimitiveExpression (0)));
+//
+// binOp = binOp == null ? right : new BinaryOperatorExpression (binOp, BinaryOperatorType.ExclusiveOr, right);
+// }
+// var uncheckedBlock = new BlockStatement ();
+// uncheckedBlock.Statements.Add (new ReturnStatement (binOp));
+//
+// methodDeclaration.Body.Statements.Add (new UncheckedStatement (uncheckedBlock));
+// yield return methodDeclaration.ToString ();
+// }
+// }
+// }
+//}