Exemple #1
0
        public static DomReturnType ConvertToReturnType(this TypeReference typeRef)
        {
            if (typeRef == null)
            {
                return(null);
            }
            DomReturnType result;

            if (typeRef is InnerClassTypeReference)
            {
                InnerClassTypeReference innerTypeRef = (InnerClassTypeReference)typeRef;
                result = innerTypeRef.BaseType.ConvertToReturnType();
                result.Parts.Add(new ReturnTypePart(typeRef.Type));
            }
            else
            {
                result = new DomReturnType(typeRef.Type);
            }
            foreach (TypeReference genericArgument in typeRef.GenericTypes)
            {
                result.AddTypeParameter(ConvertToReturnType(genericArgument));
            }
            result.PointerNestingLevel = typeRef.PointerNestingLevel;
            if (typeRef.IsArrayType)
            {
                result.ArrayDimensions = typeRef.RankSpecifier.Length;
                for (int i = 0; i < typeRef.RankSpecifier.Length; i++)
                {
                    result.SetDimension(i, typeRef.RankSpecifier[i]);
                }
            }
            return(result);
        }
 public void InnerClassTypeReferencTest()
 {
     InnerClassTypeReference ictr = new InnerClassTypeReference(
     new TypeReference("OuterClass", new List<TypeReference> { new TypeReference("String") }),
         "InnerClass",
     new List<TypeReference> { new TypeReference("Int32"), new TypeReference("Int64") });
     Assert.AreEqual("OuterClass<String>+InnerClass<Int32,Int64>", ictr.ToString());
     CodeTypeOfExpression result = (CodeTypeOfExpression)new TypeOfExpression(ictr).AcceptVisitor(new CodeDomVisitor(), null);
     Assert.AreEqual("OuterClass`1+InnerClass`2", result.Type.BaseType);
     Assert.AreEqual(3, result.Type.TypeArguments.Count);
 }
Exemple #3
0
        public void CSharpNestedGenericFieldReferenceExpressionTest()
        {
            FieldReferenceExpression fre = ParseUtilCSharp.ParseExpression <FieldReferenceExpression>("MyType<string>.InnerClass<int>.myField");

            Assert.AreEqual("myField", fre.FieldName);
            Assert.IsTrue(fre.TargetObject is TypeReferenceExpression);
            InnerClassTypeReference ic = (InnerClassTypeReference)((TypeReferenceExpression)fre.TargetObject).TypeReference;

            Assert.AreEqual("InnerClass", ic.Type);
            Assert.AreEqual(1, ic.GenericTypes.Count);
            Assert.AreEqual("System.Int32", ic.GenericTypes[0].SystemType);
            Assert.AreEqual("MyType", ic.BaseType.Type);
            Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
            Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].SystemType);
        }
Exemple #4
0
        public void VBNestedGenericTypeOfExpressionTest()
        {
            TypeOfExpression        toe = ParseUtilVBNet.ParseExpression <TypeOfExpression>("GetType(MyType(Of string).InnerClass(of integer).InnerInnerClass)");
            InnerClassTypeReference ic  = (InnerClassTypeReference)toe.TypeReference;

            Assert.AreEqual("InnerInnerClass", ic.Type);
            Assert.AreEqual(0, ic.GenericTypes.Count);
            ic = (InnerClassTypeReference)ic.BaseType;
            Assert.AreEqual("InnerClass", ic.Type);
            Assert.AreEqual(1, ic.GenericTypes.Count);
            Assert.AreEqual("System.Int32", ic.GenericTypes[0].Type);
            Assert.AreEqual("MyType", ic.BaseType.Type);
            Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
            Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].Type);
        }
