Commit 258695e9 authored by Leonard Faecke's avatar Leonard Faecke
Browse files

Removed naive counting

Added counting of definitions in traversal of tree
parent 580f8b42
Loading
Loading
Loading
Loading
+30 −6
Original line number Diff line number Diff line
@@ -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()
@@ -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);
			}
		}