Commit 6fdd444b authored by Daniel Honsel's avatar Daniel Honsel
Browse files

adjusted validation output to new processing order

parent 224d1947
Loading
Loading
Loading
Loading
+26 −86
Original line number Diff line number Diff line
@@ -13,39 +13,50 @@ import org.eclipse.xtext.validation.FeatureBasedDiagnostic;
import com.google.common.base.Stopwatch;

import de.ugoe.cs.swe.common.MiscTools;
import de.ugoe.cs.swe.common.logging.LoggingInterface.LogLevel;
import de.ugoe.cs.swe.common.logging.LoggingInterface;
import de.ugoe.cs.swe.common.logging.LoggingInterface.MessageClass;
import de.ugoe.cs.swe.validation.TTCN3StatisticsProvider;

public class Analyzer implements Callable<String> {
public class Analyzer implements Callable<TTCN3Output> {
	private final Resource resource;
	private final LoggingInterface logger;
	
	public Analyzer(Resource resource) {
	public Analyzer(Resource resource, LoggingInterface logger) {
		this.resource = resource;
		this.logger = logger;
	}

	private String analyze() {
		String output = "";
	private TTCN3Output analyze() {
		final TTCN3Output output = new TTCN3Output(this.resource);
		final Stopwatch stopwatch = Stopwatch.createUnstarted();
		
		stopwatch.start();
		
		// validate the resource
		EcoreUtil.resolveAll(this.resource);
		validate(this.resource);
		EObject model = this.resource.getContents().get(0);
		org.eclipse.emf.common.util.Diagnostic diagnostic = null;
		diagnostic = Diagnostician.INSTANCE .validate(model);
		for (org.eclipse.emf.common.util.Diagnostic d : diagnostic.getChildren()) {
			output.getOutput().add((FeatureBasedDiagnostic) d);			
		}

		// TODO: make this configurable for debug purposes
		for (Diagnostic d : this.resource.getErrors()) {
			TTCN3StatisticsProvider.getInstance().incrementCountUniversal();
//		for (Diagnostic d : this.resource.getErrors()) {
//			TTCN3StatisticsProvider.getInstance().incrementCountUniversal();
//			logger.logInformation(this.resource.getURI(), d.getLine(), d.getLine(),
//					MessageClass.UNIVERSAL, d.getMessage());
		}
		for (Diagnostic d : this.resource.getWarnings()) {
			TTCN3StatisticsProvider.getInstance().incrementCountUniversal();
//		}
//		for (Diagnostic d : this.resource.getWarnings()) {
//			TTCN3StatisticsProvider.getInstance().incrementCountUniversal();
//			logger.logInformation(this.resource.getURI(), d.getLine(), d.getLine(),
//					MessageClass.UNIVERSAL, d.getMessage());
		}
//		}

		stopwatch.stop();

		System.out.println("Analyzing  file: " + this.resource.getURI().devicePath().replaceFirst("///", "") 
				+ " took: "
				+ '\n' + "       ...done in "
				+ stopwatch.elapsed(TimeUnit.MILLISECONDS)
				+ " ms ("
				+ MiscTools.secondsToString(stopwatch.elapsed(TimeUnit.SECONDS)) + " minutes).");		
@@ -53,79 +64,8 @@ public class Analyzer implements Callable<String> {
		return output;
	}
	
	private void validate(Resource resource) {
		EObject model = resource.getContents().get(0);
		org.eclipse.emf.common.util.Diagnostic diagnostic = null;
		diagnostic = Diagnostician.INSTANCE .validate(model);
		
		FeatureBasedDiagnostic featureDiagnostic = null;

		for (org.eclipse.emf.common.util.Diagnostic d : diagnostic
				.getChildren()) {
			switch (d.getSeverity()) {
			case org.eclipse.emf.common.util.Diagnostic.ERROR:
				featureDiagnostic = (FeatureBasedDiagnostic) d;
//				logger.logError(resource.getURI(),
//						Integer.parseInt(featureDiagnostic.getIssueData()[0]),
//						Integer.parseInt(featureDiagnostic.getIssueData()[1]),
//						MessageClass.valueOf(featureDiagnostic.getIssueCode()),
//						featureDiagnostic.getMessage());
				break;
			case org.eclipse.emf.common.util.Diagnostic.WARNING:
				featureDiagnostic = (FeatureBasedDiagnostic) d;
//				logger.logWarning(resource.getURI(),
//						Integer.parseInt(featureDiagnostic.getIssueData()[0]),
//						Integer.parseInt(featureDiagnostic.getIssueData()[1]),
//						MessageClass.valueOf(featureDiagnostic.getIssueCode()),
//						featureDiagnostic.getMessage(),
//						featureDiagnostic.getIssueData()[2]);
				break;
			case org.eclipse.emf.common.util.Diagnostic.INFO:
				featureDiagnostic = (FeatureBasedDiagnostic) d;
				switch (LogLevel.valueOf(featureDiagnostic.getIssueData()[3])) {
				case INFORMATION:
//					logger.logInformation(
//							resource.getURI(),
//							Integer.parseInt(featureDiagnostic.getIssueData()[0]),
//							Integer.parseInt(featureDiagnostic.getIssueData()[1]),
//							MessageClass.valueOf(featureDiagnostic
//									.getIssueCode()), featureDiagnostic
//									.getMessage(), featureDiagnostic
//									.getIssueData()[2]);
					break;
				case FIXME:
//					logger.logFix(
//							resource.getURI(),
//							Integer.parseInt(featureDiagnostic.getIssueData()[0]),
//							Integer.parseInt(featureDiagnostic.getIssueData()[1]),
//							MessageClass.valueOf(featureDiagnostic
//									.getIssueCode()), featureDiagnostic
//									.getMessage(), featureDiagnostic
//									.getIssueData()[2]);
					break;
				case DEBUG:
//					logger.logDebug(
//							resource.getURI(),
//							Integer.parseInt(featureDiagnostic.getIssueData()[0]),
//							Integer.parseInt(featureDiagnostic.getIssueData()[1]),
//							MessageClass.valueOf(featureDiagnostic
//									.getIssueCode()), featureDiagnostic
//									.getMessage(), featureDiagnostic
//									.getIssueData()[2]);
					break;
				default:
					break;

				}
				break;
			default:
				break;
			}
		}
	}	
	
	@Override
	public String call() throws Exception {
	public TTCN3Output call() throws Exception {
		return analyze();
	}
}
+26 −0
Original line number Diff line number Diff line
package de.ugoe.cs.swe.T3Q;

import java.util.List;

import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.xtext.validation.FeatureBasedDiagnostic;

import com.google.common.collect.Lists;

public class TTCN3Output {
	private final Resource resource;
	private final List<FeatureBasedDiagnostic> output;
	
	public TTCN3Output(final Resource resource) {
		this.resource = resource;
		this.output  = Lists.newArrayList();
	}

	public Resource getResource() {
		return resource;
	}

	public List<FeatureBasedDiagnostic> getOutput() {
		return output;
	}
}
+67 −6
Original line number Diff line number Diff line
@@ -140,14 +140,17 @@ public class TTCN3ResourceProvider {
		
		ArrayList<Analyzer> analyzer = new ArrayList<Analyzer>();
		for (int i = 0; i < TTCN3GlobalScopeProvider.RESOURCES.size(); i++) {
			analyzer.add(new Analyzer(TTCN3GlobalScopeProvider.RESOURCES.get(i)));
			analyzer.add(new Analyzer(TTCN3GlobalScopeProvider.RESOURCES.get(i), logger));
		}
		try {
			List<Future<String>> output = pool.invokeAll(analyzer);
			List<Future<TTCN3Output>> output = pool.invokeAll(analyzer);
			pool.shutdown();
			for (Future<String> f : output) {
				String o = f.get();
				System.out.println(o);
			for (Future<TTCN3Output> f : output) {
				TTCN3Output o = f.get();
				System.out.println("Validation output of " + o.getResource().getURI().lastSegment());
				for (FeatureBasedDiagnostic d : o.getOutput()) {
					printOutput(o.getResource(), d);
				}
			}
		} catch (InterruptedException | ExecutionException e) {
			// TODO Auto-generated catch block
@@ -180,6 +183,64 @@ public class TTCN3ResourceProvider {
	}

	
	private void printOutput(Resource resource, FeatureBasedDiagnostic featureDiagnostic) {
			switch (featureDiagnostic.getSeverity()) {
			case org.eclipse.emf.common.util.Diagnostic.ERROR:
				logger.logError(resource.getURI(),
						Integer.parseInt(featureDiagnostic.getIssueData()[0]),
						Integer.parseInt(featureDiagnostic.getIssueData()[1]),
						MessageClass.valueOf(featureDiagnostic.getIssueCode()),
						featureDiagnostic.getMessage());
				break;
			case org.eclipse.emf.common.util.Diagnostic.WARNING:
				logger.logWarning(resource.getURI(),
						Integer.parseInt(featureDiagnostic.getIssueData()[0]),
						Integer.parseInt(featureDiagnostic.getIssueData()[1]),
						MessageClass.valueOf(featureDiagnostic.getIssueCode()),
						featureDiagnostic.getMessage(),
						featureDiagnostic.getIssueData()[2]);
				break;
			case org.eclipse.emf.common.util.Diagnostic.INFO:
				switch (LogLevel.valueOf(featureDiagnostic.getIssueData()[3])) {
				case INFORMATION:
					logger.logInformation(
							resource.getURI(),
							Integer.parseInt(featureDiagnostic.getIssueData()[0]),
							Integer.parseInt(featureDiagnostic.getIssueData()[1]),
							MessageClass.valueOf(featureDiagnostic
									.getIssueCode()), featureDiagnostic
									.getMessage(), featureDiagnostic
									.getIssueData()[2]);
					break;
				case FIXME:
					logger.logFix(
							resource.getURI(),
							Integer.parseInt(featureDiagnostic.getIssueData()[0]),
							Integer.parseInt(featureDiagnostic.getIssueData()[1]),
							MessageClass.valueOf(featureDiagnostic
									.getIssueCode()), featureDiagnostic
									.getMessage(), featureDiagnostic
									.getIssueData()[2]);
					break;
				case DEBUG:
					logger.logDebug(
							resource.getURI(),
							Integer.parseInt(featureDiagnostic.getIssueData()[0]),
							Integer.parseInt(featureDiagnostic.getIssueData()[1]),
							MessageClass.valueOf(featureDiagnostic
									.getIssueCode()), featureDiagnostic
									.getMessage(), featureDiagnostic
									.getIssueData()[2]);
					break;
				default:
					break;
				}
				break;
			default:
				break;
			}
		}
	

	public void printStatistics() {
		if (activeProfile.isStatShowLOC())