Exemple #5
0
        public void CSharpNestedGenericTypeOfExpressionTest()
        {
            TypeOfExpression        toe = ParseUtilCSharp.ParseExpression <TypeOfExpression>("typeof(MyType<string>.InnerClass<int>.InnerInnerClass)");
            InnerClassTypeReference ic  = (InnerClassTypeReference)toe.TypeReference;

            Assert.AreEqual("InnerInnerClass", ic.Type);
            Assert.AreEqual(0, ic.GenericTypes.Count);
            ic = (InnerClassTypeReference)ic.BaseType;
            Assert.AreEqual("InnerClass", ic.Type);
            Assert.AreEqual(1, ic.GenericTypes.Count);
            Assert.AreEqual("System.Int32", ic.GenericTypes[0].Type);
            Assert.AreEqual("MyType", ic.BaseType.Type);
            Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
            Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].Type);
        }
        public void CSharpNestedGenericLocalVariableDeclarationTest()
        {
            LocalVariableDeclaration lvd = ParseUtilCSharp.ParseStatement <LocalVariableDeclaration>("MyType<string>.InnerClass<int>.InnerInnerClass a;");

            Assert.AreEqual(1, lvd.Variables.Count);
            InnerClassTypeReference ic = (InnerClassTypeReference)lvd.GetTypeForVariable(0);

            Assert.AreEqual("InnerInnerClass", ic.Type);
            Assert.AreEqual(0, ic.GenericTypes.Count);
            ic = (InnerClassTypeReference)ic.BaseType;
            Assert.AreEqual("InnerClass", ic.Type);
            Assert.AreEqual(1, ic.GenericTypes.Count);
            Assert.AreEqual("System.Int32", ic.GenericTypes[0].Type);
            Assert.AreEqual("MyType", ic.BaseType.Type);
            Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
            Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].Type);
        }
        public void VBNetNestedGenericLocalVariableDeclarationTest()
        {
            LocalVariableDeclaration lvd = ParseUtilVBNet.ParseStatement <LocalVariableDeclaration>("Dim a as MyType(of string).InnerClass(of integer).InnerInnerClass");

            Assert.AreEqual(1, lvd.Variables.Count);
            InnerClassTypeReference ic = (InnerClassTypeReference)lvd.GetTypeForVariable(0);

            Assert.AreEqual("InnerInnerClass", ic.Type);
            Assert.AreEqual(0, ic.GenericTypes.Count);
            ic = (InnerClassTypeReference)ic.BaseType;
            Assert.AreEqual("InnerClass", ic.Type);
            Assert.AreEqual(1, ic.GenericTypes.Count);
            Assert.AreEqual("System.Int32", ic.GenericTypes[0].Type);
            Assert.AreEqual("MyType", ic.BaseType.Type);
            Assert.AreEqual(1, ic.BaseType.GenericTypes.Count);
            Assert.AreEqual("System.String", ic.BaseType.GenericTypes[0].Type);
        }
        public void InvocationOnGenericInnerClassInGenericType()
        {
            InvocationExpression      expr = ParseUtilCSharp.ParseExpression <InvocationExpression>("A<T>.B.C<U>.Foo()");
            MemberReferenceExpression mre  = (MemberReferenceExpression)expr.TargetObject;

            Assert.AreEqual("Foo", mre.MemberName);
            TypeReferenceExpression tre  = (TypeReferenceExpression)mre.TargetObject;
            InnerClassTypeReference ictr = (InnerClassTypeReference)tre.TypeReference;

            Assert.AreEqual("B.C", ictr.Type);
            Assert.AreEqual(1, ictr.GenericTypes.Count);
            Assert.AreEqual("U", ictr.GenericTypes[0].Type);

            Assert.AreEqual("A", ictr.BaseType.Type);
            Assert.AreEqual(1, ictr.BaseType.GenericTypes.Count);
            Assert.AreEqual("T", ictr.BaseType.GenericTypes[0].Type);
        }
Exemple #9
0
        private TypeReferenceExpression GetTypeReferenceExpression(Expression expr, List <TypeReference> genericTypes)
        {
            TypeReferenceExpression tre = expr as TypeReferenceExpression;

            if (tre != null)
            {
                return(new TypeReferenceExpression(new TypeReference(tre.TypeReference.Type, tre.TypeReference.PointerNestingLevel, tre.TypeReference.RankSpecifier, genericTypes)));
            }
            StringBuilder b = new StringBuilder();

            if (!WriteFullTypeName(b, expr))
            {
                // there is some TypeReferenceExpression hidden in the expression
                while (expr is FieldReferenceExpression)
                {
                    expr = ((FieldReferenceExpression)expr).TargetObject;
                }
                tre = expr as TypeReferenceExpression;
                if (tre != null)
                {
                    TypeReference typeRef = tre.TypeReference;
                    if (typeRef.GenericTypes.Count == 0)
                    {
                        typeRef       = typeRef.Clone();
                        typeRef.Type += "." + b.ToString();
                        typeRef.GenericTypes.AddRange(genericTypes);
                    }
                    else
                    {
                        typeRef = new InnerClassTypeReference(typeRef, b.ToString(), genericTypes);
                    }
                    return(new TypeReferenceExpression(typeRef));
                }
            }
            return(new TypeReferenceExpression(new TypeReference(b.ToString(), 0, null, genericTypes)));
        }
 public virtual object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data)
 {
     throw new global::System.NotImplementedException("InnerClassTypeReference");
 }
 public object VisitInnerClassTypeReference(InnerClassTypeReference typeReference, object data)
 {
     return(ConvertTypeReference(typeReference));
 }
 public virtual object Visit(InnerClassTypeReference innerClassTypeReference, object data)
 {
     Debug.Assert(innerClassTypeReference != null);
     return(data);
 }
