Skip to content

Commit

Permalink
Changed a way to generate enum functions #43
Browse files Browse the repository at this point in the history
  • Loading branch information
dhuebner committed Sep 19, 2019
1 parent 213b2ca commit 3754ea0
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,6 @@ class RosettaCalculationGenerationTest {
package com.rosetta.test.model.functions;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.rosetta.model.lib.functions.Mapper;
import com.rosetta.model.lib.functions.MapperS;
import com.rosetta.model.lib.functions.RosettaFunction;
Expand All @@ -74,19 +73,19 @@ class RosettaCalculationGenerationTest {
*/
public class PeriodEnumFunc {
@Inject protected Provider<PeriodEnumFunc.MONTH> MONTHProvider;
@Inject protected PeriodEnumFunc.MONTH MONTH;
public BigDecimal evaluate(PeriodEnum in1, Period in2) {
switch (in1) {
case MONTH:
return MONTHProvider.get().evaluate(in1, in2);
return MONTH.evaluate(in1, in2);
default:
throw new IllegalArgumentException("Enum value not implemented: " + in1);
}
}
public class MONTH implements RosettaFunction {
public static class MONTH implements RosettaFunction {
/**
* @param in1
Expand Down Expand Up @@ -604,7 +603,6 @@ class RosettaCalculationGenerationTest {
package com.rosetta.test.model.functions;
import com.google.inject.Inject;
import com.google.inject.Provider;
import com.rosetta.model.lib.functions.Mapper;
import com.rosetta.model.lib.functions.MapperS;
import com.rosetta.model.lib.functions.RosettaFunction;
Expand All @@ -620,22 +618,22 @@ class RosettaCalculationGenerationTest {
*/
public class MathFunc {
@Inject protected Provider<MathFunc.INCR> INCRProvider;
@Inject protected Provider<MathFunc.DECR> DECRProvider;
@Inject protected MathFunc.INCR INCR;
@Inject protected MathFunc.DECR DECR;
public String evaluate(Math in1, MathInput in2) {
switch (in1) {
case INCR:
return INCRProvider.get().evaluate(in1, in2);
return INCR.evaluate(in1, in2);
case DECR:
return DECRProvider.get().evaluate(in1, in2);
return DECR.evaluate(in1, in2);
default:
throw new IllegalArgumentException("Enum value not implemented: " + in1);
}
}
public class INCR implements RosettaFunction {
public static class INCR implements RosettaFunction {
// RosettaFunction dependencies
//
Expand All @@ -661,7 +659,7 @@ class RosettaCalculationGenerationTest {
}
public class DECR implements RosettaFunction {
public static class DECR implements RosettaFunction {
// RosettaFunction dependencies
//
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ class CardinalityProvider {
RosettaFunction: obj.output.card.isIsMany
Function: if(obj.output === null) false else obj.output.isMulti
Attribute: obj.card.isMany
default: {println(obj.eClass) false}
default: false
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ class FuncGenerator {
val classBody = if (func.handleAsEnumFunction) {
tracImports(func.dispatchClassBody(func.name, dependencies, javaNames, version))
} else {
tracImports(func.classBody(func.name, dependencies, javaNames, version))
tracImports(func.classBody(func.name, dependencies, javaNames, version, false))
}
val content = '''
package «javaNames.packages.functions.packageName»;
Expand All @@ -79,19 +79,19 @@ class FuncGenerator {
val condDeps = (func.conditions + func.postConditions).flatMap[expressions].flatMap [
functionDependencyProvider.functionDependencies(it)
]
return Util.distinctBy(deps + condDeps, [name]).sortBy[it.name]
return Util.distinctBy(deps + condDeps, [name]).sortBy[it.name]
}

private def StringConcatenationClient classBody(Function func, String className,
Iterable<? extends RosettaCallableWithArgs> dependencies, extension JavaNames names, String version) {
Iterable<? extends RosettaCallableWithArgs> dependencies, extension JavaNames names, String version, boolean isStatic) {
val isAbstract = func.operations.nullOrEmpty
val outputName = getOutput(func)?.name
val outputType = func.outputTypeOrVoid(names)
val aliasOut = func.shortcuts.toMap([it], [exprHelper.usesOutputParameter(it.expression)])
val outNeedsBuilder = expressionWithBuilder.needsBuilder(getOutput(func))
'''
«IF isAbstract»@«ImplementedBy»(«className»Impl.class)«ENDIF»
public «IF isAbstract»abstract «ENDIF»class «className» implements «RosettaFunction» {
public «IF isStatic»static «ENDIF»«IF isAbstract»abstract «ENDIF»class «className» implements «RosettaFunction» {
«IF !dependencies.empty»
// RosettaFunction dependencies
Expand Down Expand Up @@ -173,15 +173,15 @@ class FuncGenerator {
«ENDFOR»
«FOR enumFunc : dispatchingFuncs»
@«Inject» protected «Provider»<«toTargetClassName(enumFunc)»> «toTargetClassName(enumFunc).lastSegment»Provider;
@«Inject» protected «toTargetClassName(enumFunc)» «toTargetClassName(enumFunc).lastSegment»;
«ENDFOR»
public «outputType» evaluate(«function.inputsAsParameters(names)») {
switch («enumParam») {
«FOR enumFunc : dispatchingFuncs»
«val enumValClass = toTargetClassName(enumFunc).lastSegment»
case «enumValClass»:
return «enumValClass»Provider.get().evaluate(«function.inputsAsArguments(names)»);
return «enumValClass».evaluate(«function.inputsAsArguments(names)»);
«ENDFOR»
default:
throw new IllegalArgumentException("Enum value not implemented: " + «enumParam»);
Expand All @@ -191,7 +191,7 @@ class FuncGenerator {
«FOR enumFunc : dispatchingFuncs»
«val enumValClass = toTargetClassName(enumFunc).lastSegment»
«enumFunc.classBody(enumValClass, collectFunctionDependencies(enumFunc),names, version)»
«enumFunc.classBody(enumValClass, collectFunctionDependencies(enumFunc), names, version, true
«ENDFOR»
}'''
}
Expand Down

0 comments on commit 3754ea0

Please sign in to comment.