Skip to content

Commit 26a0870

Browse files
committed
remove writing of static initializers for interfaces, temp fix for faulty interfaces
1 parent 6c1727c commit 26a0870

File tree

2 files changed

+59
-10
lines changed

2 files changed

+59
-10
lines changed

dts-generator/src/main/java/com/telerik/Main.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ public class Main {
1616
public static void main(String[] args) throws Exception {
1717
InputParameters inputParameters = parseCommand(args);
1818

19+
long startTime = System.currentTimeMillis();
20+
1921
new Generator().start(inputParameters);
22+
23+
long stopTime = System.currentTimeMillis();
24+
long elapsedTime = stopTime - startTime;
25+
System.out.println("Generation of definitions took " + elapsedTime + "ms.");
2026
}
2127

2228
public static InputParameters parseCommand(String[] args) {

dts-generator/src/main/java/com/telerik/dts/DtsApi.java

Lines changed: 53 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -55,20 +55,22 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
5555
JavaClass currClass = javaClasses.get(i);
5656
currentFileClassname = currClass.getClassName();
5757
boolean isInterface = currClass.isInterface();
58+
boolean isAbstract = currClass.isAbstract();
5859

5960
this.indent = closePackage(this.prevClass, currClass);
6061
this.indent = openPackage(this.prevClass, currClass);
6162

6263
String tabs = getTabs(this.indent);
6364

6465
JavaClass superClass = getSuperClass(currClass);
65-
String extendsLine = getExtendsLine(superClass);
66+
List<JavaClass> interfaces = getInterfaces(currClass);
67+
String extendsLine = getExtendsLine(superClass, interfaces);
6668

6769
if(getSimpleClassname(currClass).equals("AccessibilityDelegate")) {
6870
sbContent.appendln(tabs + "export class " + getFullClassNameConcatenated(currClass) + extendsLine + " {");
6971
}
7072
else {
71-
sbContent.appendln(tabs + "export class " + getSimpleClassname(currClass) + extendsLine + " {");
73+
sbContent.appendln(tabs + "export" + (isAbstract && !isInterface ? " abstract " : " ") + "class " + getSimpleClassname(currClass) + extendsLine + " {");
7274
}
7375
// process member scope
7476

@@ -78,6 +80,7 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
7880

7981
List<Method> allInterfacesMethods = getAllInterfacesMethods(allInterfaces);
8082
Set<Field> allInterfaceFields = getAllInterfacesFields(allInterfaces);
83+
8184
processInterfaceConstructor(currClass, allInterfacesMethods);
8285

8386
for(Method m : allInterfacesMethods) {
@@ -101,6 +104,14 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
101104
// process member scope end
102105
}
103106

107+
if(isAbstract && !isInterface) {
108+
List<JavaClass> allInterfaces = getAllInterfaces(currClass);
109+
List<Method> allInterfacesMethods = getAllInterfacesMethods(allInterfaces);
110+
for(Method m : allInterfacesMethods) {
111+
processMethod(m, currClass);
112+
}
113+
}
114+
104115
sbContent.appendln(tabs + "}");
105116
if(getSimpleClassname(currClass).equals("AccessibilityDelegate")) {
106117
String innerClassAlias = "export type " + getSimpleClassname(currClass) + " = " + getFullClassNameConcatenated(currClass);
@@ -124,12 +135,24 @@ public String generateDtsContent(List<JavaClass> javaClasses) {
124135
return sbHeaders.toString() + sbContent.toString();
125136
}
126137

127-
private String getExtendsLine(JavaClass superClass) {
138+
private String getExtendsLine(JavaClass superClass, List<JavaClass> interfaces) {
128139
if(superClass == null) {
129140
return "";
130141
}
131142

132-
return " extends " + superClass.getClassName().replaceAll("\\$", "\\.");
143+
StringBuilder implementsSegmentSb = new StringBuilder();
144+
String implementsSegment = "";
145+
if(interfaces.size() > 0) {
146+
implementsSegmentSb.append(" implements ");
147+
148+
for(JavaClass clazz : interfaces) {
149+
implementsSegmentSb.append(clazz.getClassName().replaceAll("\\$", "\\.") + ", ");
150+
}
151+
152+
implementsSegment = implementsSegmentSb.substring(0, implementsSegmentSb.lastIndexOf(","));
153+
}
154+
155+
return " extends " + superClass.getClassName().replaceAll("\\$", "\\.") + implementsSegment;
133156
}
134157

135158
private int closePackage(JavaClass prevClass, JavaClass currClass) {
@@ -255,7 +278,7 @@ private void generateInterfaceConstructorContent(JavaClass classInterface, Strin
255278
private void generateInterfaceConstructorCommentBlock(JavaClass classInterface, String tabs) {
256279
sbContent.appendln(tabs + "/**");
257280
sbContent.appendln(tabs + " * Constructs a new instance of the " + classInterface.getClassName() + " interface with the provided implementation.");
258-
sbContent.appendln(tabs + " * @param implementation - allows implementor to define their own logic for all public methods.");
281+
// sbContent.appendln(tabs + " * @param implementation - allows implementor to define their own logic for all public methods."); // <- causes too much noise
259282
sbContent.appendln(tabs + " */");
260283
}
261284

@@ -270,13 +293,28 @@ private List<JavaClass> getAllInterfaces(JavaClass classInterface) {
270293

271294
interfaces.add(clazz);
272295

273-
String[] interfaceNames = clazz.getInterfaceNames();
296+
classQueue.addAll(getInterfaces(clazz));
297+
}
298+
299+
return interfaces;
300+
}
301+
302+
private List<JavaClass> getInterfaces(JavaClass classInterface) {
303+
List<JavaClass> interfaces = new ArrayList<>();
274304

275-
for(String intface : interfaceNames) {
276-
JavaClass clazz1 = ClassRepo.findClass(intface);
305+
String[] interfaceNames = classInterface.getInterfaceNames();
306+
for(String intface : interfaceNames) {
307+
JavaClass clazz1 = ClassRepo.findClass(intface);
308+
String className = clazz1.getClassName();
277309

278-
classQueue.add(clazz1);
310+
// TODO: Pete: Hardcoded until we figure out how to go around the 'type incompatible with Object' issue
311+
if (className.equals("java.util.Iterator") ||
312+
className.equals("android.animation.TypeEvaluator") ||
313+
className.equals("java.lang.Comparable")) {
314+
continue;
279315
}
316+
317+
interfaces.add(clazz1);
280318
}
281319

282320
return interfaces;
@@ -304,14 +342,19 @@ private Set<Field> getAllInterfacesFields(List<JavaClass> interfaces) {
304342
}
305343
//method related
306344
private void processMethod(Method m, JavaClass clazz) {
345+
String name = m.getName();
346+
347+
// TODO: Pete: won't generate static initializers as invalid typescript properties
348+
if(clazz.isInterface() && name.equals("<clinit>")) {
349+
return;
350+
}
307351

308352
loadBaseMethods(clazz); //loaded in "baseMethodNames" and "baseMethods"
309353

310354
String tabs = getTabs(this.indent + 1);
311355

312356
cacheMethodBySignature(m); //cached in "mapNameMethod"
313357

314-
String name = m.getName();
315358

316359
//generate base method content
317360
if (baseMethodNames.contains(name)) {

0 commit comments

Comments
 (0)