Skip to content

Commit

Permalink
Augment arrayaccess node
Browse files Browse the repository at this point in the history
Co-authored-by: Sascha Kehrli <skehrli@ethz.ch>
  • Loading branch information
skehrli and Sascha Kehrli authored Oct 8, 2024
1 parent b1ff230 commit 238e276
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3123,6 +3123,7 @@ public Node visitEnhancedForLoop(EnhancedForLoopTree tree, Void p) {
handleArtificialTree(arrayAccess);
ArrayAccessNode arrayAccessNode = new ArrayAccessNode(arrayAccess, arrayNode2, indexNode2);
arrayAccessNode.setArrayExpression(expression);
arrayAccessNode.setEnhancedForLoop(tree);
arrayAccessNode.setInSource(false);
extendWithNode(arrayAccessNode);
AssignmentNode arrayAccessAssignNode =
Expand All @@ -3133,6 +3134,7 @@ public Node visitEnhancedForLoop(EnhancedForLoopTree tree, Void p) {
Node arrayAccessAssignNodeExpr = arrayAccessAssignNode.getExpression();
if (arrayAccessAssignNodeExpr instanceof ArrayAccessNode) {
((ArrayAccessNode) arrayAccessAssignNodeExpr).setArrayExpression(expression);
((ArrayAccessNode) arrayAccessAssignNodeExpr).setEnhancedForLoop(tree);
} else if (arrayAccessAssignNodeExpr instanceof MethodInvocationNode) {
// If the array component type is a primitive, there may be a boxing or unboxing
// conversion. Treat that as an iterator.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.checkerframework.dataflow.cfg.node;

import com.sun.source.tree.ArrayAccessTree;
import com.sun.source.tree.EnhancedForLoopTree;
import com.sun.source.tree.ExpressionTree;
import com.sun.source.tree.Tree;
import java.util.Arrays;
Expand Down Expand Up @@ -39,6 +40,14 @@ public class ArrayAccessNode extends Node {
*/
protected @Nullable ExpressionTree arrayExpression;

/**
* If this ArrayAccessNode is a node for an array access desugared from an enhanced for loop, then
* the {@code enhancedForLoop} field is the {@code EnhancedForLoopTree} AST node.
*
* <p>Is set by {@link #setEnhancedForLoop}.
*/
protected @Nullable EnhancedForLoopTree enhancedForLoop;

/**
* Create an ArrayAccessNode.
*
Expand Down Expand Up @@ -75,6 +84,27 @@ public void setArrayExpression(@Nullable ExpressionTree arrayExpression) {
this.arrayExpression = arrayExpression;
}

/**
* If this ArrayAccessNode is a node for an array access desugared from an enhanced for loop, then
* return the {@code EnhancedForLoopTree} AST node. Otherwise, return null.
*
* @return the {@code EnhancedForLoopTree}, or null if this is not an array access desugared from
* an enhanced for loop
*/
public @Nullable EnhancedForLoopTree getEnhancedForLoop() {
return enhancedForLoop;
}

/**
* Set the enhanced for loop from which {@code this} is desugared from.
*
* @param enhancedForLoop the {@code EnhancedForLoopTree}
* @see #getEnhancedForLoop()
*/
public void setEnhancedForLoop(@Nullable EnhancedForLoopTree enhancedForLoop) {
this.enhancedForLoop = enhancedForLoop;
}

/**
* Get the node that represents the array expression being accessed.
*
Expand Down

0 comments on commit 238e276

Please sign in to comment.