remove trace + fix tests

This commit is contained in:
Renaud Pawlak 2021-01-10 22:43:49 +01:00
parent 0a3476c09d
commit 850104f6b2
5 changed files with 90 additions and 41 deletions

View File

@ -3209,6 +3209,7 @@ public class Java2TypeScriptTranslator extends AbstractTreePrinter {
}
private String getOverloadMethodName(MethodSymbol method) {
//return getAdapter().getOverloadMethodName(method);
if (method.isConstructor()) {
return "constructor";
}

View File

@ -435,19 +435,16 @@ public class OverloadScanner extends AbstractTreeScanner {
for (JCCompilationUnit cu : cuList) {
scan(cu);
}
System.out.println("\nPASS 1");
context.dumpOverloads(System.out);
pass++;
for (JCCompilationUnit cu : cuList) {
scan(cu);
}
// another pass to complete subclasses
if (!context.options.isGenerateOverloadStubs()) {
for (JCCompilationUnit cu : cuList) {
scan(cu);
}
}
System.out.println("\nPASS 2");
context.dumpOverloads(System.out);
for (Overload overload : context.getAllOverloads()) {
overload.calculate(types, context.symtab);
if (overload.methods.size() > 1 && !overload.isValid) {
@ -456,8 +453,7 @@ public class OverloadScanner extends AbstractTreeScanner {
}
}
}
System.out.println("\nPASS 3");
context.dumpOverloads(System.out);
//context.dumpOverloads(System.out);
}
}

View File

@ -28,6 +28,7 @@ import java.util.function.BiFunction;
import java.util.stream.Collectors;
import javax.lang.model.element.Element;
import javax.lang.model.element.ElementKind;
import javax.lang.model.element.ExecutableElement;
import javax.lang.model.element.Name;
import javax.lang.model.element.PackageElement;
@ -1269,4 +1270,35 @@ public class PrinterAdapter {
return parentAdapter == null ? false : parentAdapter.substituteVariableDeclarationKeyword(variable);
}
/**
* Gets the overload name for the given executable, which is assumed to be part of an overload.
*
* By default, an overload executable name is formed of the original executable name
* ("constructor" for a constructor), concatenated to the arguments types where the '.' are
* replaced with '_'. Argument types separators are '$'.
*
* For instance: m(String s, int i) would give: m$java_lang_Strin$int
*
* Programmers may override this method to change the default names (for simplification and
* readability for instance).
*
* @param exectuable the executable to get the overload name
* @return the overload name
*/
public String getOverloadMethodName(ExecutableElement executable) {
if (executable.getKind() == ElementKind.CONSTRUCTOR) {
return "constructor";
}
StringBuilder sb = new StringBuilder(executable.getSimpleName().toString());
sb.append("$");
for (VariableElement p : executable.getParameters()) {
sb.append(types.erasure(p.asType()).toString().replace('.', '_').replace("[]", "_A"));
sb.append("$");
}
if (!executable.getParameters().isEmpty()) {
sb.deleteCharAt(sb.length() - 1);
}
return sb.toString();
}
}

View File