Exemple #13
0
 private void TypeName(out TypeReference typeRef, bool canBeUnbound)
 {
     List<TypeReference> types = null;
     string val = null;
     string str2;
     if ((this.la.kind == 1) && (this.Peek(1).kind == 10))
     {
         base.lexer.NextToken();
         val = this.t.val;
         base.Expect(10);
     }
     this.Qualident(out str2);
     if (this.la.kind == 0x17)
     {
         this.TypeArgumentList(out types, canBeUnbound);
     }
     if (val == null)
     {
         typeRef = new TypeReference(str2, types);
     }
     else if (val == "global")
     {
         typeRef = new TypeReference(str2, types);
         typeRef.IsGlobal = true;
     }
     else
     {
         typeRef = new TypeReference(val + "." + str2, types);
     }
     while (this.DotAndIdent())
     {
         base.Expect(15);
         types = null;
         this.Qualident(out str2);
         if (this.la.kind == 0x17)
         {
             this.TypeArgumentList(out types, canBeUnbound);
         }
         typeRef = new InnerClassTypeReference(typeRef, str2, types);
     }
 }
		public sealed override object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) {
			BeginVisit(innerClassTypeReference);
			object result = TrackedVisitInnerClassTypeReference(innerClassTypeReference, data);
			EndVisit(innerClassTypeReference);
			return result;
		}
Exemple #15
0
	void TypeName(
#line  2292 "cs.ATG" 
out TypeReference typeRef, bool canBeUnbound) {

#line  2293 "cs.ATG" 
		List<TypeReference> typeArguments = null;
		string alias = null;
		string qualident;
		Location startLocation = la.Location;
		
		if (
#line  2299 "cs.ATG" 
IdentAndDoubleColon()) {
			Identifier();

#line  2300 "cs.ATG" 
			alias = t.val; 
			Expect(10);
		}
		Qualident(
#line  2303 "cs.ATG" 
out qualident);
		if (la.kind == 23) {
			TypeArgumentList(
#line  2304 "cs.ATG" 
out typeArguments, canBeUnbound);
		}

#line  2306 "cs.ATG" 
		if (alias == null) {
		typeRef = new TypeReference(qualident, typeArguments);
		} else if (alias == "global") {
			typeRef = new TypeReference(qualident, typeArguments);
			typeRef.IsGlobal = true;
		} else {
			typeRef = new TypeReference(alias + "." + qualident, typeArguments);
		}
		
		while (
#line  2315 "cs.ATG" 
DotAndIdent()) {
			Expect(15);

#line  2316 "cs.ATG" 
			typeArguments = null; 
			Qualident(
#line  2317 "cs.ATG" 
out qualident);
			if (la.kind == 23) {
				TypeArgumentList(
#line  2318 "cs.ATG" 
out typeArguments, canBeUnbound);
			}

#line  2319 "cs.ATG" 
			typeRef = new InnerClassTypeReference(typeRef, qualident, typeArguments); 
		}

#line  2321 "cs.ATG" 
		typeRef.StartLocation = startLocation; 
	}
		public virtual object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) {
			Debug.Assert((innerClassTypeReference != null));
			Debug.Assert((innerClassTypeReference.GenericTypes != null));
			Debug.Assert((innerClassTypeReference.BaseType != null));
			for (int i = 0; i < innerClassTypeReference.GenericTypes.Count; i++) {
				TypeReference o = innerClassTypeReference.GenericTypes[i];
				Debug.Assert(o != null);
				nodeStack.Push(o);
				o.AcceptVisitor(this, data);
				o = (TypeReference)nodeStack.Pop();
				if (o == null)
					innerClassTypeReference.GenericTypes.RemoveAt(i--);
				else
					innerClassTypeReference.GenericTypes[i] = o;
			}
			nodeStack.Push(innerClassTypeReference.BaseType);
			innerClassTypeReference.BaseType.AcceptVisitor(this, data);
			innerClassTypeReference.BaseType = ((TypeReference)(nodeStack.Pop()));
			return null;
		}
		public virtual object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) {
			Debug.Assert((innerClassTypeReference != null));
			Debug.Assert((innerClassTypeReference.GenericTypes != null));
			Debug.Assert((innerClassTypeReference.BaseType != null));
			foreach (TypeReference o in innerClassTypeReference.GenericTypes) {
				Debug.Assert(o != null);
				o.AcceptVisitor(this, data);
			}
			return innerClassTypeReference.BaseType.AcceptVisitor(this, data);
		}
 public object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data)
 {
     throw new NotImplementedException();
 }
		public virtual object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) {
			throw new global::System.NotImplementedException("InnerClassTypeReference");
		}
