Esempio n. 1
0
        public static AstType ConvertToTypeReference(this MonoDevelop.Projects.Dom.IReturnType returnType)
        {
            string primitiveType;

            if (TypeTable.TryGetValue(returnType.DecoratedFullName, out primitiveType))
            {
                return(new PrimitiveType(primitiveType));
            }

            AstType result = null;

            if (!string.IsNullOrEmpty(returnType.Namespace))
            {
                result = new SimpleType(returnType.Namespace);
            }
            foreach (var part in returnType.Parts)
            {
                if (result == null)
                {
                    var st = new SimpleType(part.Name);
                    foreach (var type in part.GenericArguments.Select(ga => ConvertToTypeReference(ga)))
                    {
                        st.AddChild(type, SimpleType.Roles.TypeArgument);
                    }
                    result = st;
                }
                else
                {
                    var mt = new ICSharpCode.NRefactory.CSharp.MemberType()
                    {
                        Target     = result,
                        MemberName = part.Name
                    };
                    foreach (var type in part.GenericArguments.Select(ga => ConvertToTypeReference(ga)))
                    {
                        mt.AddChild(type, SimpleType.Roles.TypeArgument);
                    }
                    result = mt;
                }
            }

            /*
             * List<TypeReference> genericTypes = new List<TypeReference> ();
             * foreach (MonoDevelop.Projects.Dom.IReturnType genericType in returnType.GenericArguments) {
             *      genericTypes.Add (ConvertToTypeReference (genericType));
             * }
             * TypeReference result = new AstType (returnType.FullName, genericTypes);
             * result.IsKeyword = true;
             * result.PointerNestingLevel = returnType.PointerNestingLevel;
             * if (returnType.ArrayDimensions > 0) {
             *      int[] rankSpecfier = new int[returnType.ArrayDimensions];
             *      for (int i = 0; i < returnType.ArrayDimensions; i++) {
             *              rankSpecfier[i] = returnType.GetDimension (i);
             *      }
             *      result.RankSpecifier = rankSpecfier;
             * }*/
            return(result);
        }
 protected internal TypeExpression(NRefactory.MemberType memberType, IScope scope, INRefcatoryExpressionVisitor visitor)
     : this(memberType, TypeDescription.Memeber, scope, visitor)
 {
     InternalType = memberType.GetActualType();
 }
Esempio n. 3
0
		public static AstType ConvertToTypeReference (this MonoDevelop.Projects.Dom.IReturnType returnType)
		{
			string primitiveType;
			if (TypeTable.TryGetValue (returnType.DecoratedFullName, out primitiveType))
				return new PrimitiveType (primitiveType);
			
			AstType result = null;
			if (!string.IsNullOrEmpty (returnType.Namespace))
				result = new SimpleType (returnType.Namespace);
			foreach (var part in returnType.Parts) {
				if (result == null) {
					var st = new SimpleType (part.Name);
					foreach (var type in part.GenericArguments.Select (ga => ConvertToTypeReference (ga)))
						st.AddChild (type, SimpleType.Roles.TypeArgument);
					result = st;
				} else {
					var mt = new ICSharpCode.NRefactory.CSharp.MemberType () {
						Target = result,
						MemberName = part.Name
					};
					foreach (var type in part.GenericArguments.Select (ga => ConvertToTypeReference (ga)))
						mt.AddChild (type, SimpleType.Roles.TypeArgument);
					result = mt;
				}
			}
			
			/*
			List<TypeReference> genericTypes = new List<TypeReference> ();
			foreach (MonoDevelop.Projects.Dom.IReturnType genericType in returnType.GenericArguments) {
				genericTypes.Add (ConvertToTypeReference (genericType));
			}
			TypeReference result = new AstType (returnType.FullName, genericTypes);
			result.IsKeyword = true;
			result.PointerNestingLevel = returnType.PointerNestingLevel;
			if (returnType.ArrayDimensions > 0) {
				int[] rankSpecfier = new int[returnType.ArrayDimensions];
				for (int i = 0; i < returnType.ArrayDimensions; i++) {
					rankSpecfier[i] = returnType.GetDimension (i);
				}
				result.RankSpecifier = rankSpecfier;
			}*/
			return result;
		}
