Skip to content

Commit

Permalink
Merge pull request #1674 from lf-lang/fix-eclipse-build
Browse files Browse the repository at this point in the history
TSDockerGenerator and TSTypes ported to Java for Eclipse developers
  • Loading branch information
lhstrh committed Mar 30, 2023
2 parents 6747929 + c872b43 commit 796104c
Show file tree
Hide file tree
Showing 14 changed files with 123 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import org.lflang.ASTUtils;
import org.lflang.ErrorReporter;
import org.lflang.InferredType;
import org.lflang.Target;
import org.lflang.TargetProperty.CoordinationType;
import org.lflang.TimeValue;
import org.lflang.federated.generator.FedASTUtils;
Expand All @@ -22,7 +21,7 @@
import org.lflang.generator.GeneratorBase;
import org.lflang.generator.LFGeneratorContext;
import org.lflang.generator.ReactorInstance;
import org.lflang.generator.ts.TSExtensionsKt;
import org.lflang.generator.ts.TSTypes;
import org.lflang.lf.Action;
import org.lflang.lf.Expression;
import org.lflang.lf.Output;
Expand Down Expand Up @@ -118,7 +117,7 @@ public String generatePreamble(FederateInstance federate, FedFileConfig fileConf
.collect(Collectors.joining(",")),
federate.id,
minOutputDelay == null ? "undefined"
: "%s".formatted(TSExtensionsKt.toTsTime(minOutputDelay)),
: "%s".formatted(TSTypes.getInstance().getTargetTimeExpr(minOutputDelay)),
federate.networkMessageActions
.stream()
.map(Variable::getName)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ class TSConstructorGenerator(
) {

private fun initializeParameter(p: Parameter): String =
"${p.name}: ${TSTypes.getTargetType(p)} = ${TSTypes.getTargetInitializer(p)}"
"${p.name}: ${TSTypes.getInstance().getTargetType(p)} = ${TSTypes.getInstance().getTargetInitializer(p)}"

private fun generateConstructorArguments(reactor: Reactor): String {
val arguments = StringJoiner(", \n")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ object TSDelayBodyGenerator : DelayBodyGenerator {
*/
private fun getActionType(action: Action): String {
return if (action.type != null) {
TSTypes.getTargetType(action.type)
TSTypes.getInstance().getTargetType(action.type)
} else {
"Present"
}
Expand Down
29 changes: 29 additions & 0 deletions org.lflang/src/org/lflang/generator/ts/TSDockerGenerator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.lflang.generator.ts;

import org.lflang.generator.DockerGenerator;
import org.lflang.generator.LFGeneratorContext;

/**
* Generates the docker file related code for the Typescript target.
*
* @author Hou Seng Wong
*/
public class TSDockerGenerator extends DockerGenerator {

/** Construct a new Docker generator. */
public TSDockerGenerator(LFGeneratorContext context) {
super(context);
}

/**
* Return the content of the docker file for [tsFileName].
*/
public String generateDockerFileContent() {
return """
|FROM node:alpine
|WORKDIR /linguafranca/$name
|COPY . .
|ENTRYPOINT ["node", "dist/%s.js"]
""".formatted(context.getFileConfig().name);
}
}
26 changes: 0 additions & 26 deletions org.lflang/src/org/lflang/generator/ts/TSDockerGenerator.kt

This file was deleted.

8 changes: 4 additions & 4 deletions org.lflang/src/org/lflang/generator/ts/TSExtensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ fun WidthSpec.toTSCode(): String = terms.joinToString(" + ") {
* @return The TS type.
*/
val Port.tsPortType: String
get() = type?.let { TSTypes.getTargetType(it) } ?: "Present"
get() = type?.let { TSTypes.getInstance().getTargetType(it) } ?: "Present"

/**
* Return a TS type for the specified action.
Expand All @@ -48,7 +48,7 @@ val Port.tsPortType: String
* @return The TS type.
*/
val Action.tsActionType: String
get() = type?.let { TSTypes.getTargetType(it) } ?: "Present"
get() = type?.let { TSTypes.getInstance().getTargetType(it) } ?: "Present"

fun Expression.toTsTime(): String = TSTypes.getTargetTimeExpr(this)
fun TimeValue.toTsTime(): String = TSTypes.getTargetTimeExpr(this)
fun Expression.toTsTime(): String = TSTypes.getInstance().getTargetTimeExpr(this)
fun TimeValue.toTsTime(): String = TSTypes.getInstance().getTargetTimeExpr(this)
2 changes: 1 addition & 1 deletion org.lflang/src/org/lflang/generator/ts/TSGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,7 @@ class TSGenerator(
return true
}

override fun getTargetTypes(): TargetTypes = TSTypes
override fun getTargetTypes(): TargetTypes = TSTypes.getInstance()

override fun getTarget(): Target {
return Target.TS
Expand Down
6 changes: 3 additions & 3 deletions org.lflang/src/org/lflang/generator/ts/TSInstanceGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@ class TSInstanceGenerator(

private fun getTypeParams(typeParms: List<Type>): String =
if (typeParms.isEmpty()) ""
else typeParms.joinToString(", ", "<", ">") { TSTypes.getTargetType(it) }
else typeParms.joinToString(", ", "<", ">") { TSTypes.getInstance().getTargetType(it) }

private fun getReactorParameterList(parameters: List<Parameter>): String =
parameters.joinToString(", ", "[__Reactor, ", "]") { TSTypes.getTargetType(it) }
parameters.joinToString(", ", "[__Reactor, ", "]") { TSTypes.getInstance().getTargetType(it) }


fun generateClassProperties(): String =
Expand All @@ -50,7 +50,7 @@ class TSInstanceGenerator(
childReactorArguments.add("this")

for (parameter in childReactor.reactorClass.toDefinition().parameters) {
childReactorArguments.add(TSTypes.getTargetInitializer(parameter, childReactor))
childReactorArguments.add(TSTypes.getInstance().getTargetInitializer(parameter, childReactor))
}
if (childReactor.isBank) {
childReactorInstantiations.add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class TSParameterGenerator(

fun generateClassProperties(): String =
parameters.joinWithLn {
"${it.name}: __Parameter<${TSTypes.getTargetType(it)}>;"
"${it.name}: __Parameter<${TSTypes.getInstance().getTargetType(it)}>;"
}

fun generateInstantiations(): String =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ class TSParameterPreambleGenerator(
mainParameters.joinWithLn { parameter ->

"""
|let __CL${parameter.name}: ${TSTypes.getTargetType(parameter)} | undefined = undefined;
|let __CL${parameter.name}: ${TSTypes.getInstance().getTargetType(parameter)} | undefined = undefined;
|if (__processedCLArgs.${parameter.name} !== undefined) {
| if (__processedCLArgs.${parameter.name} !== null) {
| __CL${parameter.name} = __processedCLArgs.${parameter.name};
Expand Down Expand Up @@ -114,7 +114,7 @@ class TSParameterPreambleGenerator(
var customArgType: String? = null
var customTypeLabel: String? = null

val paramType = TSTypes.getTargetType(parameter)
val paramType = TSTypes.getInstance().getTargetType(parameter)
if (paramType == "string") {
mainParameters.add(parameter)
customArgType = "String";
Expand Down
4 changes: 2 additions & 2 deletions org.lflang/src/org/lflang/generator/ts/TSReactionGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ class TSReactionGenerator(

// Underscores are added to parameter names to prevent conflict with prologue
val name = param.name
reactSignature.add("__$name: __Parameter<${TSTypes.getTargetType(param)}>")
reactSignature.add("__$name: __Parameter<${TSTypes.getInstance().getTargetType(param)}>")
reactFunctArgs.add("this.$name")
reactPrologue.add("let $name = __$name.get();")
}
Expand All @@ -367,7 +367,7 @@ class TSReactionGenerator(
for (state in reactor.stateVars) {
// Underscores are added to state names to prevent conflict with prologue
val name = state.name
reactSignature.add("__$name: __State<${TSTypes.getTargetType(state)}>")
reactSignature.add("__$name: __State<${TSTypes.getInstance().getTargetType(state)}>")
reactFunctArgs.add("this.$name")
reactPrologue.add("let $name = __$name.get();")
reactEpilogue.add(
Expand Down
4 changes: 2 additions & 2 deletions org.lflang/src/org/lflang/generator/ts/TSStateGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ class TSStateGenerator(
fun generateClassProperties(): String {
val stateClassProperties = LinkedList<String>()
for (stateVar in stateVars) {
stateClassProperties.add("${stateVar.name}: __State<${TSTypes.getTargetType(stateVar)}>;");
stateClassProperties.add("${stateVar.name}: __State<${TSTypes.getInstance().getTargetType(stateVar)}>;");
}
return stateClassProperties.joinToString("\n")
}
Expand All @@ -25,7 +25,7 @@ class TSStateGenerator(
// Next handle states.
for (stateVar in stateVars) {
if (ASTUtils.isInitialized(stateVar)) {
stateInstantiations.add("this.${stateVar.name} = new __State(${TSTypes.getTargetInitializer(stateVar)});");
stateInstantiations.add("this.${stateVar.name} = new __State(${TSTypes.getInstance().getTargetInitializer(stateVar)});");
} else {
stateInstantiations.add("this.${stateVar.name} = new __State(undefined);");
}
Expand Down
75 changes: 75 additions & 0 deletions org.lflang/src/org/lflang/generator/ts/TSTypes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
package org.lflang.generator.ts;

import java.util.List;

import org.lflang.ASTUtils;
import org.lflang.TimeValue;
import org.lflang.generator.TargetTypes;
import org.lflang.generator.UnsupportedGeneratorFeatureException;
import org.lflang.lf.StateVar;

public class TSTypes implements TargetTypes {

private static TSTypes INSTANCE = new TSTypes();

private TSTypes() {

}

@Override
public String getTargetType(StateVar s) {
var type = TargetTypes.super.getTargetType(s);
if (!ASTUtils.isInitialized(s)) {
return "%s | undefined".formatted(type);
} else {
return type;
}
}

@Override
public boolean supportsGenerics() {
return true;
}

@Override
public String getTargetTimeType() {
return "TimeValue";
}

@Override
public String getTargetTagType() {
return "TimeValue";
}

@Override
public String getTargetUndefinedType() {
return "Present";
}

public String getTargetTimeExpr(TimeValue value) {
if (value.unit != null) {
return "TimeValue.%s(%s)".formatted(value.unit.getCanonicalName(), value.time);
} else {
// The value must be zero.
return "TimeValue.zero()";
}
}

@Override
public String getTargetFixedSizeListType(String baseType, int size) {
throw new UnsupportedGeneratorFeatureException("TypeScript does not support fixed-size array types.");
}

@Override
public String getTargetVariableSizeListType(String baseType) {
return "Array<%s>".formatted(baseType); // same as "$baseType[]"
}

public String getVariableSizeListInitExpression(List<String> contents, boolean withBraces) {
return "[" + String.join(", ", contents) + "]";
}

public static TSTypes getInstance() {
return INSTANCE;
}
}
57 changes: 0 additions & 57 deletions org.lflang/src/org/lflang/generator/ts/TSTypes.kt

This file was deleted.

0 comments on commit 796104c

Please sign in to comment.