Ejemplo n.º 1
0
 private void GeneralModel(Type type, List <JavaClassModel> javaClassModelList)
 {
     foreach (var typeGenericTypeArgument in type.GenericTypeArguments)
     {
         if (typeGenericTypeArgument.BaseType.Name == "ValueType")
         {
             continue;
         }
         if (type.Name == "List`1")
         {
             //泛型 例如List<int>
             GeneralModel(typeGenericTypeArgument, javaClassModelList);
         }
         if (type.Name == "Dictionary`2")
         {
             //字典
             GeneralModel(typeGenericTypeArgument, javaClassModelList);
         }
         var javaClassModel = new JavaClassModel
         {
             ClassName    = typeGenericTypeArgument.Name,
             PackageName  = "caad.com.wechat",
             PropertyList = typeGenericTypeArgument.GetProperties().ToList()
         };
         javaClassModel.ImportList.Add("import org.codehaus.jackson.annotate.JsonProperty;");
         javaClassModelList.Add(javaClassModel);
     }
 }
        public static JavaClassModel ParseClass(JavaPackage package, XElement element)
        {
            var model = new JavaClassModel(
                javaPackage: package,
                javaNestedName: element.XGetAttribute("name"),
                javaVisibility: element.XGetAttribute("visibility"),
                javaAbstract: element.XGetAttributeAsBool("abstract"),
                javaFinal: element.XGetAttributeAsBool("final"),
                javaBaseType: element.XGetAttribute("extends"),
                javaBaseTypeGeneric: element.XGetAttribute("extends-generic-aware"),
                javaDeprecated: element.XGetAttribute("deprecated"),
                javaStatic: element.XGetAttributeAsBool("static"),
                jniSignature: element.XGetAttribute("jni-signature"),
                baseTypeJni: element.XGetAttribute("jni-extends")
                );

            if (element.XGetAttribute("merge.SourceFile") is string source && source.HasValue())
            {
                model.PropertyBag.Add("merge.SourceFile", source);
            }
            if (element.XGetAttribute("deprecated-since") is string dep && dep.HasValue())
            {
                model.PropertyBag.Add("deprecated-since", dep);
            }

            if (element.Element("typeParameters") is XElement tp)
            {
                ParseTypeParameters(model.TypeParameters, tp);
            }

            foreach (var child in element.Elements())
            {
                switch (child.Name.LocalName)
                {
                case "constructor":
                    model.Constructors.Add(ParseConstructor(model, child));
                    break;

                case "field":
                    model.Fields.Add(ParseField(model, child));
                    break;

                case "implements":
                    model.Implements.Add(ParseImplements(child));
                    break;

                case "method":
                    model.Methods.Add(ParseMethod(model, child));
                    break;
                }
            }

            return(model);
        }
Ejemplo n.º 3
0
        public static void GeneralJavaClass(string reportFilePath, JavaClassModel model)
        {
            var config =
                new TemplateServiceConfiguration
            {
                ReferenceResolver = new MyIReferenceResolver()
            };
            var service         = RazorEngineService.Create(config);
            var templateContent = File.ReadAllText(@"D:\DemoAggregate\DoNetToJava\Template\JavaClass.java");
            var writer          = new StringWriter();

            service.RunCompile(templateContent, "TemplateKey", writer, null, model);
            var content = writer.ToString();

            File.WriteAllText(reportFilePath, content);
        }
Ejemplo n.º 4
0
        public static JavaClassModel?ParseClass(TypeDefinition type, JavaTypeCollection collection)
        {
            // TODO: type parameters?
            var obs_attr = GetObsoleteAttribute(type.CustomAttributes);
            var reg_attr = GetRegisterAttribute(type.CustomAttributes);

            if (reg_attr is null)
            {
                return(null);
            }

            var encoded_fullname = ((string)reg_attr.ConstructorArguments [0].Value).Replace('/', '.');

            var(package, nested_name) = DecodeRegisterJavaFullName(encoded_fullname);

            var base_jni = GetBaseTypeJni(type);

            var model = new JavaClassModel(
                javaPackage: GetOrCreatePackage(collection, package, type.Namespace),
                javaNestedName: nested_name,
                javaVisibility: type.IsPublic || type.IsNestedPublic ? "public" : "protected internal",
                javaAbstract: type.IsAbstract,
                javaFinal: type.IsSealed,
                javaBaseType: base_jni.Replace('/', '.').Replace('$', '.'),
                javaBaseTypeGeneric: base_jni.Replace('/', '.').Replace('$', '.'),
                javaDeprecated: obs_attr != null ? "deprecated" : "not-deprecated",
                javaStatic: false,
                jniSignature: FormatJniSignature(package, nested_name),
                baseTypeJni: base_jni.HasValue() ? $"L{base_jni};" : string.Empty
                );;

            ParseImplementedInterfaces(type, model);

            foreach (var method in type.Methods.Where(m => !m.IsConstructor))
            {
                if (ParseMethod(method, model) is JavaMethodModel m)
                {
                    model.Methods.Add(m);
                }
            }

            return(model);
        }
        public static JavaClassModel CreateClass(JavaPackage javaPackage, string javaNestedName, string javaVisibility = "public", bool javaAbstract = false, bool javaFinal = false, string javaBaseType = "java.lang.Object", string javaBaseTypeGeneric = "java.lang.Object", string javaDeprecated = "not deprecated", bool javaStatic = false, string jniSignature = "", string baseTypeJni = "java/lang/Object")
        {
            if (string.IsNullOrWhiteSpace(jniSignature))
            {
                jniSignature = $"{(!string.IsNullOrWhiteSpace (javaPackage.Name) ? javaPackage.Name + "." : "")}{javaNestedName}".Replace('.', '/');
            }

            var klass = new JavaClassModel(
                javaPackage: javaPackage,
                javaNestedName: javaNestedName,
                javaVisibility: javaVisibility,
                javaAbstract: javaAbstract,
                javaFinal: javaFinal,
                javaBaseType: javaBaseType,
                javaBaseTypeGeneric: javaBaseTypeGeneric,
                javaDeprecated: javaDeprecated,
                javaStatic: javaStatic,
                jniSignature: jniSignature,
                baseTypeJni: baseTypeJni
                );

            return(klass);
        }
        private void OnNewCommand()
        {
            JavaClassModel = new JavaClassModel
            {
                Name = Name,
                DefaultFieldAction = FieldAction.Compile,
                DefaultMethodAction = MethodAction.Compile,
            };

            if (OnNewEvent != null)
            {
                OnNewEvent(this, null);
            }
        }