sarveshkesharwani commented on a change in pull request #1071: [NETBEANS-1728] 
fix for Exception encountered when break returns value
URL: 
https://github.com/apache/incubator-netbeans/pull/1071#discussion_r249684485
 
 

 ##########
 File path: 
java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/MarkOccurrencesHighlighterBase.java
 ##########
 @@ -499,42 +501,61 @@ protected final synchronized void resume() {
 
     private List<int[]> detectBreakOrContinueTarget(CompilationInfo info, 
Document document, TreePath breakOrContinue, int caretPosition) {
         List<int[]> result = new ArrayList<int[]>();
-        StatementTree target = 
info.getTreeUtilities().getBreakContinueTarget(breakOrContinue);
+        Tree target = 
info.getTreeUtilities().getBreakContinueTargetTree(breakOrContinue);
 
         if (target == null)
             return null;
-
+        
         TokenSequence<JavaTokenId> ts = 
info.getTokenHierarchy().tokenSequence(JavaTokenId.language());
         
         ts.move((int) 
info.getTrees().getSourcePositions().getStartPosition(info.getCompilationUnit(),
 target));
 
         if (ts.moveNext()) {
             result.add(new int[] {ts.offset(), ts.offset() + 
ts.token().length()});
         }
-
-        StatementTree statement = target.getKind() == Kind.LABELED_STATEMENT ? 
((LabeledStatementTree) target).getStatement() : target;
+        StatementTree targetStatementTree = null;
+        ExpressionTree targetExpressionTree = null;
+        if (target instanceof StatementTree) {
+            targetStatementTree = target.getKind() == Kind.LABELED_STATEMENT ? 
 ((LabeledStatementTree) target).getStatement() : (StatementTree) target;
+        } else if (target instanceof ExpressionTree) {
+            targetExpressionTree = (ExpressionTree) target;
+        }
         Tree block = null;
-
-        switch (statement.getKind()) {
-            case SWITCH:
-                block = statement;
-                break;
-            case WHILE_LOOP:
-                if (((WhileLoopTree) statement).getStatement().getKind() == 
Kind.BLOCK)
-                    block = ((WhileLoopTree) statement).getStatement();
-                break;
-            case FOR_LOOP:
-                if (((ForLoopTree) statement).getStatement().getKind() == 
Kind.BLOCK)
-                    block = ((ForLoopTree) statement).getStatement();
-                break;
-            case ENHANCED_FOR_LOOP:
-                if (((EnhancedForLoopTree) statement).getStatement().getKind() 
== Kind.BLOCK)
-                    block = ((EnhancedForLoopTree) statement).getStatement();
-                break;
-            case DO_WHILE_LOOP:
-                if (((DoWhileLoopTree) statement).getStatement().getKind() == 
Kind.BLOCK)
-                    block = ((DoWhileLoopTree) statement).getStatement();
-                break;
+        
+        if (targetStatementTree != null) {
+            switch (targetStatementTree.getKind()) {
+                case SWITCH:
+                    block = targetStatementTree;
+                    break;
+                case WHILE_LOOP:
+                    if (((WhileLoopTree) 
targetStatementTree).getStatement().getKind() == Kind.BLOCK)
+                        block = ((WhileLoopTree) 
targetStatementTree).getStatement();
+                    break;
+                case FOR_LOOP:
+                    if (((ForLoopTree) 
targetStatementTree).getStatement().getKind() == Kind.BLOCK)
+                        block = ((ForLoopTree) 
targetStatementTree).getStatement();
+                    break;
+                case ENHANCED_FOR_LOOP:
+                    if (((EnhancedForLoopTree) 
targetStatementTree).getStatement().getKind() == Kind.BLOCK)
+                        block = ((EnhancedForLoopTree) 
targetStatementTree).getStatement();
+                    break;
+                case DO_WHILE_LOOP:
+                    if (((DoWhileLoopTree) 
targetStatementTree).getStatement().getKind() == Kind.BLOCK)
+                        block = ((DoWhileLoopTree) 
targetStatementTree).getStatement();
+                    break;
+            }
+        // No need to check for version of JDK, as targetExpressionTree can 
only be non-null in case of JDK-12 or higher
+        } else if (targetExpressionTree != null) {
+            try {
 
 Review comment:
   @jlahoda , you're right. body = targetExpressionTree does work. There is no 
need here to look for getExpression, or getStatement here. So, this does take 
reflection out of the picture itself. I have made the necessary changes in the 
latest commit.

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to