All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.puresoltechnologies.purifinity.server.test.lang.TestLanguageAnalyser Maven / Gradle / Ivy

The newest version!
/***************************************************************************
 *
 *   JavaAnalyser.java
 *   -------------------
 *   copyright            : (c) 2009 by PureSol-Technologies
 *   author               : Rick-Rainer Ludwig
 *   email                : [email protected]
 *
 ***************************************************************************/

package com.puresoltechnologies.purifinity.server.test.lang;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.puresoltechnologies.commons.misc.StopWatch;
import com.puresoltechnologies.commons.misc.hash.HashId;
import com.puresoltechnologies.parsers.lexer.Lexer;
import com.puresoltechnologies.parsers.lexer.LexerException;
import com.puresoltechnologies.parsers.lexer.TokenStream;
import com.puresoltechnologies.parsers.parser.Parser;
import com.puresoltechnologies.parsers.parser.ParserException;
import com.puresoltechnologies.parsers.source.SourceCode;
import com.puresoltechnologies.parsers.ust.CompilationUnit;
import com.puresoltechnologies.parsers.ust.UniversalSyntaxTree;
import com.puresoltechnologies.purifinity.analysis.domain.AnalysisInformation;
import com.puresoltechnologies.purifinity.analysis.domain.CodeAnalysis;
import com.puresoltechnologies.purifinity.analysis.domain.CodeRange;
import com.puresoltechnologies.purifinity.analysis.domain.CodeRangeType;
import com.puresoltechnologies.purifinity.analysis.spi.AbstractCodeAnalyzer;
import com.puresoltechnologies.purifinity.server.test.lang.grammar.TestLanguageGrammar;
import com.puresoltechnologies.versioning.Version;

/**
 * 
 * @author Rick-Rainer Ludwig
 * 
 */
public class TestLanguageAnalyser extends AbstractCodeAnalyzer {

    private static final Logger logger = LoggerFactory.getLogger(TestLanguageAnalyser.class);

    private CodeAnalysis fileAnalysis;

    public TestLanguageAnalyser(SourceCode sourceCode, HashId hashId) {
	super(sourceCode, hashId, TestLanguageGrammar.getInstance());
    }

    @Override
    public void analyze() throws IOException {
	fileAnalysis = null;
	Date date = new Date();
	StopWatch watch = new StopWatch();
	watch.start();
	SourceCode sourceCode = getSourceCode();
	TestLanguage language = TestLanguage.getInstance();
	try {
	    Lexer lexer = getGrammar().getLexer();
	    TokenStream tokenStream = lexer.lex(sourceCode);
	    Parser parser = getGrammar().getParser();
	    parser.parse(tokenStream);
	    watch.stop();
	    CompilationUnit compilationUnit = null; // TODO
	    long timeEffort = watch.getMilliseconds();
	    fileAnalysis = new CodeAnalysis(date, timeEffort, language.getName(), language.getVersion(),
		    new AnalysisInformation(getHashId(), date, timeEffort, true, language.getName(),
			    language.getVersion(), "analyzerId", Version.valueOf("1.0.0")),
		    getAnalyzableCodeRanges(compilationUnit), compilationUnit);
	} catch (LexerException | ParserException e) {
	    long timeEffort = watch.getMilliseconds();
	    fileAnalysis = new CodeAnalysis(date, timeEffort, language.getName(),
		    language.getVersion(), new AnalysisInformation(getHashId(), date, timeEffort, false,
			    language.getName(), language.getVersion(), "analyzerId", Version.valueOf("1.0.0")),
		    null, null);
	}
	return;
    }

    @Override
    public boolean persist(File file) {
	try {
	    persist(this, file);
	    return true;
	} catch (IOException e) {
	    logger.error(e.getMessage(), e);
	    return false;
	}
    }

    private List getAnalyzableCodeRanges(UniversalSyntaxTree ust) {
	List result = new ArrayList();
	result.add(new CodeRange("", "", CodeRangeType.FILE, ust));
	return result;
    }

    private  void persist(T object, File file) throws IOException {
	ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));
	try {
	    objectOutputStream.writeObject(object);
	} finally {
	    objectOutputStream.close();
	}
    }

    @Override
    public CodeAnalysis getAnalysis() {
	return fileAnalysis;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy