private TypeInfo getTypeInfo(AsmType type)
        {
            switch (type.getSort())
            {
            case AsmType.ARRAY:
                var elt = getTypeInfo(type.getElementType());
                for (int i = type.getDimensions(); i > 0; --i)
                {
                    elt = elt.ArrayType;
                }
                return(elt);

            case AsmType.BOOLEAN:
                return(this.Library.BooleanType);

            case AsmType.BYTE:
                return(this.Library.ByteType);

            case AsmType.CHAR:
                return(this.Library.CharType);

            case AsmType.DOUBLE:
                return(this.Library.DoubleType);

            case AsmType.FLOAT:
                return(this.Library.FloatType);

            case AsmType.INT:
                return(this.Library.IntType);

            case AsmType.LONG:
                return(this.Library.LongType);

            case AsmType.SHORT:
                return(this.Library.ShortType);

            case AsmType.VOID:
                return(this.Library.VoidType);

            default:
                var result = typeSystem.getType(type.getInternalName());
                if (hasGenericArguments(result))
                {
                    result = result.RawType;
                }
                return(result);
            }
        }
     : super(AnnotationArgumentKind.Type) {
     this.type = type;
 }
 RawTypeValue(AsmType type)
     : super(AnnotationArgumentKind.Type) {
     : super(AnnotationArgumentKind.Enum) {
     this.type = type;
     this.name = name;
 }
 RawEnumValue(AsmType type, String name)
     : super(AnnotationArgumentKind.Enum) {
        private TypeInfo getTypeInfo(AsmType type) {
            switch (type.getSort()) {
            case AsmType.ARRAY:
                var elt = getTypeInfo(type.getElementType());
                for (int i = type.getDimensions(); i > 0; --i) {
                    elt = elt.ArrayType;
                }
                return elt;
                
            case AsmType.BOOLEAN:
                return this.Library.BooleanType;
                
            case AsmType.BYTE:
                return this.Library.ByteType;

            case AsmType.CHAR:
                return this.Library.CharType;
                
            case AsmType.DOUBLE:
                return this.Library.DoubleType;
                
            case AsmType.FLOAT:
                return this.Library.FloatType;
                
            case AsmType.INT:
                return this.Library.IntType;
                
            case AsmType.LONG:
                return this.Library.LongType;
                
            case AsmType.SHORT:
                return this.Library.ShortType;
                
            case AsmType.VOID:
                return this.Library.VoidType;

            default:
                var result = typeSystem.getType(type.getInternalName());
				if (hasGenericArguments(result)) {
					result = result.RawType;
				}
                return result;
            }
        }
     : super(AnnotationArgumentKind.Annotation) {
     this.type = type;
     this.runtimeVisible = runtimeVisible;
     this.arguments = new HashMap<String, RawAnnotationArgument>();
 }
 RawAnnotationValue(AsmType type, bool runtimeVisible)
     : super(AnnotationArgumentKind.Annotation) {