diff --git a/pom.xml b/pom.xml index cb2782fd..29bd1d58 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ [17,18) 11 - 9.14.1 + 0.0.0.translate-syntax-3-SNAPSHOT 0.0.0.main-SNAPSHOT 2.27.0 diff --git a/src/main/java/com/regnosys/testing/reports/ReportUtil.java b/src/main/java/com/regnosys/testing/reports/ReportUtil.java index fe7b5077..fa5836c5 100644 --- a/src/main/java/com/regnosys/testing/reports/ReportUtil.java +++ b/src/main/java/com/regnosys/testing/reports/ReportUtil.java @@ -51,7 +51,7 @@ public List loadReportIdentifiers(ImmutableList rosettaFo return modelLoader.rosettaElements(models, RosettaReport.class).stream() .map(rosettaReport -> new ModelReportId( - DottedPath.of(rosettaReport.getModel().getName()), + DottedPath.of(rosettaReport.getNamespace().getName()), rosettaReport.getRegulatoryBody().getBody().getName(), rosettaReport.getRegulatoryBody().getCorpusList().stream().map(RosettaNamed::getName).toArray(String[]::new))) .collect(Collectors.toList()); diff --git a/src/main/java/com/regnosys/testing/testpack/TestPackConfigCreatorImpl.java b/src/main/java/com/regnosys/testing/testpack/TestPackConfigCreatorImpl.java index f90ce916..086dc4d4 100644 --- a/src/main/java/com/regnosys/testing/testpack/TestPackConfigCreatorImpl.java +++ b/src/main/java/com/regnosys/testing/testpack/TestPackConfigCreatorImpl.java @@ -189,7 +189,7 @@ protected PipelineModel.Serialisation getXmlOutputSerialisation(Function func) { } protected String formatIso20022XmlConfigPath(RosettaType type) { - String namespace = type.getModel().getName(); + String namespace = type.getNamespace().getName(); String xmlConfigPath = namespace .replace("iso20022.", "") .replace(".", "-"); @@ -198,7 +198,7 @@ protected String formatIso20022XmlConfigPath(RosettaType type) { protected ModelReportId toModelReportId(RosettaReport rosettaReport) { return new ModelReportId( - DottedPath.of(rosettaReport.getModel().getName()), + DottedPath.of(rosettaReport.getNamespace().getName()), rosettaReport.getRegulatoryBody().getBody().getName(), rosettaReport.getRegulatoryBody().getCorpusList().stream().map(RosettaNamed::getName).toArray(String[]::new)); } diff --git a/src/main/java/com/regnosys/testing/testpack/TestPackModelHelperImpl.java b/src/main/java/com/regnosys/testing/testpack/TestPackModelHelperImpl.java index 80abb116..7abe963b 100644 --- a/src/main/java/com/regnosys/testing/testpack/TestPackModelHelperImpl.java +++ b/src/main/java/com/regnosys/testing/testpack/TestPackModelHelperImpl.java @@ -25,6 +25,7 @@ import com.regnosys.rosetta.common.util.UrlUtils; import com.regnosys.rosetta.generator.java.types.JavaTypeTranslator; import com.regnosys.rosetta.rosetta.RosettaModel; +import com.regnosys.rosetta.rosetta.RosettaNamespace; import com.regnosys.rosetta.rosetta.RosettaReport; import com.regnosys.rosetta.rosetta.RosettaType; import com.regnosys.rosetta.rosetta.simple.AnnotationRef; @@ -73,7 +74,7 @@ public List getReports(List models, String namespac Set excludedClassNames = excluded.stream().map(Class::getName).collect(Collectors.toSet()); return modelLoader.rosettaElements(models, RosettaReport.class) .stream() - .filter(r -> filterNamespace(r.getModel(), namespaceRegex)) + .filter(r -> filterNamespace(r.getNamespace(), namespaceRegex)) .filter(r -> !excludedClassNames.contains(toJavaClass(r))) .collect(Collectors.toList()); } @@ -82,7 +83,7 @@ public List getReports(List models, String namespac public List getFunctionsWithAnnotation(List models, String namespaceRegex, String annotation, Collection> excluded) { Set excludedClassNames = excluded.stream().map(Class::getName).collect(Collectors.toSet()); return modelLoader.rosettaElements(models, Function.class).stream() - .filter(r -> filterNamespace(r.getModel(), namespaceRegex)) + .filter(r -> filterNamespace(r.getNamespace(), namespaceRegex)) .filter(f -> f.getAnnotations().stream() .map(AnnotationRef::getAnnotation) .anyMatch(a -> annotation.equals(a.getName()))) @@ -122,14 +123,14 @@ public String toJavaClass(RosettaType rosettaType) { return generatedJavaClassService.toJavaType(toModelSymbolId(rosettaType)).getCanonicalName().withDots(); } - private boolean filterNamespace(RosettaModel rosettaModel, String namespaceIncludeRegex) { + private boolean filterNamespace(RosettaNamespace rosettaNamespace, String namespaceIncludeRegex) { return Optional.ofNullable(namespaceIncludeRegex) - .map(regex -> rosettaModel.getName().matches(regex)) + .map(regex -> rosettaNamespace.getName().matches(regex)) .orElse(true); } private ModelSymbolId toModelSymbolId(RosettaType type) { - DottedPath namespace = DottedPath.splitOnDots(type.getModel().getName()); + DottedPath namespace = DottedPath.splitOnDots(type.getNamespace().getName()); return new ModelSymbolId(namespace, type.getName()); } } diff --git a/src/main/java/util/UnusedModelElementFinder.java b/src/main/java/util/UnusedModelElementFinder.java index a8782a31..afa8fb70 100644 --- a/src/main/java/util/UnusedModelElementFinder.java +++ b/src/main/java/util/UnusedModelElementFinder.java @@ -29,13 +29,16 @@ import com.regnosys.rosetta.rosetta.simple.Data; import com.regnosys.rosetta.rosetta.simple.Function; import com.regnosys.rosetta.transgest.ModelLoader; +import com.regnosys.rosetta.utils.ModelIdProvider; import com.regnosys.testing.RosettaTestingInjectorProvider; +import com.rosetta.model.lib.ModelSymbolId; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.ecore.EObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.inject.Inject; import java.util.*; /** @@ -43,16 +46,19 @@ */ public class UnusedModelElementFinder { + private final ModelIdProvider modelIdProvider; + private static final Logger LOGGER = LoggerFactory.getLogger(UnusedModelElementFinder.class); - private final Set listOfTypes = new HashSet<>(); - private final Set listOfUsedTypes = new HashSet<>(); - private final Set listOfOrphanedTypes = new HashSet<>(); + private final Set listOfTypes = new HashSet<>(); + private final Set listOfUsedTypes = new HashSet<>(); + private final Set listOfOrphanedTypes = new HashSet<>(); - private final Set listOfDeprecatedTypes = new HashSet<>(); + private final Set listOfDeprecatedTypes = new HashSet<>(); private final List models; - public UnusedModelElementFinder(List models) { + public UnusedModelElementFinder(List models, ModelIdProvider modelIdProvider) { this.models = models; + this.modelIdProvider = modelIdProvider; } public static void main(String[] args) { @@ -60,7 +66,7 @@ public static void main(String[] args) { ModelLoader loader = injector.getInstance(ModelLoader.class); List models = loader.loadRosettaModels(ClassPathUtils.findRosettaFilePaths().stream().map(UrlUtils::toUrl)); - new UnusedModelElementFinder(models).run(); + new UnusedModelElementFinder(models, injector.getInstance(ModelIdProvider.class)).run(); } public void run() { @@ -79,10 +85,6 @@ public void run() { } - private String getQualifiedName(RosettaType type) { - return type.getModel().getName() + "." + type.getName(); - } - private void generateTypesList() { for (RosettaModel model : models) { @@ -92,10 +94,11 @@ private void generateTypesList() { .filter(Data.class::isInstance) .map(Data.class::cast) .forEach(dataType -> { - LOGGER.trace(" Processing data type: {}", getQualifiedName(dataType)); - listOfTypes.add(getQualifiedName(dataType)); + ModelSymbolId id = modelIdProvider.getSymbolId(dataType); + LOGGER.trace(" Processing data type: {}", id); + listOfTypes.add(id); if(null!=dataType.getSuperType()) - listOfUsedTypes.add(getQualifiedName(dataType.getSuperType())); + listOfUsedTypes.add(modelIdProvider.getSymbolId(dataType.getSuperType().getType())); TreeIterator eObjectTreeIterator = dataType.eAllContents(); updateUsedTypes(eObjectTreeIterator); @@ -106,15 +109,17 @@ private void generateTypesList() { .filter(RosettaEnumeration.class::isInstance) .map(RosettaEnumeration.class::cast) .forEach(enumeration -> { - LOGGER.trace("Processing enumeration type {}", getQualifiedName(enumeration)); - listOfTypes.add(getQualifiedName(enumeration)); + ModelSymbolId id = modelIdProvider.getSymbolId(enumeration); + LOGGER.trace("Processing enumeration type {}", id); + listOfTypes.add(id); }); model.getElements().stream() .filter(Function.class::isInstance) .map(Function.class::cast) .forEach(function -> { - LOGGER.trace(" Processing function types {}.{}", function.getModel().getName(), function.getName()); + ModelSymbolId id = modelIdProvider.getSymbolId(function); + LOGGER.trace(" Processing function {}", id); // listOfTypes.add((function.getModel().getName().concat(".")).concat(function.getName())); TreeIterator eObjectTreeIterator = function.eAllContents(); @@ -130,7 +135,7 @@ private void updateDeprecatedTypes(Data dataType) { annotations .forEach(annotationRef -> { if(annotationRef.getAnnotation().getName().equals("deprecated")){ - listOfDeprecatedTypes.add(getQualifiedName(dataType)); + listOfDeprecatedTypes.add(modelIdProvider.getSymbolId(dataType)); } }); @@ -142,23 +147,23 @@ private void updateUsedTypes(TreeIterator eObjectTreeIterator) { elements.stream() .filter(TypeCall.class::isInstance) .map(TypeCall.class::cast) - .forEach(typeCall -> listOfUsedTypes.add(getQualifiedName(typeCall.getType()))); + .forEach(typeCall -> listOfUsedTypes.add(modelIdProvider.getSymbolId(typeCall.getType()))); } - public Set getListOfTypes() { + public Set getListOfTypes() { return listOfTypes; } - public Set getListOfUsedTypes() { + public Set getListOfUsedTypes() { return listOfUsedTypes; } - public Set getListOfOrphanedTypes() { + public Set getListOfOrphanedTypes() { return listOfOrphanedTypes; } - public Set getListOfDeprecatedTypes() { + public Set getListOfDeprecatedTypes() { return listOfDeprecatedTypes; } } diff --git a/src/test/java/util/UnusedModelElementFinderTest.java b/src/test/java/util/UnusedModelElementFinderTest.java index c60b8801..0025458f 100644 --- a/src/test/java/util/UnusedModelElementFinderTest.java +++ b/src/test/java/util/UnusedModelElementFinderTest.java @@ -25,7 +25,9 @@ import com.regnosys.rosetta.common.util.UrlUtils; import com.regnosys.rosetta.rosetta.RosettaModel; import com.regnosys.rosetta.transgest.ModelLoader; +import com.regnosys.rosetta.utils.ModelIdProvider; import com.regnosys.testing.RosettaTestingInjectorProvider; +import com.rosetta.model.lib.ModelSymbolId; import org.eclipse.xtext.testing.InjectWith; import org.eclipse.xtext.testing.extensions.InjectionExtension; import org.junit.jupiter.api.Test; @@ -33,6 +35,8 @@ import java.util.List; import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -42,40 +46,46 @@ public class UnusedModelElementFinderTest { @Inject private ModelLoader modelLoader; + @Inject + private ModelIdProvider modelIdProvider; @Test - public void getlistOfOrphanedTypes() { + public void getListOfOrphanedTypes() { List models = modelLoader.loadRosettaModels(ClassPathUtils.findPathsFromClassPath(ImmutableList.of("model", "unused-model-element-finder"), ".*\\.rosetta", Optional.empty(), ClassPathUtils.class.getClassLoader() ).stream() .map(UrlUtils::toUrl)); - UnusedModelElementFinder unusedModelElementFinder = new UnusedModelElementFinder(models); + UnusedModelElementFinder unusedModelElementFinder = new UnusedModelElementFinder(models, modelIdProvider); unusedModelElementFinder.run(); - assertEquals(7, unusedModelElementFinder.getListOfTypes().size(), unusedModelElementFinder.getListOfTypes().toString()); + Set listOfTypes = unusedModelElementFinder.getListOfTypes().stream().map(ModelSymbolId::toString).collect(Collectors.toSet()); + assertEquals(7, listOfTypes.size(), listOfTypes.toString()); - assertTrue(unusedModelElementFinder.getListOfTypes().contains("cdm.test.Test1"), "ListOfTypes should contain cdm.test.Test1"); - assertTrue(unusedModelElementFinder.getListOfTypes().contains("cdm.test.Test2"), "ListOfTypes should contain cdm.test.Test2"); - assertTrue(unusedModelElementFinder.getListOfTypes().contains("cdm.test.Test3"),"ListOfTypes should contain cdm.test.Test3"); - assertTrue(unusedModelElementFinder.getListOfTypes().contains("cdm.test.DirectionEnum"), "ListOfTypes should contain cdm.test.DirectionEnum"); - assertTrue(unusedModelElementFinder.getListOfTypes().contains("cdm.test.TestEnum2Unused"), "ListOfTypes should contain cdm.test.TestEnum2Unused"); - assertTrue(unusedModelElementFinder.getListOfTypes().contains("cdm.test.TestEnum3UsedInFuncOnly"), "ListOfTypes should contain cdm.test.TestEnum3UsedInFuncOnly"); + assertTrue(listOfTypes.contains("cdm.test.Test1"), "ListOfTypes should contain cdm.test.Test1"); + assertTrue(listOfTypes.contains("cdm.test.Test2"), "ListOfTypes should contain cdm.test.Test2"); + assertTrue(listOfTypes.contains("cdm.test.Test3"),"ListOfTypes should contain cdm.test.Test3"); + assertTrue(listOfTypes.contains("cdm.test.DirectionEnum"), "ListOfTypes should contain cdm.test.DirectionEnum"); + assertTrue(listOfTypes.contains("cdm.test.TestEnum2Unused"), "ListOfTypes should contain cdm.test.TestEnum2Unused"); + assertTrue(listOfTypes.contains("cdm.test.TestEnum3UsedInFuncOnly"), "ListOfTypes should contain cdm.test.TestEnum3UsedInFuncOnly"); - assertEquals(5, unusedModelElementFinder.getListOfUsedTypes().size(), unusedModelElementFinder.getListOfUsedTypes().toString()); + Set listOfUsedTypes = unusedModelElementFinder.getListOfUsedTypes().stream().map(ModelSymbolId::toString).collect(Collectors.toSet()); + assertEquals(5, listOfUsedTypes.size(), listOfUsedTypes.toString()); - assertTrue(unusedModelElementFinder.getListOfUsedTypes().contains("cdm.test.Test1"), "ListOfUsedTypes should contain cdm.test.Test1"); - assertTrue(unusedModelElementFinder.getListOfUsedTypes().contains("cdm.test.Test2"), "ListOfUsedTypes should contain cdm.test.Test2"); - assertTrue(unusedModelElementFinder.getListOfUsedTypes().contains("cdm.test.Test3"), "ListOfUsedTypes should contain cdm.test.Test3"); - assertTrue(unusedModelElementFinder.getListOfUsedTypes().contains("cdm.test.DirectionEnum"), "ListOfUsedTypes should contain cdm.test.DirectionEnum"); - assertTrue(unusedModelElementFinder.getListOfUsedTypes().contains("cdm.test.TestEnum3UsedInFuncOnly"), "ListOfUsedTypes should contain cdm.test.TestEnum3UsedInFuncOnly"); + assertTrue(listOfUsedTypes.contains("cdm.test.Test1"), "ListOfUsedTypes should contain cdm.test.Test1"); + assertTrue(listOfUsedTypes.contains("cdm.test.Test2"), "ListOfUsedTypes should contain cdm.test.Test2"); + assertTrue(listOfUsedTypes.contains("cdm.test.Test3"), "ListOfUsedTypes should contain cdm.test.Test3"); + assertTrue(listOfUsedTypes.contains("cdm.test.DirectionEnum"), "ListOfUsedTypes should contain cdm.test.DirectionEnum"); + assertTrue(listOfUsedTypes.contains("cdm.test.TestEnum3UsedInFuncOnly"), "ListOfUsedTypes should contain cdm.test.TestEnum3UsedInFuncOnly"); - assertEquals(2, unusedModelElementFinder.getListOfOrphanedTypes().size(), unusedModelElementFinder.getListOfOrphanedTypes().toString()); - assertTrue(unusedModelElementFinder.getListOfOrphanedTypes().contains("cdm.test.TestEnum2Unused"), "ListOfOrphanedTypes should contain cdm.test.TestEnum2Unused"); - assertTrue(unusedModelElementFinder.getListOfOrphanedTypes().contains("cdm.test.Test4Unused"), "ListOfOrphanedTypes should contain cdm.test.Test4Unused"); + Set listOfOrphanedTypes = unusedModelElementFinder.getListOfOrphanedTypes().stream().map(ModelSymbolId::toString).collect(Collectors.toSet()); + assertEquals(2, listOfOrphanedTypes.size(), listOfOrphanedTypes.toString()); + assertTrue(listOfOrphanedTypes.contains("cdm.test.TestEnum2Unused"), "ListOfOrphanedTypes should contain cdm.test.TestEnum2Unused"); + assertTrue(listOfOrphanedTypes.contains("cdm.test.Test4Unused"), "ListOfOrphanedTypes should contain cdm.test.Test4Unused"); - assertEquals(1, unusedModelElementFinder.getListOfDeprecatedTypes().size(), unusedModelElementFinder.getListOfDeprecatedTypes().toString()); - assertTrue(unusedModelElementFinder.getListOfDeprecatedTypes().contains("cdm.test.Test3"), "ListOfDeprecatedTypes should contain cdm.test.Test3"); + Set listOfDeprecatedTypes = unusedModelElementFinder.getListOfDeprecatedTypes().stream().map(ModelSymbolId::toString).collect(Collectors.toSet()); + assertEquals(1, listOfDeprecatedTypes.size(), listOfDeprecatedTypes.toString()); + assertTrue(listOfDeprecatedTypes.contains("cdm.test.Test3"), "ListOfDeprecatedTypes should contain cdm.test.Test3"); } }