Commit 580f8b42 authored by Leonard Faecke's avatar Leonard Faecke
Browse files

Added naive counting of RecordDefNamed, ComponentDef and ConstDef

Added naive counting of different constants
parent 6a1976ab
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@
    <booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
    <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="de.ugoe.cs.swe.T3Q.T3Q"/>
    <stringAttribute key="org.eclipse.jdt.launching.MODULE_NAME" value="de.ugoe.cs.swe.T3Q"/>
    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--config config/t3q.cfg --profile defaultProfile"/>
    <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="--config config/t3q.cfg --profile defaultProfile C:\Users\leofa\Documents\_t3q\t3q-resources --analyze-usage"/>
    <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="de.ugoe.cs.swe.T3Q"/>
    <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms256m -Xmx4g"/>
    <stringAttribute key="yk-options" value="&#13;&#10;additional-options2=onexit\=snapshot&#13;&#10;"/>
+27 −4
Original line number Diff line number Diff line
@@ -2,6 +2,8 @@ package de.ugoe.cs.swe.T3Q;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.HashMap;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -20,6 +22,8 @@ import de.ugoe.cs.swe.tTCN3.FunctionDef;
import de.ugoe.cs.swe.tTCN3.ModuleDefinition;
import de.ugoe.cs.swe.tTCN3.TTCN3File;
import de.ugoe.cs.swe.tTCN3.TTCN3Module;
//TODO: inefficient, but I currently don't want to change imports all the time
import de.ugoe.cs.swe.tTCN3.*;

public class UsageAnalyzer implements Callable<TTCN3Usage> {
	private final Resource resource;
@@ -43,15 +47,34 @@ 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,...");
		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()
					+ ",..." 
					+ ", " +EcoreUtil2.getAllContentsOfType(module, RecordDefNamed.class).size()
					+ ", " +EcoreUtil2.getAllContentsOfType(module, ComponentDef.class).size()
					+ ", " +EcoreUtil2.getAllContentsOfType(module, ConstDef.class).size()
					);
			//repeated counting inefficient, refactor into variables later
			if(EcoreUtil2.getAllContentsOfType(module, ConstDef.class).size() > 0) {
				Map<String, Integer> constants = new HashMap<String, Integer>();
				for(ConstDef constant : EcoreUtil2.getAllContentsOfType(module, ConstDef.class)) {
					String name = constant.getType().getPre();
					if(constants.containsKey(name)) {
						constants.replace(name, constants.get(name) + 1);
					} else {
						constants.put(name, 1);
					}
				}
				System.out.println("Printing types of constants:");
				Set<String> names = constants.keySet();
				for(String name : names) {
					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);