Exemplo n.º 1
0
        /// <summary>
        /// Create the field in the given type
        /// </summary>
        public void Create(NetTypeDefinition declaringType, TargetFramework target)
        {
            // Do not add private fields
            if ((javaField.AccessFlags & FieldAccessFlags.Private) != 0)
            {
                return;
            }

            // Find documentation
            var docClass = declaringTypeBuilder.Documentation;

            docField = (docClass != null) ? docClass.Fields.FirstOrDefault(x => x.Name == javaField.Name) : null;

            //var fieldType = declaringType.IsEnum ? target.TypeNameMap.GetByType(typeof(int)) : javaField.Signature.Resolve(target, declaringTypeBuilder);
            NetTypeReference fieldType;

            if (!javaField.Signature.TryResolve(target, declaringTypeBuilder, false, out fieldType))
            {
                return;
            }

            //var fieldTypeIsValueType = declaringType.IsEnum ? true : javaField.FieldType.
            var name = declaringTypeBuilder.GetFieldName(javaField);

            field                  = new NetFieldDefinition();
            field.Name             = name;
            field.OriginalJavaName = javaField.Name;
            field.FieldType        = fieldType;
            field.Attributes       = GetAttributes(javaField, false);
            field.Description      = (docField != null) ? docField.Description : null;
            declaringType.Fields.Add(field);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Create code for the given field.
        /// </summary>
        private void CreateFieldCode(NetFieldDefinition field)
        {
            CreateComments(field.Description, field.OriginalJavaName);
            CreateAttributes(field.CustomAttributes, field);
            writer.Write(indent);
            var isEnum = field.DeclaringType.IsEnum;

            //if (!isEnum)
            {
                writer.Write(Convert(field, field.Attributes));
                writer.Write(CreateRef(field.FieldType, false, true, true, false, field.DeclaringType, target));
                writer.Write(" ");
            }
            writer.Write(field.Name);

            if (field.DefaultValue != null)
            {
                writer.Write(" = ");
                writer.Write(ConvertPrimitive(field.DefaultValue, field.FieldType));
            }

            //writer.Write(isEnum ? "," : ";");
            writer.Write(";");

            writer.WriteLine();
        }
Exemplo n.º 3
0
        /// <summary>
        /// Convert field attributes to member attributes
        /// </summary>
        private static string Convert(NetFieldDefinition field, FieldAttributes source)
        {
            var result = string.Empty;

            switch (source & FieldAttributes.FieldAccessMask)
            {
            case FieldAttributes.Private:
                result = "private ";
                break;

            case FieldAttributes.Assembly:
                result = "internal ";
                break;

            case FieldAttributes.Family:
            case FieldAttributes.FamANDAssem:
                result = "protected ";
                break;

            case FieldAttributes.FamORAssem:
                result = "protected internal ";
                break;

            default:
                result = "public ";
                break;
            }

            if (field.DefaultValue != null)
            {
                var type = field.FieldType;
                if (type.IsBoolean() || type.IsChar() || type.IsByte() || type.IsSByte() ||
                    type.IsInt16() || type.IsInt32() || type.IsInt64() || type.IsSingle() || type.IsDouble() || type.IsString())
                {
                    const FieldAttributes mask = FieldAttributes.Static | FieldAttributes.InitOnly;
                    if ((source & mask) == mask)
                    {
                        return(result + "const ");
                    }
                }
            }

            if ((source & FieldAttributes.Static) != 0)
            {
                result += "static ";
            }
            if ((source & FieldAttributes.Literal) != 0)
            {
                result += "const ";
            }
            if ((source & FieldAttributes.InitOnly) != 0)
            {
                result += "readonly ";
            }
            return(result);
        }
Exemplo n.º 4
0
 private static void RenameClashingField(NetFieldDefinition field)
 {
     field.Name = "@" + char.ToLower(field.Name[0]) + field.Name.Substring(1);
 }