Example #1
0
        internal IType FindType(string signature)
        {
            Contract.Requires <ArgumentNullException>(signature != null, "signature");
            Contract.Requires <ArgumentException>(!string.IsNullOrEmpty(signature));

            switch (signature[0])
            {
            case 'Z':
                return(PrimitiveTypes.Boolean);

            case 'B':
                return(PrimitiveTypes.Byte);

            case 'C':
                return(PrimitiveTypes.Char);

            case 'D':
                return(PrimitiveTypes.Double);

            case 'F':
                return(PrimitiveTypes.Float);

            case 'I':
                return(PrimitiveTypes.Integer);

            case 'J':
                return(PrimitiveTypes.Long);

            case 'S':
                return(PrimitiveTypes.Short);

            case 'V':
                return(PrimitiveTypes.Void);

            //case '[':
            //    return GetArrayType(FindType(signature.Substring(1)));
            //case 'L':
            //    return GetClassesByName(signature).Single();
            default:
                Types.ReferenceTypeData[] classes;
                DebugErrorHandler.ThrowOnFailure(ProtocolService.GetClassesBySignature(out classes, signature));
                if (classes.Length == 1)
                {
                    return(GetMirrorOf(classes[0]));
                }
                else if (classes.Length == 0)
                {
                    if (signature[0] == '[')
                    {
                        return(new UnloadedArrayType(this, signature));
                    }
                    else
                    {
                        return(new UnloadedReferenceType(this, signature));
                    }
                }
                else
                {
                    throw new ArgumentException("Could not resolve the signature to a single type.");
                }
            }
        }