Skip to content

Commit

Permalink
Merge branch 'release/0.14.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
pmlopes committed Dec 9, 2020
2 parents ecf3e4d + 9295685 commit eeadd05
Show file tree
Hide file tree
Showing 135 changed files with 5,749 additions and 527 deletions.
4 changes: 2 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## [0.14.0-CR2] -
## [0.14.0] - 2020-12-09
* Started paving the way for the `install` command to allow other target than `node_modules`
* Implemented the official `import-map` spec to map url based modules
* Improvements on REPL
* Added more interop tests
* Improvements on `typeMappings` (calls from JS -> Java)
* Update codegen for the upstream changes in `vertx-core`
* Ensure that wrapped calls are correclty translated (Future related)
* Ensure that wrapped calls are correctly translated (Future related)
* Adapt codegen to transform `Future` to `PromiseLike`

## [0.14.0-CR1] - 2020-11-04
Expand Down
4 changes: 2 additions & 2 deletions codegen/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@
<parent>
<groupId>io.reactiverse</groupId>
<artifactId>es4x-parent</artifactId>
<version>0.14.0-CR2</version>
<version>0.14.0</version>
<relativePath>..</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>

<artifactId>es4x-codegen</artifactId>
<version>0.14.0-CR2</version>
<version>0.14.0</version>

