diff --git a/pom.xml b/pom.xml index efc48e6fdd85a14e5350494450e9774f79d8f02d..6dfda3bf3cb7220de97c3af49fdd75e05bfc7223 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ <groupId>de.monticore.lang.monticar</groupId> <artifactId>embedded-montiarc-math-middleware-generator</artifactId> - <version>0.0.9-SNAPSHOT</version> + <version>0.0.10-SNAPSHOT</version> <!-- == PROJECT DEPENDENCIES ============================================= --> diff --git a/src/main/java/de/monticore/lang/monticar/generator/middleware/DistributedTargetGenerator.java b/src/main/java/de/monticore/lang/monticar/generator/middleware/DistributedTargetGenerator.java index 0aac73f670a6a2e8f12080b209bfec06da3d2387..4fdc2badc808794b97b399ed172f90495d3c09dd 100644 --- a/src/main/java/de/monticore/lang/monticar/generator/middleware/DistributedTargetGenerator.java +++ b/src/main/java/de/monticore/lang/monticar/generator/middleware/DistributedTargetGenerator.java @@ -48,14 +48,16 @@ public class DistributedTargetGenerator extends CMakeGenerator { subDirs.add(NameHelper.getNameTargetLanguage(comp.getFullName())); } - subDirs.add("rosMsg"); - files.add(generateCMake(componentInstanceSymbol)); - files.add(generateRosMsgGen()); + //generate rosMsg CMake iff a .msg file was generated + if(files.stream().anyMatch(f -> f.getName().endsWith(".msg"))){ + subDirs.add("rosMsg"); + files.add(generateRosMsgGen()); + } + files.add(generateCMake(componentInstanceSymbol)); return files; } - //TODO:refactor, dont always generate private File generateRosMsgGen() throws IOException { File file = new File(generationTargetPath + "rosMsg/CMakeLists.txt"); FileUtils.write(file, TemplateHelper.getStruct_msgsCmakeTemplate()); diff --git a/src/test/java/de/monticore/lang/monticar/generator/middleware/GenerationTest.java b/src/test/java/de/monticore/lang/monticar/generator/middleware/GenerationTest.java index 93c09247ef0c71a7eea906e44bc699c91256422e..6c5d62ef8d73009179c1ba053bd64bf4fba53624 100644 --- a/src/test/java/de/monticore/lang/monticar/generator/middleware/GenerationTest.java +++ b/src/test/java/de/monticore/lang/monticar/generator/middleware/GenerationTest.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; public class GenerationTest extends AbstractSymtabTest { @@ -317,4 +318,25 @@ public class GenerationTest extends AbstractSymtabTest { starBridgeGenerator.generate(componentInstanceSymbol, taggingResolver); assertTrue(Log.getFindings().isEmpty()); } + + + @Test + public void testNoRosMsg() throws IOException { + TaggingResolver taggingResolver = createSymTabAndTaggingResolver(TEST_PATH); + + ExpandedComponentInstanceSymbol componentInstanceSymbol = taggingResolver.<ExpandedComponentInstanceSymbol>resolve("tests.a.addComp", ExpandedComponentInstanceSymbol.KIND).orElse(null); + assertNotNull(componentInstanceSymbol); + TagHelper.resolveTags(taggingResolver, componentInstanceSymbol); + + DistributedTargetGenerator distributedTargetGenerator = new DistributedTargetGenerator(); + distributedTargetGenerator.setGenerationTargetPath("./target/generated-sources-cmake/noRosMsg/"); + distributedTargetGenerator.add(new CPPGenImpl(),"cpp"); + + List<File> files = distributedTargetGenerator.generate(componentInstanceSymbol, taggingResolver); + + + List<String> filenames = files.stream().map(File::getAbsolutePath).map(name -> name.replace('\\','/')).collect(Collectors.toList()); + + assertFalse(filenames.stream().anyMatch(fn -> fn.endsWith("rosMsg/CMakeLists.txt"))); + } }