static string GetType(IBaseMember member) { switch (member.MemberType) { case MemberType.Event: return("event"); case MemberType.Field: return("field"); case MemberType.Method: if (((IMethod)member).IsConstructor) { return("constructor"); } if (((IMethod)member).IsFinalizer) { return("destructor"); } if (((IMethod)member).IsSpecialName && GetOperator(member.Name) != null) { return("operator"); } return("method"); case MemberType.Parameter: return("parameter"); case MemberType.Property: if (((IProperty)member).IsIndexer) { return("indexer"); } return("property"); case MemberType.Type: switch (((IType)member).ClassType) { case ClassType.Class: return("class"); case ClassType.Delegate: return("delegate"); case ClassType.Enum: return("enum"); case ClassType.Interface: return("interface"); case ClassType.Struct: return("struct"); } break; } return("unknown"); }
///// <summary> ///// 查找符合条件的对向列表 ///// </summary> ///// <typeparam name="T">对象类型</typeparam> ///// <param name="mine">当前对象</param> ///// <param name="list">目标对象列表</param> ///// <param name="func">判断方法</param> ///// <returns>符合条件的对象列表</returns> //// 数据符合合并类型, 选择具体功能外抛 //private static IList<T> Search<T>(T mine, IList<T> list, Func<T, T, bool> func) where T : ISelectWeightData //{ // List<T> result = null; // if (list != null && func != null && mine != null) // { // result = new List<T>(); // T item; // for (var i = 0; i < list.Count; i++) // { // item = list[i]; // if (func(mine, item)) // { // result.Add(item); // } // } // } // return result; //} /// <summary> /// 判断圆形(扇形),圆形是否碰撞 /// </summary> /// <param name="item">被搜索单位</param> /// <param name="scanerX">搜索单位位置X</param> /// <param name="scanerY">搜索单位位置Y</param> /// <param name="radius">搜索半径</param> /// <param name="openAngle">扇形开合角度</param> /// <param name="rotate">扇形转动角度</param> /// <returns>是否碰撞</returns> public static bool IsCollisionItem(IBaseMember item, float scanerX, float scanerY, float radius, float openAngle = 361f, float rotate = 0f) { if (item == null || item.AllData.MemberData == null) { return(false); } var memberDta = item.AllData.MemberData; // 求距离 var xOff = item.X - scanerX; var yOff = item.Y - scanerY; var distanceSquare = xOff * xOff + yOff * yOff; var radiusSum = memberDta.SpaceSet * 0.5f + radius; // 距离超过半径和不会相交 if (distanceSquare > radiusSum * radiusSum) { return(false); } if (openAngle >= 360f) { // 判断与圆形碰撞 return(true); } else { // 判断与扇形碰撞 var halfOpenAngle = openAngle * 0.5f; // 两个点相对圆心方向 var pointForCorner1 = new Vector2((float)Math.Sin(rotate + halfOpenAngle), (float)Math.Cos(rotate + halfOpenAngle)); var pointForCorner2 = new Vector2((float)Math.Sin(rotate - halfOpenAngle), (float)Math.Cos(rotate - halfOpenAngle)); var circlePosition = new Vector2(item.X, item.Y); var sectorPosition = new Vector2(scanerX, scanerY); // 判断圆心到扇形两条边的距离 var distance1 = CollisionGraphics.EvaluatePointToLine(circlePosition, pointForCorner1, sectorPosition); var distance2 = CollisionGraphics.EvaluatePointToLine(circlePosition, sectorPosition, pointForCorner2); if (distance1 >= 0 && distance2 >= 0) { // 圆心在扇形开口角度内 return(true); } // 如果与两线相交则相交 var circleRadius = memberDta.SpaceSet * 0.5f; if (CollisionGraphics.CheckCircleAndLine(circlePosition, circleRadius, sectorPosition, pointForCorner1) || CollisionGraphics.CheckCircleAndLine(circlePosition, circleRadius, sectorPosition, pointForCorner2)) { return(true); } } return(false); }
public FixableResult GetFixableResult(ICS.AstLocation location, IBaseMember node, string name) { IList <string> suggestedFixes; var error = GetErrorMessage(name, out suggestedFixes); var fixes = new List <RenameMemberFix> (); fixes.Add(new RenameMemberFix(node, name, null)); if (suggestedFixes != null) { fixes.AddRange(suggestedFixes.Select(f => new RenameMemberFix(node, name, f))); } return(new FixableResult( new DomRegion(location.Line, location.Column, location.Line, location.Column + name.Length), error, MonoDevelop.SourceEditor.QuickTaskSeverity.Warning, ResultCertainty.High, ResultImportance.Medium, fixes.ToArray <IAnalysisFix> ())); }
public void GenerateDoc(IMember member) { Init(member); this.member = member; this.currentType = GetType(member); DocConfig.Instance.Rules.ForEach(r => r.Run(this)); if (member.CanHaveParameters) { this.currentType = "parameter"; foreach (IParameter p in member.Parameters) { curName = p.Name; this.member = member; SplitWords(p, p.Name); DocConfig.Instance.Rules.ForEach(r => r.Run(this)); } } if (member is IMethod) { IMethod method = (IMethod)member; int count = 1; foreach (var param in method.TypeParameters) { this.currentType = "typeparam"; curName = param.Name; tags["TypeParam"] = param.Name; switch (count) { case 1: tags["TypeParamNumber"] = "1st"; break; case 2: tags["TypeParamNumber"] = "2nd"; break; case 3: tags["TypeParamNumber"] = "3rd"; break; default: tags["TypeParamNumber"] = count + "th"; break; } count++; Console.WriteLine("type parameter:" + curName); DocConfig.Instance.Rules.ForEach(r => r.Run(this)); } } IType type; if (member is IType) { type = (IType)member; } else { type = member.DeclaringType; } this.currentType = "exception"; foreach (var exception in visitor.Exceptions) { var exceptionType = HelperMethods.ConvertToReturnType(exception); curName = exceptionType.FullName; tags["Exception"] = exceptionType.ToInvariantString(); SplitWords(exceptionType, exceptionType.Name); if (type != null) { IType resolvedType = type.SourceProjectDom.SearchType(type, exceptionType); string sentence = AmbienceService.GetDocumentationSummary(resolvedType).Trim(); if (sentence.StartsWith("<para>") && sentence.EndsWith("</para>")) { sentence = sentence.Substring("<para>".Length, sentence.Length - "<para>".Length - "</para>".Length).Trim(); } if (sentence.StartsWith("Represents the error that occurs when")) { sentence = "Is thrown when" + sentence.Substring("Represents the error that occurs when".Length); } if (!string.IsNullOrEmpty(sentence)) { Set("exception", curName, sentence); } } DocConfig.Instance.Rules.ForEach(r => r.Run(this)); } }
public FixableResult GetFixableResult (ICS.AstLocation location, IBaseMember node, string name) { IList<string> suggestedFixes; var error = GetErrorMessage (name, out suggestedFixes); var fixes = new List<RenameMemberFix> (); fixes.Add (new RenameMemberFix (node, name, null)); if (suggestedFixes != null) fixes.AddRange (suggestedFixes.Select (f => new RenameMemberFix (node, name, f))); return new FixableResult ( new DomRegion (location.Line, location.Column, location.Line, location.Column + name.Length), error, MonoDevelop.SourceEditor.QuickTaskSeverity.Warning, ResultCertainty.High, ResultImportance.Medium, fixes.ToArray<IAnalysisFix> ()); }
public void GenerateDoc (IMember member) { Init (member); this.member = member; this.currentType = GetType (member); DocConfig.Instance.Rules.ForEach (r => r.Run (this)); if (member.CanHaveParameters) { this.currentType = "parameter"; foreach (IParameter p in member.Parameters) { curName = p.Name; this.member = member; SplitWords (p, p.Name); DocConfig.Instance.Rules.ForEach (r => r.Run (this)); } } if (member is IMethod) { IMethod method = (IMethod)member; int count = 1; foreach (var param in method.TypeParameters) { this.currentType = "typeparam"; curName = param.Name; tags["TypeParam"] = param.Name; switch (count) { case 1: tags["TypeParamNumber"] = "1st"; break; case 2: tags["TypeParamNumber"] = "2nd"; break; case 3: tags["TypeParamNumber"] = "3rd"; break; default: tags["TypeParamNumber"] = count + "th"; break; } count++; Console.WriteLine ("type parameter:" + curName); DocConfig.Instance.Rules.ForEach (r => r.Run (this)); } } IType type; if (member is IType) { type = (IType)member; } else { type = member.DeclaringType; } this.currentType = "exception"; foreach (var exception in visitor.Exceptions) { var exceptionType = MonoDevelop.Refactoring.HelperMethods.ConvertToReturnType (exception); curName = exceptionType.FullName; tags["Exception"] = exceptionType.ToInvariantString (); SplitWords (exceptionType, exceptionType.Name); if (type != null) { IType resolvedType = type.SourceProjectDom.SearchType (type, exceptionType); string sentence = AmbienceService.GetDocumentationSummary (resolvedType).Trim (); if (sentence.StartsWith ("<para>") && sentence.EndsWith ("</para>")) sentence = sentence.Substring ("<para>".Length, sentence.Length - "<para>".Length - "</para>".Length).Trim (); if (sentence.StartsWith ("Represents the error that occurs when")) sentence = "Is thrown when" + sentence.Substring ("Represents the error that occurs when".Length); if (!string.IsNullOrEmpty (sentence)) Set ("exception", curName, sentence); } DocConfig.Instance.Rules.ForEach (r => r.Run (this)); } }
static string GetType (IBaseMember member) { switch (member.MemberType) { case MemberType.Event: return "event"; case MemberType.Field: return "field"; case MemberType.Method: if (((IMethod)member).IsConstructor) return "constructor"; if (((IMethod)member).IsFinalizer) return "destructor"; if (((IMethod)member).IsSpecialName && GetOperator (member.Name) != null) return "operator"; return "method"; case MemberType.Parameter: return "parameter"; case MemberType.Property: if (((IProperty)member).IsIndexer) return "indexer"; return "property"; case MemberType.Type: switch (((IType)member).ClassType) { case ClassType.Class: return "class"; case ClassType.Delegate: return "delegate"; case ClassType.Enum: return "enum"; case ClassType.Interface: return "interface"; case ClassType.Struct: return "struct"; } break; } return "unknown"; }
public RenameMemberFix(IBaseMember item, string oldName, string newName) { this.OldName = oldName; this.NewName = newName; this.Item = item; }
public RenameMemberFix (IBaseMember item, string oldName, string newName) { this.OldName = oldName; this.NewName = newName; this.Item = item; }