use of org.eclipse.n4js.n4JS.Block in project n4js by eclipse.
the class FGUtils method isCFContainer.
/**
* @return true iff the given {@link ControlFlowElement} is a container such as a function's body.
*/
public static boolean isCFContainer(EObject cfe) {
boolean isScript = cfe instanceof Script;
boolean isBlock = cfe instanceof Block;
boolean isExpression = cfe instanceof Expression;
boolean isBindingPattern = cfe instanceof BindingPattern;
if (!isScript && !isBlock && !isExpression && !isBindingPattern) {
return false;
}
EObject cfeContainer = cfe.eContainer();
EObject cfeContainer2 = (cfeContainer == null) ? null : cfeContainer.eContainer();
boolean containerIsFunctionDeclaration = cfeContainer instanceof FunctionDeclaration;
boolean containerIsFunctionDefinition = cfeContainer instanceof FunctionDefinition;
boolean containerIsFieldAccessor = cfeContainer instanceof FieldAccessor;
boolean containerIsFormalParameter = cfeContainer instanceof FormalParameter;
boolean containerIsFieldDeclaration = cfeContainer instanceof N4FieldDeclaration;
boolean containerIsAnnotationArgument = cfeContainer instanceof AnnotationArgument;
boolean containerIsLiteralOrComputedPropertyName = cfeContainer instanceof LiteralOrComputedPropertyName;
boolean containerIsExportSpecifier = cfeContainer instanceof ExportSpecifier;
boolean containerIsExportDeclaration = cfeContainer instanceof ExportDeclaration;
boolean containerIsN4ClassDefinition = cfeContainer instanceof N4ClassDefinition;
boolean container2IsN4FieldDeclaration = cfeContainer2 instanceof N4FieldDeclaration;
boolean isCFContainer = false;
isCFContainer |= isScript;
isCFContainer |= isBlock && containerIsFunctionDeclaration;
isCFContainer |= isBlock && containerIsFunctionDefinition;
isCFContainer |= isBlock && containerIsFieldAccessor;
isCFContainer |= isBindingPattern && containerIsFormalParameter;
isCFContainer |= isExpression && containerIsFormalParameter;
isCFContainer |= isExpression && containerIsFieldDeclaration;
isCFContainer |= isExpression && containerIsAnnotationArgument;
isCFContainer |= isExpression && containerIsLiteralOrComputedPropertyName && container2IsN4FieldDeclaration;
isCFContainer |= isExpression && containerIsN4ClassDefinition;
isCFContainer |= isExpression && containerIsExportSpecifier;
isCFContainer |= isExpression && containerIsExportDeclaration;
return isCFContainer;
}
use of org.eclipse.n4js.n4JS.Block in project n4js by eclipse.
the class DeadCodeAnalyser method findPrecedingStatement.
private ControlFlowElement findPrecedingStatement(ControlFlowElement cfe) {
ControlFlowElement precedingStatement = null;
Statement stmt = EcoreUtil2.getContainerOfType(cfe, Statement.class);
if (stmt != null) {
EObject stmtContainer = stmt.eContainer();
if (stmtContainer != null && stmtContainer instanceof Block) {
Block block = (Block) stmtContainer;
EList<Statement> stmts = block.getStatements();
int index = stmts.indexOf(stmt);
if (index > 0) {
precedingStatement = stmts.get(index - 1);
}
}
}
return precedingStatement;
}
Aggregations