package husacct.analyse.task.analyse.csharp.generators;
import husacct.analyse.infrastructure.antlr.csharp.CSharpParser;
import static husacct.analyse.task.analyse.csharp.generators.CSharpGeneratorToolkit.*;
import org.antlr.runtime.tree.CommonTree;
public class CSharpExceptionGenerator extends CSharpGenerator {
private String exceptionType;
private String fromClass;
private String exceptionClass;
private int lineNumber;
public void generateExceptionToDomain(CommonTree tree, String theClass) {
this.lineNumber = tree.getLine();
this.fromClass = theClass;
setExceptionType(tree);
modelService.createException(fromClass, exceptionClass, lineNumber);
}
private void setExceptionType(CommonTree tree) {
if (isCatchedException(tree)) {
this.exceptionType = "catch";
getCaughtExceptionClass(tree);
} else {
this.exceptionType = "throw";
getThrownExceptionClass(tree);
}
}
private void getThrownExceptionClass(CommonTree tree) {
CommonTree typenameTree = findHierarchicalSequenceOfTypes(tree, CSharpParser.UNARY_EXPRESSION, CSharpParser.OBJECT_CREATION_EXPRESSION, CSharpParser.TYPE);
exceptionClass = getTypeNameAndParts(typenameTree);
}
private void getCaughtExceptionClass(CommonTree tree) {
exceptionClass = getTypeNameAndParts(tree);
}
private boolean isCatchedException(CommonTree tree) {
return isOfType(tree, CSharpParser.CATCH);
}
}