public void GetReturnType() { SignatureParser parser = new SignatureParser(); TypeReference typeReference = parser.GetReturnType("()I"); Assert.AreEqual("java.lang.Integer", typeReference.Type); Assert.IsNull(typeReference.RankSpecifier); typeReference = parser.GetReturnType("()[B"); Assert.AreEqual("java.lang.Byte", typeReference.Type); Assert.AreEqual(new int[1], typeReference.RankSpecifier); Assert.AreEqual("java.lang.Boolean", parser.GetReturnType("(Ljava.lang.Object;)Z").Type); typeReference = parser.GetReturnType("(C)Ljava.lang.Character$UnicodeBlock;"); Assert.AreEqual("java.lang.Character.UnicodeBlock", typeReference.Type); typeReference = parser.GetReturnType("(Ljava.lang.String;)Ljava.lang.Package;"); Assert.AreEqual("java.lang.Package", typeReference.Type); typeReference = parser.GetReturnType("()[Ljava.lang.Package;"); Assert.AreEqual("java.lang.Package", typeReference.Type); Assert.AreEqual(new int[1], typeReference.RankSpecifier); }
private TypeDeclaration GetTypeDeclaration(ClassFile clazz) { TypeDeclaration typeDeclaration = new TypeDeclaration(Modifiers.None, null); if (clazz.IsInterface) { typeDeclaration.Type = ClassType.Interface; } else { typeDeclaration.Modifier = Modifiers.Abstract; } typeDeclaration.Name = clazz.Name; if (clazz.Name.IndexOf("$") == -1) { typeDeclaration.Name = GetTypeName(clazz.Name); } foreach (ClassFile.Method method in clazz.Methods) { if (!(method.IsPublic || method.IsProtected)) { continue; } ParametrizedNode methodDeclaration; if (method.Name == "<init>") { methodDeclaration = new ConstructorDeclaration(typeDeclaration.Name, Modifiers.Public, null, null); } else { TypeReference returnType = sigParser.GetReturnType(method.Signature); methodDeclaration = new MethodDeclaration(method.Name, Modifiers.None, returnType, null, null); if (method.IsAbstract) { methodDeclaration.Modifier |= Modifiers.Abstract; } methodDeclaration.Modifier |= Modifiers.Public; } methodDeclaration.Parent = typeDeclaration; if (IncludeParamters) { TypeReference[] arguments = sigParser.GetArgumentTypes(method.Signature); int i = 1; foreach (TypeReference typeRef in arguments) { ParameterDeclarationExpression param = new ParameterDeclarationExpression(typeRef, "parameter" + i++.ToString()); methodDeclaration.Parameters.Add(param); } } typeDeclaration.Children.Add(methodDeclaration); } foreach (ClassFile.Field field in clazz.Fields) { if (!field.IsPublic) { continue; } TypeReference type = sigParser.GetFieldType(field.Signature); FieldDeclaration fieldDeclaration = new FieldDeclaration(null, type, Modifiers.None); fieldDeclaration.Fields.Add(new VariableDeclaration(field.Name)); fieldDeclaration.Parent = typeDeclaration; typeDeclaration.Children.Add(fieldDeclaration); } if (clazz.Name != "java.lang.Object" && clazz.SuperClass != null && clazz.SuperClass != "java.lang.Object") { TypeReference baseType = new TypeReference(clazz.SuperClass.Replace("$", ".")); baseType.Kind = TypeReferenceKind.Extends; typeDeclaration.BaseTypes.Add(baseType); } foreach (ClassFile.ConstantPoolItemClass interfaceType in clazz.Interfaces) { TypeReference interf = new TypeReference(interfaceType.Name.Replace("$", ".")); interf.Kind = TypeReferenceKind.Implements; typeDeclaration.BaseTypes.Add(interf); } return(typeDeclaration); }