<properties>
<tools.jar>${java.home}/../lib/tools.jar</tools.jar>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ public String render(ClassModel model, int index, int size, Map<String, Object>
if (index == 0) {
Util.generateLicense(writer);
registerJvmClasses();
for (Object fqcn : jvmClasses()) {
for (Object fqcn : jvmClasses("api")) {
JVMClass.generateDTS(writer, fqcn.toString());
}

Expand All @@ -78,59 +78,66 @@ public String render(ClassModel model, int index, int size, Map<String, Object>
@SuppressWarnings("unchecked")
Map<String, String> aliasMap = (Map<String, String>) session.computeIfAbsent("aliasMap", (a) -> new HashMap<String, String>());
for (ApiTypeInfo referencedType : model.getReferencedTypes()) {
if (!isImported(referencedType, session)) {
if (!referencedType.getRaw().getModuleName().equals(type.getModuleName())) {
String simpleName = referencedType.getSimpleName();
if (simpleName.equals(model.getIfaceSimpleName())) {
String aliasName = simpleName + "Super";
simpleName = simpleName + " as " + aliasName;
aliasMap.put(referencedType.getName(), aliasName);
}
// ignore missing imports
if (isOptionalModule(getNPMScope(referencedType.getRaw().getModule()))) {
writer.println("// @ts-ignore");
}
writer.printf("import { %s } from '%s';\n", simpleName, getNPMScope(referencedType.getRaw().getModule()));
imports = true;
if (!sameModule(type, referencedType.getRaw())) {
String simpleName = referencedType.getSimpleName();
if (simpleName.equals(model.getIfaceSimpleName())) {
String aliasName = simpleName + "Super";
simpleName = simpleName + " as " + aliasName;
aliasMap.put(referencedType.getName(), aliasName);
}
importType(writer, session, referencedType, simpleName, getNPMScope(referencedType.getRaw().getModule()));
imports = true;
}
}
for (ClassTypeInfo dataObjectType : model.getReferencedDataObjectTypes()) {
if (!isImported(dataObjectType, session)) {
if (dataObjectType.getRaw().getModuleName().equals(type.getModuleName())) {
writer.printf("import { %s } from './options';\n", dataObjectType.getSimpleName());
imports = true;
} else {
writer.printf("import { %s } from '%s/options';\n", dataObjectType.getSimpleName(), getNPMScope(dataObjectType.getRaw().getModule()));
imports = true;
}
if (sameModule(type, dataObjectType.getRaw())) {
importType(writer, session, dataObjectType, dataObjectType.getSimpleName(), "./options");
imports = true;
} else {
importType(writer, session, dataObjectType, dataObjectType.getSimpleName(), getNPMScope(dataObjectType.getRaw().getModule()) + "/options");
imports = true;
}
}
for (EnumTypeInfo enumType : model.getReferencedEnumTypes()) {
if (!isImported(enumType, session)) {
if (enumType.getRaw().getModuleName().equals(type.getModuleName())) {
writer.printf("import { %s } from './enums';\n", enumType.getSimpleName());
imports = true;
} else {
writer.printf("import { %s } from '%s/enums';\n", enumType.getSimpleName(), getNPMScope(enumType.getRaw().getModule()));
imports = true;
}
if (enumType.getRaw().getModuleName() == null) {
System.err.println("@@@ Missing module for ENUM: " + enumType);
continue;
}
if (sameModule(type, enumType.getRaw())) {
importType(writer, session, enumType, enumType.getSimpleName(), "./enums");
imports = true;
} else {
importType(writer, session, enumType, enumType.getSimpleName(), getNPMScope(enumType.getRaw().getModule()) + "/enums");
imports = true;
}
}

if (imports) {
writer.print("\n");
}

final Set<String> superTypes = new HashSet<>();
model.getAbstractSuperTypes().forEach(ti -> superTypes.add(genType(ti)));
// ensure that all super types are also imported
model.getAbstractSuperTypes().forEach(ti -> {
if (!sameModule(type, ti.getRaw())) {
importType(writer, session, ti, ti.getSimpleName(), getNPMScope(ti.getRaw().getModule()));
}
superTypes.add(genType(ti));
});

imports |= superTypes.size() > 0;

if (model.isHandler()) {
if (model.isConcrete()) {
superTypes.add("Handler<" + genType(model.getHandlerArg()) + ">");
TypeInfo ti = model.getHandlerArg();
if (!sameModule(type, ti.getRaw())) {
importType(writer, session, ti, ti.getSimpleName(), getNPMScope(ti.getRaw().getModule()) + (ti.isDataObjectHolder() ? "/options" : ""));
imports = true;
}
superTypes.add("Handler<" + genType(ti) + ">");
}
}

if (imports) {
writer.print("\n");
}

generateDoc(writer, model.getDoc(), "");

writer.printf("export %s %s%s", model.isConcrete() ? "abstract class" : "interface", type.getSimpleName(), genGeneric(type.getParams()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ public String render(ClassModel model, int index, int size, Map<String, Object>
writer.print("module.exports = {\n");

registerJvmClasses();
for (Object fqcn : jvmClasses()) {
for (Object fqcn : jvmClasses("api")) {
JVMClass.generateJS(writer, fqcn.toString());
writer.println(',');
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ public String render(ClassModel model, int index, int size, Map<String, Object>
" */\n");

registerJvmClasses();
for (Object fqcn : jvmClasses()) {
for (Object fqcn : jvmClasses("api")) {
JVMClass.generateMJS(writer, fqcn.toString());
writer.println();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ public static void generateDTS(PrintWriter writer, String fqcn) {
return;
}

writer.printf("/** Auto-generated from %s %s extends %s\n", Modifier.toString(clazz.getModifiers()), clazz.getName(), clazz.getSuperclass().getName());
writer.printf("/** Auto-generated from %s %s extends %s\n", Modifier.toString(clazz.getModifiers()), clazz.getName(), clazz.getSuperclass() != null ? clazz.getSuperclass().getName() : "");
// Get the list of implemented interfaces in the form of Class array using getInterface() method
Class<?>[] clazzInterfaces = clazz.getInterfaces();
for (Class<?> c : clazzInterfaces) {
Expand All @@ -64,7 +64,7 @@ public static void generateDTS(PrintWriter writer, String fqcn) {
writer.println(" * @deprecated");
}
writer.println(" */");
writer.printf("export %s%s %s {\n", Modifier.isAbstract(clazz.getModifiers()) ? "abstract " : "", clazz.isInterface() ? "interface" : "class", getSimpleName(clazz));
writer.printf("export %s%s %s {\n", !clazz.isInterface() && Modifier.isAbstract(clazz.getModifiers()) ? "abstract " : "", clazz.isInterface() ? "interface" : "class", getSimpleName(clazz));
writer.println();

// Get the metadata of all the fields of the class
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ private Collection<ClassTypeInfo> filterImports(Map<String, PropertyInfo> proper

return result;
}

@Override
public String render(DataObjectModel model, int index, int size, Map<String, Object> session) {

Expand All @@ -63,49 +64,44 @@ public String render(DataObjectModel model, int index, int size, Map<String, Obj

if (index == 0) {
Util.generateLicense(writer);
registerJvmClasses();
for (Object fqcn : jvmClasses("dataObject")) {
JVMClass.generateDTS(writer, fqcn.toString());
}

// include a file if present
writer.print(includeFileIfPresent("options.header.d.ts"));
} else {
writer.print("\n");
}

for (ClassTypeInfo referencedType : filterImports(model.getPropertyMap())) {
if (!isImported(referencedType, session)) {
if (referencedType.getKind() == ClassKind.ENUM) {
if (referencedType.getRaw().getModuleName().equals(model.getType().getRaw().getModuleName())) {
writer.printf("import { %s } from './enums';\n", referencedType.getSimpleName());
imports = true;
} else {
// ignore missing imports
if (isOptionalModule(getNPMScope(referencedType.getRaw().getModule()))) {
writer.println("// @ts-ignore");
}
writer.printf("import { %s } from '%s/enums';\n", referencedType.getSimpleName(), getNPMScope(referencedType.getRaw().getModule()));
imports = true;
}
if (referencedType.getKind() == ClassKind.ENUM) {
if (referencedType.getRaw().getModuleName() == null) {
System.err.println("@@@ Missing module for ENUM: " + referencedType);
continue;
}
if (sameModule(model.getType(), referencedType.getRaw())) {
importType(writer, session, referencedType, referencedType.getSimpleName(), "./enums");
imports = true;
} else {
importType(writer, session, referencedType, referencedType.getSimpleName(), getNPMScope(referencedType.getRaw().getModule()) + "/enums");
imports = true;
}
if (referencedType.getKind() == ClassKind.OTHER && referencedType.getDataObject() != null) {
if (!referencedType.getRaw().getModuleName().equals(model.getType().getRaw().getModuleName())) {
// ignore missing imports
if (isOptionalModule(getNPMScope(referencedType.getRaw().getModule()))) {
writer.println("// @ts-ignore");
}
writer.printf("import { %s } from '%s/options';\n", referencedType.getSimpleName(), getNPMScope(referencedType.getRaw().getModule()));
imports = true;
}
}
if (referencedType.getKind() == ClassKind.OTHER && referencedType.getDataObject() != null) {
if (!sameModule(model.getType(), referencedType.getRaw())) {
importType(writer, session, referencedType, referencedType.getSimpleName(), getNPMScope(referencedType.getRaw().getModule()) + "/options");
imports = true;
}
if (referencedType.getKind() == ClassKind.API) {
if (referencedType.getRaw().getModuleName().equals(model.getType().getRaw().getModuleName())) {
writer.printf("import { %s } from './index';\n", referencedType.getSimpleName());
imports = true;
} else {
// ignore missing imports
if (isOptionalModule(getNPMScope(referencedType.getRaw().getModule()))) {
writer.println("// @ts-ignore");
}
writer.printf("import { %s } from '%s';\n", referencedType.getSimpleName(), getNPMScope(referencedType.getRaw().getModule()));
imports = true;
}
}
if (referencedType.getKind() == ClassKind.API) {
if (sameModule(model.getType(), referencedType.getRaw())) {
importType(writer, session, referencedType, referencedType.getSimpleName(), "./index");
imports = true;
} else {
importType(writer, session, referencedType, referencedType.getSimpleName(), getNPMScope(referencedType.getRaw().getModule()));
imports = true;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import java.util.HashSet;
import java.util.Map;

import static io.reactiverse.es4x.codegen.generator.Util.getNPMScope;
import static io.reactiverse.es4x.codegen.generator.Util.*;

public class OptionsJS extends Generator<DataObjectModel> {

Expand All @@ -49,6 +49,10 @@ public String render(DataObjectModel model, int index, int size, Map<String, Obj

if (index == 0) {
Util.generateLicense(writer);
registerJvmClasses();
for (Object fqcn : jvmClasses("dataObject")) {
JVMClass.generateJS(writer, fqcn.toString());
}

writer.printf("/// <reference types=\"%s/options\" />\n\n", getNPMScope(model.getType().getRaw().getModule()));
writer.printf(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import java.util.HashSet;
import java.util.Map;

import static io.reactiverse.es4x.codegen.generator.Util.getNPMScope;
import static io.reactiverse.es4x.codegen.generator.Util.*;

public class OptionsMJS extends Generator<DataObjectModel> {

Expand All @@ -49,6 +49,11 @@ public String render(DataObjectModel model, int index, int size, Map<String, Obj

if (index == 0) {
Util.generateLicense(writer);
registerJvmClasses();
for (Object fqcn : jvmClasses("dataObject")) {
JVMClass.generateMJS(writer, fqcn.toString());
}

writer.printf("/// <reference types=\"%s/options\" />\n\n", getNPMScope(model.getType().getRaw().getModule()));
writer.printf(
"/**\n" +
Expand Down
Loading

0 comments on commit eeadd05

Please sign in to comment.