public static SymbolDeclarator getSymbolDeclarator(Node node, TypeSolver typeSolver) {
if (node instanceof FieldDeclaration) {
return new FieldSymbolDeclarator((FieldDeclaration) node, typeSolver);
} else if (node instanceof Parameter) {
return new ParameterSymbolDeclarator((Parameter) node, typeSolver);
} else if (node instanceof ExpressionStmt) {
ExpressionStmt expressionStmt = (ExpressionStmt) node;
if (expressionStmt.getExpression() instanceof VariableDeclarationExpr) {
return new VariableSymbolDeclarator((VariableDeclarationExpr) (expressionStmt.getExpression()), typeSolver);
} else {
return new NoSymbolDeclarator<>(expressionStmt, typeSolver);
}
} else if (node instanceof IfStmt) {
return new NoSymbolDeclarator<>((IfStmt) node, typeSolver);
} else if (node instanceof ForEachStmt) {
ForEachStmt foreachStmt = (ForEachStmt) node;
return new VariableSymbolDeclarator(foreachStmt.getVariable(), typeSolver);
} else {
return new NoSymbolDeclarator<>(node, typeSolver);
}
}