Esempio n. 4
0
        internal static ITypeReference ConvertType(AstType type, ITypeDefinition parentTypeDefinition, IMethod parentMethodDefinition, UsingScope parentUsingScope, bool isInUsingDeclaration)
        {
            SimpleType s = type as SimpleType;

            if (s != null)
            {
                List <ITypeReference> typeArguments = new List <ITypeReference>();
                foreach (var ta in s.TypeArguments)
                {
                    typeArguments.Add(ConvertType(ta, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration));
                }
                if (typeArguments.Count == 0 && parentMethodDefinition != null)
                {
                    // SimpleTypeOrNamespaceReference doesn't support method type parameters,
                    // so we directly handle them here.
                    foreach (ITypeParameter tp in parentMethodDefinition.TypeParameters)
                    {
                        if (tp.Name == s.Identifier)
                        {
                            return(tp);
                        }
                    }
                }
                return(new SimpleTypeOrNamespaceReference(s.Identifier, typeArguments, parentTypeDefinition, parentUsingScope, isInUsingDeclaration));
            }

            PrimitiveType p = type as PrimitiveType;

            if (p != null)
            {
                switch (p.Keyword)
                {
                case "string":
                    return(KnownTypeReference.String);

                case "int":
                    return(KnownTypeReference.Int32);

                case "uint":
                    return(KnownTypeReference.UInt32);

                case "object":
                    return(KnownTypeReference.Object);

                case "bool":
                    return(KnownTypeReference.Boolean);

                case "sbyte":
                    return(KnownTypeReference.SByte);

                case "byte":
                    return(KnownTypeReference.Byte);

                case "short":
                    return(KnownTypeReference.Int16);

                case "ushort":
                    return(KnownTypeReference.UInt16);

                case "long":
                    return(KnownTypeReference.Int64);

                case "ulong":
                    return(KnownTypeReference.UInt64);

                case "float":
                    return(KnownTypeReference.Single);

                case "double":
                    return(KnownTypeReference.Double);

                case "decimal":
                    return(ReflectionHelper.ToTypeReference(TypeCode.Decimal));

                case "char":
                    return(KnownTypeReference.Char);

                case "void":
                    return(KnownTypeReference.Void);

                default:
                    return(SharedTypes.UnknownType);
                }
            }
            MemberType m = type as MemberType;

            if (m != null)
            {
                ITypeOrNamespaceReference t;
                if (m.IsDoubleColon)
                {
                    SimpleType st = m.Target as SimpleType;
                    if (st != null)
                    {
                        t = new AliasNamespaceReference(st.Identifier, parentUsingScope);
                    }
                    else
                    {
                        t = null;
                    }
                }
                else
                {
                    t = ConvertType(m.Target, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration) as ITypeOrNamespaceReference;
                }
                if (t == null)
                {
                    return(SharedTypes.UnknownType);
                }
                List <ITypeReference> typeArguments = new List <ITypeReference>();
                foreach (var ta in m.TypeArguments)
                {
                    typeArguments.Add(ConvertType(ta, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration));
                }
                return(new MemberTypeOrNamespaceReference(t, m.MemberName, typeArguments, parentTypeDefinition, parentUsingScope));
            }
            ComposedType c = type as ComposedType;

            if (c != null)
            {
                ITypeReference t = ConvertType(c.BaseType, parentTypeDefinition, parentMethodDefinition, parentUsingScope, isInUsingDeclaration);
                if (c.HasNullableSpecifier)
                {
                    t = NullableType.Create(t);
                }
                for (int i = 0; i < c.PointerRank; i++)
                {
                    t = PointerTypeReference.Create(t);
                }
                foreach (var a in c.ArraySpecifiers.Reverse())
                {
                    t = ArrayTypeReference.Create(t, a.Dimensions);
                }
                return(t);
            }
            Debug.WriteLine("Unknown node used as type: " + type);
            return(SharedTypes.UnknownType);
        }
Esempio n. 5
0
        protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
        {
            MemberType o = other as MemberType;

            return(o != null && this.IsDoubleColon == o.IsDoubleColon && MatchString(this.MemberName, o.MemberName) && this.Target.DoMatch(o.Target, match));
        }
 void IAstVisitor.VisitMemberType(MemberType memberType)
 {
     Visit(EnterMemberType, LeaveMemberType, memberType);
 }
Esempio n. 7
0
 public static TypeExpression TypeExpression(NRefactory.MemberType memberType, IScope scope, INRefcatoryExpressionVisitor visitor)
 {
     return(new TypeExpression(memberType, scope, visitor));
 }
Esempio n. 8
0
 public override object VisitMemberType(ICSharpCode.NRefactory.CSharp.MemberType memberType, object data)
 {
     possibleTypeReferences.Add(memberType);
     return(null);
 }
Esempio n. 9
0
 public virtual S VisitMemberType(MemberType memberType, T data)
 {
     return(VisitChildren(memberType, data));
 }
 public virtual S VisitMemberType(MemberType memberType, T data)
 {
     throw new NotImplementedException();
 }
Esempio n. 11
0
 public override AstExpression VisitMemberType(NRefactory.MemberType memberType, IScope scope)
 {
     return(AstExpression.TypeExpression(memberType, scope, this));
 }