Ejemplo n.º 1
0
        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);
    }
Ejemplo n.º 3
0
        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> ()));
        }
Ejemplo n.º 4
0
        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));
            }
        }
Ejemplo n.º 5
0
		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> ());
		}
Ejemplo n.º 6
0
		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));
			}
		}
Ejemplo n.º 7
0
		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";
		}
Ejemplo n.º 8
0
 public RenameMemberFix(IBaseMember item, string oldName, string newName)
 {
     this.OldName = oldName;
     this.NewName = newName;
     this.Item    = item;
 }
Ejemplo n.º 9
0
		public RenameMemberFix (IBaseMember item, string oldName, string newName)
		{
			this.OldName = oldName;
			this.NewName = newName;
			this.Item = item;
		}