@@ -45,65 +45,105 @@ public List<Tree.Kind> nodesToVisit() {
4545 }
4646
4747 @ Override
48- public void visitNode (Tree tree ) {
48+ public void visitNode (@ SuppressWarnings ( "NullableProblems" ) Tree tree ) {
4949
50- TryStatementTree tryStatement = (TryStatementTree ) tree ;
50+ if (!(tree instanceof TryStatementTree tryStatement )) {
51+ return ;
52+ }
5153
5254 // parcours des statements du bloc try
53- visitStatementsList (tryStatement .block ().statements ());
55+ if (tryStatement .block () != null ) {
56+ visitStatementsList (tryStatement .block ().statements ());
57+ }
5458
5559 }
5660
5761 private void visitStatementsList (List <StatementTree > lstStmts ) {
62+ if (lstStmts == null || lstStmts .isEmpty ()) {
63+ return ;
64+ }
5865 for (StatementTree stmt : lstStmts ){
66+ if (stmt == null ) {
67+ continue ;
68+ }
5969 Tree .Kind kind = stmt .getKind ();
6070 switch (kind ) {
6171 case EXPRESSION_STATEMENT -> visitExpressionStatement (((ExpressionStatementTree ) stmt ).expression ());
62- case BLOCK -> visitStatementsList (((BlockTree ) stmt ).statements ());
72+ case BLOCK -> visitIfNotNullStatements (((BlockTree ) stmt ).statements ());
6373 case IF_STATEMENT , ALTERNATIVE_IF_STATEMENT -> visitIfStatement ((IfStatementTree ) stmt );
64- case FOR_STATEMENT , ALTERNATIVE_FOR_STATEMENT -> visitStatementsList (((ForStatementTree ) stmt ).statements ());
65- case WHILE_STATEMENT , ALTERNATIVE_WHILE_STATEMENT -> visitStatementsList (((WhileStatementTree ) stmt ).statements ());
74+ case FOR_STATEMENT , ALTERNATIVE_FOR_STATEMENT -> visitIfNotNullStatements (((ForStatementTree ) stmt ).statements ());
75+ case WHILE_STATEMENT , ALTERNATIVE_WHILE_STATEMENT -> visitIfNotNullStatements (((WhileStatementTree ) stmt ).statements ());
6676 case DO_WHILE_STATEMENT -> visitStatementsList (Collections .singletonList (((DoWhileStatementTree ) stmt ).statement ()));
67- case FOREACH_STATEMENT , ALTERNATIVE_FOREACH_STATEMENT -> visitStatementsList (((ForEachStatementTree ) stmt ).statements ());
68- case CASE_CLAUSE -> visitStatementsList (((CaseClauseTree ) stmt ).statements ());
77+ case FOREACH_STATEMENT , ALTERNATIVE_FOREACH_STATEMENT -> visitIfNotNullStatements (((ForEachStatementTree ) stmt ).statements ());
78+ case CASE_CLAUSE -> visitIfNotNullStatements (((CaseClauseTree ) stmt ).statements ());
6979 case SWITCH_STATEMENT -> visitSwitchStatement ((SwitchStatementTree ) stmt );
70- case DEFAULT_CLAUSE -> visitStatementsList (((DefaultClauseTree ) stmt ).statements ());
80+ case DEFAULT_CLAUSE -> visitIfNotNullStatements (((DefaultClauseTree ) stmt ).statements ());
7181 case TRY_STATEMENT -> visitTryStatement ((TryStatementTree ) stmt );
82+ default -> {
83+ // Nothing to visit for unsupported statement kinds.
84+ }
7285 }
7386 }
7487 }
7588
89+ private void visitIfNotNullStatements (List <StatementTree > statements ) {
90+ if (statements != null ) {
91+ visitStatementsList (statements );
92+ }
93+ }
94+
7695 private void visitIfStatement (IfStatementTree ifStatement ) {
96+ if (ifStatement == null ) {
97+ return ;
98+ }
7799 visitStatementsList (ifStatement .statements ());
78100
79- if (ifStatement .elseClause () != null ) {
80- visitStatementsList (ifStatement .elseClause ().statements ());
101+ ElseClauseTree elseClause = ifStatement .elseClause ();
102+ if (elseClause != null ) {
103+ visitIfNotNullStatements (elseClause .statements ());
81104 }
82105
83- if (ifStatement .elseifClauses () != null ) {
84- for (ElseifClauseTree stmtElseIf : ifStatement .elseifClauses ()) {
85- visitStatementsList (stmtElseIf .statements ());
106+ List <ElseifClauseTree > elseIfClauses = ifStatement .elseifClauses ();
107+ if (elseIfClauses != null ) {
108+ for (ElseifClauseTree stmtElseIf : elseIfClauses ) {
109+ if (stmtElseIf != null ) {
110+ visitIfNotNullStatements (stmtElseIf .statements ());
111+ }
86112 }
87113 }
88114 }
89115
90116 private void visitTryStatement (TryStatementTree tryStatement ) {
117+ if (tryStatement == null ) {
118+ return ;
119+ }
91120 for (CatchBlockTree stmtCatch : tryStatement .catchBlocks ()) {
92- visitStatementsList (stmtCatch .block ().statements ());
121+ if (stmtCatch .block () != null ) {
122+ visitIfNotNullStatements (stmtCatch .block ().statements ());
123+ }
93124 }
94125
95- if (tryStatement .finallyBlock () != null ) {
96- visitStatementsList (tryStatement .finallyBlock ().statements ());
126+ var finallyBlock = tryStatement .finallyBlock ();
127+ if (finallyBlock != null ) {
128+ visitIfNotNullStatements (finallyBlock .statements ());
97129 }
98130 }
99131
100132 private void visitSwitchStatement (SwitchStatementTree switchStatement ) {
133+ if (switchStatement == null || switchStatement .cases () == null ) {
134+ return ;
135+ }
101136 for (SwitchCaseClauseTree switchCaseStmt : switchStatement .cases ()) {
102- visitStatementsList (switchCaseStmt .statements ());
137+ if (switchCaseStmt != null && switchCaseStmt .statements () != null ) {
138+ visitIfNotNullStatements (switchCaseStmt .statements ());
139+ }
103140 }
104141 }
105142
106143 private void visitExpressionStatement (ExpressionTree exprTree ){
144+ if (exprTree == null ) {
145+ return ;
146+ }
107147 if (exprTree .is (Tree .Kind .FUNCTION_CALL )) { // si directement "function call"
108148 visitCallExpression ((FunctionCallTree ) exprTree );
109149 } else if (exprTree .is (Tree .Kind .ASSIGNMENT )) { // ou si assignment
@@ -124,8 +164,10 @@ private void visitCallExpression(FunctionCallTree functionCall){
124164 }
125165
126166 private String getFunctionNameFromCallExpression (FunctionCallTree functionCall ) {
127- NamespaceNameTree nspTree = (NamespaceNameTree )functionCall .callee ();
128- return nspTree != null && nspTree .fullName () != null ? nspTree .fullName () : "" ;
167+ if (functionCall == null || !(functionCall .callee () instanceof NamespaceNameTree nspTree )) {
168+ return "" ;
169+ }
170+ return nspTree .fullName () != null ? nspTree .fullName () : "" ;
129171 }
130172
131173}
0 commit comments