Skip to content

Commit

Permalink
Introduce an early Java type translator
Browse files Browse the repository at this point in the history
Rel #30
  • Loading branch information
nobeh committed Jun 17, 2015
1 parent 7ec8495 commit e134784
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
5 changes: 3 additions & 2 deletions src/main/java/jabsc/Compiler.java
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ protected Path generateSource(Program program, Path source, Path outputDirectory
final String packageName = getPackageName(prog);
final Path sourcePath = createSourcePath(packageName, source, outputDirectory);
final Visitor visitor = new Visitor(packageName, prog,
new DefaultJavaWriterSupplier(this, packageName, outputDirectory));
new DefaultJavaWriterSupplier(this, packageName, outputDirectory),
new JavaTypeTranslator());
Files.createDirectories(sourcePath.getParent());
try (final Writer writer = createWriter(sourcePath)) {
JavaWriter jw = new JavaWriter(writer);
Expand Down Expand Up @@ -139,7 +140,7 @@ protected Program parseSource(final BufferedReader reader) throws Exception {
*/
protected String getPackageName(final Prog prog) {
Module module = prog.listmodule_.iterator().next();
Visitor v = new Visitor(null, prog, null);
Visitor v = new Visitor(null, prog, null, new JavaTypeTranslator());
return v.getQTypeName(((Modul) module).qtype_);
}

Expand Down
33 changes: 33 additions & 0 deletions src/main/java/jabsc/JavaTypeTranslator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package jabsc;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

/**
* Some ABS types have an equivalent proper Java type. This is
* function to be able to translate those.
*/
public class JavaTypeTranslator implements Function<String, String> {

private final Map<String, String> abs2java = new HashMap<>();

public JavaTypeTranslator() {
fill(abs2java);
}

@Override
public String apply(String absType) {
String javaType = abs2java.get(absType);
if (javaType != null) {
return javaType;
}
// TODO To be completed.
return absType;
}

protected void fill(Map<String, String> types) {
types.put("Int", Integer.class.getName());
}

}
8 changes: 6 additions & 2 deletions src/main/java/jabsc/Visitor.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ class Visitor extends AbstractVisitor<Prog, JavaWriter> {
private final Prog prog;
private final JavaWriterSupplier javaWriterSupplier;
private final String packageName;
private final JavaTypeTranslator javaTypeTranslator;

/**
* Ctor.
Expand All @@ -97,11 +98,14 @@ class Visitor extends AbstractVisitor<Prog, JavaWriter> {
* @param prog the parsed {@link Prog} AST node
* @param javaWriterSupplier the {@link JavaWriterSupplier}
* for each top-level element
* @param javaTypeTranslator The ABS to Java type translator
*/
public Visitor(String packageName, Prog prog, JavaWriterSupplier javaWriterSupplier) {
public Visitor(String packageName, Prog prog, JavaWriterSupplier javaWriterSupplier,
JavaTypeTranslator javaTypeTranslator) {
this.packageName = packageName;
this.prog = prog;
this.javaWriterSupplier = javaWriterSupplier;
this.javaTypeTranslator = javaTypeTranslator;
this.moduleNames = new HashSet<>();
}

Expand Down Expand Up @@ -701,7 +705,7 @@ protected String getQTypeName(QType qtype) {
QTypeSegment qtypesegment_ = qtyp.listqtypesegment_.iterator().next();
if (qtypesegment_ instanceof QTypeSegmen) {
QTypeSegmen qTypeSegmen = (QTypeSegmen) qtypesegment_;
return qTypeSegmen.uident_;
return javaTypeTranslator.apply(qTypeSegmen.uident_);
}
}
return null;
Expand Down

0 comments on commit e134784

Please sign in to comment.