public void GetArguments() { SignatureParser parser = new SignatureParser(); Assert.AreEqual(0, parser.GetArgumentTypes("()I").Length); TypeReference[] types = parser.GetArgumentTypes("(java.lang.Object;)Z"); Assert.AreEqual(1, types.Length); Assert.AreEqual("java.lang.Object", types[0].Type); types = parser.GetArgumentTypes("([java.lang.String;)Ljava.lang.Package;"); Assert.AreEqual("java.lang.String", types[0].Type); Assert.AreEqual(new int[1], types[0].RankSpecifier); types = parser.GetArgumentTypes("(DD)V"); Assert.AreEqual(2, types.Length); Assert.AreEqual("java.lang.Double", types[0].Type); Assert.AreEqual("java.lang.Double", types[1].Type); types = parser.GetArgumentTypes("(II[BI)V"); Assert.AreEqual(4, types.Length); Assert.AreEqual("java.lang.Integer", types[0].Type); Assert.AreEqual("java.lang.Integer", types[1].Type); Assert.AreEqual("java.lang.Byte", types[2].Type); Assert.AreEqual(new int[1], types[2].RankSpecifier); Assert.AreEqual("java.lang.Integer", types[3].Type); }
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); }