@ -8,45 +8,55 @@ public class OverLoadClassAndObjectNoStubs {
public static void main(String[] args) {
OverLoadClassAndObjectNoStubs overload = new OverLoadClassAndObjectNoStubs();
System.out.println(overload.m(AnInterface.class));
System.out.println(overload.m(new AClass()));
System.out.println((String)$apply(object(overload).$get("m$source_overload_AnInterface"), new AClass()));
System.out.println((String)$apply(object(overload).$get("m$java_lang_Class"), AClass.class));
System.out.println(overload.m(AnInterface11.class));
System.out.println(overload.m(new AClass11()));
System.out.println((String)$apply(object(overload).$get("m$source_overload_AnInterface11"), new AClass11()));
System.out.println((String)$apply(object(overload).$get("m$java_lang_Class"), AClass11.class));
// Overload with strings cannot work because AnInterface.class is transpiled as a string
System.out.println((String)$apply(object(overload).$get("m$java_lang_Class"), AnInterface.class));
System.out.println(overload.m2(AClass.class));
System.out.println(overload.m2(new AClass()));
System.out.println((String)$apply(object(overload).$get("m2$source_overload_AClass"), new AClass()));
System.out.println((String)$apply(object(overload).$get("m2$java_lang_Class"), AClass.class));
System.out.println(overload.m2(AClass11.class));
System.out.println(overload.m2(new AClass11()));
System.out.println((String)$apply(object(overload).$get("m2$source_overload_AClass11"), new AClass11()));
System.out.println((String)$apply(object(overload).$get("m2$java_lang_Class"), AClass11.class));
assert overload.m(AnInterface.class) == "2:source.overload.AnInterface";
assert overload.m(new AClass()) == "1:object";
assert $apply(object(overload).$get("m$source_overload_AnInterface"), new AClass()) == "1:object";
assert $apply(object(overload).$get("m$java_lang_Class"), AClass.class) == "2:source.overload.AClass";
assert $apply(object(overload).$get("m$java_lang_Class"), AnInterface.class) == "2:source.overload.AnInterface";
assert overload.m(AnInterface11.class) == "2:source.overload.AnInterface11";
assert overload.m(new AClass11()) == "1:object";
assert $apply(object(overload).$get("m$source_overload_AnInterface11"), new AClass11()) == "1:object";
assert $apply(object(overload).$get("m$java_lang_Class"), AClass11.class) == "2:source.overload.AClass11";
assert $apply(object(overload).$get("m$java_lang_Class"), AnInterface11.class) == "2:source.overload.AnInterface11";
assert overload.m2(AClass.class) == "2:source.overload.AClass";
assert overload.m2(new AClass()) == "1:object";
assert $apply(object(overload).$get("m2$source_overload_AClass"), new AClass()) == "1:object";
assert $apply(object(overload).$get("m2$java_lang_Class"), AClass.class) == "2:source.overload.AClass";
assert overload.m2(AClass11.class) == "2:source.overload.AClass11";
assert overload.m2(new AClass11()) == "1:object";
assert $apply(object(overload).$get("m2$source_overload_AClass11"), new AClass11()) == "1:object";
assert $apply(object(overload).$get("m2$java_lang_Class"), AClass11.class) == "2:source.overload.AClass11";
}
String m(AnInterface o) {
String m(AnInterface11 o) {
return "1:" + o.getName();
}
String m(Class<AnInterface> clazz) {
String m(Class<AnInterface11> clazz) {
return "2:" + clazz.getName();
}
String m2(AClass o) {
String m2(AClass11 o) {
return "1:" + o.getName();
}
String m2(Class<AClass> clazz) {
String m2(Class<AClass11> clazz) {
return "2:" + clazz.getName();
}
}
interface AnInterface11 {
String getName();
}
class AClass11 implements AnInterface11 {
public String getName() {
return "object";
}
}

View File

@ -6,30 +6,30 @@ public class OverLoadVaragsNoStubs {
public static void main(String[] args) {
OverLoadVaragsNoStubs ov = new OverLoadVaragsNoStubs();
System.out.println(ov.m(new AClass2()));
System.out.println(ov.m(new AClass2(), true, "a", "b", "c"));
System.out.println((String)$insert("ov.m$source_overload_AnInterface2(new AClass2())"));
System.out.println((String)$insert("ov.m$source_overload_AnInterface2$boolean$java_lang_String_A(new AClass2(), true, 'a', 'b', 'c')"));
assert ov.m(new AClass2()) == "1:object";
assert ov.m(new AClass2(), true, "a", "b", "c") == "objecta,b,c/3";
assert $insert("ov.m$source_overload_AnInterface2(new AClass2())") == "1:object";
assert $insert("ov.m$source_overload_AnInterface2$boolean$java_lang_String_A(new AClass2(), true, 'a', 'b', 'c')") == "objecta,b,c/3";
System.out.println(ov.m(new AClass22()));
System.out.println(ov.m(new AClass22(), true, "a", "b", "c"));
System.out.println((String)$insert("ov.m$source_overload_AnInterface22(new AClass22())"));
System.out.println((String)$insert("ov.m$source_overload_AnInterface22$boolean$java_lang_String_A(new AClass22(), true, 'a', 'b', 'c')"));
assert ov.m(new AClass22()) == "1:object";
assert ov.m(new AClass22(), true, "a", "b", "c") == "objecta,b,c/3";
assert $insert("ov.m$source_overload_AnInterface22(new AClass22())") == "1:object";
assert $insert("ov.m$source_overload_AnInterface22$boolean$java_lang_String_A(new AClass22(), true, 'a', 'b', 'c')") == "objecta,b,c/3";
// passing an array does not work
// TODO: when invoking org method, test if passed expression type is an array and use call
//assert $insert("ov.m(new AClass2(), true, ['a', 'b', 'c'])") == "objecta,b,c/3";
assert ov.mref(new AClass2(), "a", "b", "c") == "objecta,b,c/3";
assert ov.mref(new AClass2(), new String[] {"a", "b", "c"}) == "objecta,b,c/3";
//assert $insert("ov.m(new AClass22(), true, ['a', 'b', 'c'])") == "objecta,b,c/3";
assert ov.mref(new AClass22(), "a", "b", "c") == "objecta,b,c/3";
assert ov.mref(new AClass22(), new String[] {"a", "b", "c"}) == "objecta,b,c/3";
}
String m(AnInterface2 dto, boolean b, String... options) {
String m(AnInterface22 dto, boolean b, String... options) {
return dto.getName() + varM(options);
}
String m(AnInterface2 dto) {
String m(AnInterface22 dto) {
return "1:" + dto.getName();
}
String mref(AnInterface2 dto, String... options) {
String mref(AnInterface22 dto, String... options) {
return dto.getName() + varM(options);
}
@ -38,3 +38,13 @@ public class OverLoadVaragsNoStubs {
}
}
interface AnInterface22 {
String getName();
}
class AClass22 implements AnInterface22 {
public String getName() {
return "object";
}
}