package husacct.analyse.task.analyse.csharp; import husacct.analyse.infrastructure.antlr.csharp.CSharpLexer; import husacct.analyse.infrastructure.antlr.csharp.CSharpParser; import husacct.analyse.task.analyse.AbstractAnalyser; import husacct.analyse.task.analyse.csharp.generators.buffers.BufferService; import java.io.IOException; import org.antlr.runtime.ANTLRFileStream; import org.antlr.runtime.CommonTokenStream; public class CSharpAnalyser extends AbstractAnalyser { private ANTLRFileStream charStream; @Override public void generateModelFromSourceFile(String sourceFilePath) { try { CSharpTreeConvertController cSharpTreeParserDelegater = new CSharpTreeConvertController(this); CSharpParser cSharpParser = generateCSharpParser(sourceFilePath); int nrOfLinesOfCode = determineNumberOfLinesOfCode(); cSharpTreeParserDelegater.delegateDomainObjectGenerators(cSharpParser, sourceFilePath, nrOfLinesOfCode); } catch (Exception e) { e.printStackTrace(); } } private CSharpParser generateCSharpParser(String filePath) throws IOException { charStream = new ANTLRFileStream(filePath); CSharpLexer cSharpLexer = new CSharpLexer(charStream); CommonTokenStream commonTokenStream = new CommonTokenStream(cSharpLexer); CSharpParser cSharpParser = new CSharpParser(commonTokenStream); return cSharpParser; } private int determineNumberOfLinesOfCode() throws IOException { int linesOfCode = 0; if (charStream != null) { int size = charStream.size(); int position = 0; linesOfCode = 1; while (position < size) { String s = charStream.substring(position, position); if (s.equals("\n")) { linesOfCode ++; } position ++; } } return linesOfCode; } @Override public String getFileExtension() { return ".cs"; } @Override public void clearLambdaBuffers() { BufferService.getInstance().clear(); } }