forked from dotnet/java-interop
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParameterNameGenerator.java
More file actions
103 lines (89 loc) · 2.73 KB
/
ParameterNameGenerator.java
File metadata and controls
103 lines (89 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.microsoft.android;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
import com.microsoft.android.ast.*;
import com.microsoft.android.util.Parameter;
public class ParameterNameGenerator implements AutoCloseable {
final PrintStream output;
public ParameterNameGenerator(final String output) throws FileNotFoundException, UnsupportedEncodingException {
if (output == null)
this.output = System.out;
else {
final File file = new File(output);
final File parent = file.getParentFile();
if (parent != null) {
parent.mkdirs();
}
this.output = new PrintStream(file, "UTF-8");
}
}
public ParameterNameGenerator(final PrintStream output) {
Parameter.requireNotNull("output", output);
this.output = output;
}
public void close() {
if (output != System.out) {
output.flush();
output.close();
}
}
public final void writePackages(final JniPackagesInfo packages) {
Parameter.requireNotNull("packages", packages);
boolean first = true;
for (JniPackageInfo packageInfo : packages.getSortedPackages()) {
if (!first)
output.println();
first = false;
writePackage(packageInfo);
}
}
private final void writePackage(final JniPackageInfo packageInfo) {
if (packageInfo.getPackageName().length() > 0) {
output.println("package " + packageInfo.getPackageName());
}
output.println(";---------------------------------------");
for (JniTypeInfo type : packageInfo.getSortedTypes()) {
writeType(type);
}
}
private final void writeType(JniTypeInfo type) {
output.println(" " + type.getTypeKind() + " " + type.getName());
final List<JniMethodBaseInfo> sortedMethods = type.getSortedMembers()
.stream()
.filter(member -> member.isMethod() || member.isConstructor())
.map(member -> (JniMethodBaseInfo) member)
.filter(method -> method.getParameters().size() > 0)
.collect(Collectors.toList());
for (JniMethodBaseInfo method : sortedMethods) {
output.print(" ");
if (method.isMethod()) {
JniMethodInfo m = (JniMethodInfo) method;
Collection<String> typeParameters = m.getTypeParameters();
if (typeParameters.size() > 0) {
output.print("<");
output.print(String.join(", ", typeParameters));
output.print("> ");
}
}
output.print(method.getName());
output.print("(");
boolean first = true;
for (JniParameterInfo parameter : method.getParameters()) {
if (!first) {
output.print(", ");
}
first = false;
output.print(parameter.javaType);
output.print(" ");
output.print(parameter.name);
}
output.print(")");
output.println();
}
}
}