Skip to content

Commit

Permalink
Merge pull request #1891 from lf-lang/inheritance
Browse files Browse the repository at this point in the history
Fix for inheritance problem exposed in examples
  • Loading branch information
lhstrh authored Jul 9, 2023
2 parents e901edf + 91f95ab commit 4537cfb
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 142 deletions.
10 changes: 10 additions & 0 deletions core/src/main/java/org/lflang/ast/ASTUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import org.lflang.TimeValue;
import org.lflang.generator.CodeMap;
import org.lflang.generator.InvalidSourceException;
import org.lflang.generator.NamedInstance;
import org.lflang.generator.ReactorInstance;
import org.lflang.lf.Action;
import org.lflang.lf.Assignment;
Expand Down Expand Up @@ -1662,6 +1663,15 @@ public static boolean isInCode(INode node) {
&& pri.getName().equals("Body");
}

/**
* Return {@code true} if the given instance is top-level, i.e., its parent is {@code null}.
*
* @param instance The instance to check.
*/
public static boolean isTopLevel(NamedInstance instance) {
return instance.getParent() == null;
}

/** Return true if the given node starts on the same line as the given other node. */
public static Predicate<INode> sameLine(ICompositeNode compNode) {
return other -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -441,7 +441,7 @@ private static Set<PortInstance> findUpstreamPortsInFederate(
Set<ReactionInstance> reactionVisited) {
Set<PortInstance> toReturn = new HashSet<>();
if (port == null) return toReturn;
else if (federate.contains(port.getParent())) {
else if (ASTUtils.isTopLevel(port.getParent()) || federate.includes(port.getParent())) {
// Reached the requested federate
toReturn.add(port);
visitedPorts.add(port);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public class FedImportEmitter {
String generateImports(FederateInstance federate, FedFileConfig fileConfig) {
var imports =
((Model) federate.instantiation.eContainer().eContainer())
.getImports().stream().filter(federate::contains).toList();
.getImports().stream().filter(federate::references).toList();

// Transform the URIs
imports.stream()
Expand All @@ -46,7 +46,7 @@ String generateImports(FederateInstance federate, FedFileConfig fileConfig) {
var new_import = EcoreUtil.copy(i);
new_import
.getReactorClasses()
.removeIf(importedReactor -> !federate.contains(importedReactor));
.removeIf(importedReactor -> !federate.references(importedReactor));
return new_import;
})
.map(FormattingUtil.renderer(federate.targetConfig.target))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,23 +37,21 @@ String generateMainReactor(
"\n",
renderer.apply(federate.instantiation),
ASTUtils.allStateVars(originalMainReactor).stream()
.filter(federate::contains)
.map(renderer)
.collect(Collectors.joining("\n")),
ASTUtils.allActions(originalMainReactor).stream()
.filter(federate::contains)
.filter(federate::includes)
.map(renderer)
.collect(Collectors.joining("\n")),
ASTUtils.allTimers(originalMainReactor).stream()
.filter(federate::contains)
.filter(federate::includes)
.map(renderer)
.collect(Collectors.joining("\n")),
ASTUtils.allMethods(originalMainReactor).stream()
.filter(federate::contains)
.map(renderer)
.collect(Collectors.joining("\n")),
ASTUtils.allReactions(originalMainReactor).stream()
.filter(federate::contains)
.filter(federate::includes)
.map(renderer)
.collect(Collectors.joining("\n")))
.indent(4)
Expand All @@ -72,7 +70,7 @@ private CharSequence generateMainSignature(
FederateInstance federate, Reactor originalMainReactor, Function<EObject, String> renderer) {
var paramList =
ASTUtils.allParameters(originalMainReactor).stream()
.filter(federate::contains)
.filter(federate::references)
.map(renderer)
.collect(Collectors.joining(",", "(", ")"));
// Empty "()" is currently not allowed by the syntax
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public FedReactorEmitter() {}
String generateReactorDefinitions(FederateInstance federate) {
return ((Model) federate.instantiation.eContainer().eContainer())
.getReactors().stream()
.filter(federate::contains)
.filter(federate::references)
.map(FormattingUtil.renderer(federate.targetConfig.target))
.collect(Collectors.joining("\n"));
}
Expand Down
Loading

0 comments on commit 4537cfb

Please sign in to comment.