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); }
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); }
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); } }