Loading de.ugoe.cs.swe.T3Q/src/de/ugoe/cs/swe/T3Q/UsageAnalyzer.java +30 −6 Original line number Diff line number Diff line Loading @@ -47,10 +47,11 @@ public class UsageAnalyzer implements Callable<TTCN3Usage> { EObject model = this.resource.getContents().get(0); //collect basic stats (keep in mind multi-threaded processing, need to collect output in a file or in output), //for initial basic testing single-threaded mode should provide first results System.out.println("Module, FunctionDef, AltConstruct, RecordDefNamed, ComponentDef, ConstDef"); //System.out.println("Module, FunctionDef, AltConstruct, RecordDefNamed, ComponentDef, ConstDef"); for (TTCN3Module module : ((TTCN3File)model).getModules()) { //immediate output (will look weird if single-core is not activated) //TODO: count different constructs (naive approach), e.g. /* System.out.println(module.getName() + ", " +EcoreUtil2.getAllContentsOfType(module, FunctionDef.class).size() + ", " +EcoreUtil2.getAllContentsOfType(module, AltConstruct.class).size() Loading @@ -75,24 +76,47 @@ public class UsageAnalyzer implements Callable<TTCN3Usage> { System.out.println(name + ": " + constants.get(name)); } } */ //TODO: very inefficient, better to traverse tree once, e.g. List<ModuleDefinition> definitions = EcoreUtil2.getAllContentsOfType(module, ModuleDefinition.class); //process with a stream Map<String, List<ModuleDefinition>> groupedDefinitions = definitions.stream() .collect(Collectors.groupingBy(e->e.getDef().eClass().getName())); //Map<String, List<ModuleDefinition>> groupedDefinitions = definitions.stream() // .collect(Collectors.groupingBy(e->e.getDef().eClass().getName())); //immediate output (will look weird if single-core is not activated) //groupedDefinitions.forEach((k,v) -> System.out.println(k+","+v.size())); //collect for synchronised output output.getOutput().putAll(groupedDefinitions.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().size()))); //output.getOutput().putAll(groupedDefinitions.entrySet().stream() // .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().size()))); //or //groupedDefinitions.forEach((k,v) -> output.getOutput().put(k, v.size())); //...or with a loop //Guarantee the existence of entries in map to save if-statements later output.getOutput().put("TotalDef", 0); output.getOutput().put("ConstDef", 0); output.getOutput().put("FunctionDef", 0); output.getOutput().put("ImportDef", 0); output.getOutput().put("GroupDef", 0); output.getOutput().put("TypeDef", 0); output.getOutput().put("TestcaseDef", 0); output.getOutput().put("SignatureDef", 0); output.getOutput().put("AltstepDef", 0); output.getOutput().put("TemplateDef", 0); output.getOutput().put("ModuleParDef", 0); output.getOutput().put("ExtFunctionDef", 0); output.getOutput().put("ExtConstDef", 0); for (ModuleDefinition d : definitions) { String eClassName = d.getDef().eClass().getName(); //... //System.out.println("Processing " + eClassName); output.getOutput().put("TotalDef", output.getOutput().get("TotalDef") + 1); output.getOutput().put(eClassName, output.getOutput().get(eClassName) + 1); } } Loading Loading
de.ugoe.cs.swe.T3Q/src/de/ugoe/cs/swe/T3Q/UsageAnalyzer.java +30 −6 Original line number Diff line number Diff line Loading @@ -47,10 +47,11 @@ public class UsageAnalyzer implements Callable<TTCN3Usage> { EObject model = this.resource.getContents().get(0); //collect basic stats (keep in mind multi-threaded processing, need to collect output in a file or in output), //for initial basic testing single-threaded mode should provide first results System.out.println("Module, FunctionDef, AltConstruct, RecordDefNamed, ComponentDef, ConstDef"); //System.out.println("Module, FunctionDef, AltConstruct, RecordDefNamed, ComponentDef, ConstDef"); for (TTCN3Module module : ((TTCN3File)model).getModules()) { //immediate output (will look weird if single-core is not activated) //TODO: count different constructs (naive approach), e.g. /* System.out.println(module.getName() + ", " +EcoreUtil2.getAllContentsOfType(module, FunctionDef.class).size() + ", " +EcoreUtil2.getAllContentsOfType(module, AltConstruct.class).size() Loading @@ -75,24 +76,47 @@ public class UsageAnalyzer implements Callable<TTCN3Usage> { System.out.println(name + ": " + constants.get(name)); } } */ //TODO: very inefficient, better to traverse tree once, e.g. List<ModuleDefinition> definitions = EcoreUtil2.getAllContentsOfType(module, ModuleDefinition.class); //process with a stream Map<String, List<ModuleDefinition>> groupedDefinitions = definitions.stream() .collect(Collectors.groupingBy(e->e.getDef().eClass().getName())); //Map<String, List<ModuleDefinition>> groupedDefinitions = definitions.stream() // .collect(Collectors.groupingBy(e->e.getDef().eClass().getName())); //immediate output (will look weird if single-core is not activated) //groupedDefinitions.forEach((k,v) -> System.out.println(k+","+v.size())); //collect for synchronised output output.getOutput().putAll(groupedDefinitions.entrySet().stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().size()))); //output.getOutput().putAll(groupedDefinitions.entrySet().stream() // .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().size()))); //or //groupedDefinitions.forEach((k,v) -> output.getOutput().put(k, v.size())); //...or with a loop //Guarantee the existence of entries in map to save if-statements later output.getOutput().put("TotalDef", 0); output.getOutput().put("ConstDef", 0); output.getOutput().put("FunctionDef", 0); output.getOutput().put("ImportDef", 0); output.getOutput().put("GroupDef", 0); output.getOutput().put("TypeDef", 0); output.getOutput().put("TestcaseDef", 0); output.getOutput().put("SignatureDef", 0); output.getOutput().put("AltstepDef", 0); output.getOutput().put("TemplateDef", 0); output.getOutput().put("ModuleParDef", 0); output.getOutput().put("ExtFunctionDef", 0); output.getOutput().put("ExtConstDef", 0); for (ModuleDefinition d : definitions) { String eClassName = d.getDef().eClass().getName(); //... //System.out.println("Processing " + eClassName); output.getOutput().put("TotalDef", output.getOutput().get("TotalDef") + 1); output.getOutput().put(eClassName, output.getOutput().get(eClassName) + 1); } } Loading