Exemple #20
0
	void NonArrayTypeName(
#line  2420 "VBNET.ATG" 
out TypeReference typeref, bool canBeUnbound) {

#line  2422 "VBNET.ATG" 
		string name;
		typeref = null;
		bool isGlobal = false;
		
		if (StartOf(10)) {
			if (la.kind == 117) {
				lexer.NextToken();
				Expect(16);

#line  2427 "VBNET.ATG" 
				isGlobal = true; 
			}
			QualIdentAndTypeArguments(
#line  2428 "VBNET.ATG" 
out typeref, canBeUnbound);

#line  2429 "VBNET.ATG" 
			typeref.IsGlobal = isGlobal; 
			while (la.kind == 16) {
				lexer.NextToken();

#line  2430 "VBNET.ATG" 
				TypeReference nestedTypeRef; 
				QualIdentAndTypeArguments(
#line  2431 "VBNET.ATG" 
out nestedTypeRef, canBeUnbound);

#line  2432 "VBNET.ATG" 
				typeref = new InnerClassTypeReference(typeref, nestedTypeRef.Type, nestedTypeRef.GenericTypes); 
			}
		} else if (la.kind == 154) {
			lexer.NextToken();

#line  2435 "VBNET.ATG" 
			typeref = new TypeReference("System.Object", true); 
			if (la.kind == 21) {
				lexer.NextToken();

#line  2439 "VBNET.ATG" 
				List<TypeReference> typeArguments = new List<TypeReference>(1);
				if (typeref != null) typeArguments.Add(typeref);
				typeref = new TypeReference("System.Nullable", typeArguments) { IsKeyword = true };
				
			}
		} else if (StartOf(11)) {
			PrimitiveTypeName(
#line  2445 "VBNET.ATG" 
out name);

#line  2445 "VBNET.ATG" 
			typeref = new TypeReference(name, true); 
			if (la.kind == 21) {
				lexer.NextToken();

#line  2449 "VBNET.ATG" 
				List<TypeReference> typeArguments = new List<TypeReference>(1);
				if (typeref != null) typeArguments.Add(typeref);
				typeref = new TypeReference("System.Nullable", typeArguments) { IsKeyword = true };
				
			}
		} else SynErr(236);
	}
Exemple #21
0
 private TypeReferenceExpression GetTypeReferenceExpression(Expression expr, List<TypeReference> genericTypes)
 {
     TypeReferenceExpression expression = expr as TypeReferenceExpression;
     if (expression != null)
     {
         return new TypeReferenceExpression(new TypeReference(expression.TypeReference.Type, expression.TypeReference.PointerNestingLevel, expression.TypeReference.RankSpecifier, genericTypes));
     }
     StringBuilder b = new StringBuilder();
     if (!this.WriteFullTypeName(b, expr))
     {
         while (expr is FieldReferenceExpression)
         {
             expr = ((FieldReferenceExpression) expr).TargetObject;
         }
         expression = expr as TypeReferenceExpression;
         if (expression != null)
         {
             TypeReference typeReference = expression.TypeReference;
             if (typeReference.GenericTypes.Count == 0)
             {
                 typeReference = typeReference.Clone();
                 typeReference.Type = typeReference.Type + "." + b.ToString();
                 typeReference.GenericTypes.AddRange(genericTypes);
             }
             else
             {
                 typeReference = new InnerClassTypeReference(typeReference, b.ToString(), genericTypes);
             }
             return new TypeReferenceExpression(typeReference);
         }
     }
     return new TypeReferenceExpression(new TypeReference(b.ToString(), 0, null, genericTypes));
 }
Exemple #22
0
 public override object VisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data)
 {
     return(base.VisitInnerClassTypeReference(innerClassTypeReference, data));
 }
		public virtual object TrackedVisitInnerClassTypeReference(InnerClassTypeReference innerClassTypeReference, object data) {
			return base.VisitInnerClassTypeReference(innerClassTypeReference, data);
		}