From 8cccc50b97c49907e2c064c4e3252a59a04e93c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 7 May 2008 16:18:03 -0700 Subject: [PATCH] fix selection for left side of a assignment such as "a = b + c" --- .../cs/bodik/svelte/slicers/JavaLanguage.java | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/Svelte/src/edu/berkeley/cs/bodik/svelte/slicers/JavaLanguage.java b/Svelte/src/edu/berkeley/cs/bodik/svelte/slicers/JavaLanguage.java index 6a3f9e9..5dfff6f 100644 --- a/Svelte/src/edu/berkeley/cs/bodik/svelte/slicers/JavaLanguage.java +++ b/Svelte/src/edu/berkeley/cs/bodik/svelte/slicers/JavaLanguage.java @@ -371,17 +371,14 @@ public class JavaLanguage implements ILanguage { return CGNodeUtils.getNthArrayStoreStatementFromOffset(cgn, parent.getStartPosition(), parent.getStartPosition()+parent.getLength(), substatementIndex, SSAArrayStoreInstruction.class); - } - - if (parent.getNodeType() == ASTNode.ARRAY_CREATION) { + } else if (parent.getNodeType() == ASTNode.ARRAY_CREATION) { ArrayCreation ac = (ArrayCreation) covering.getParent(); substatementIndex = ac.dimensions().indexOf(covering); if (substatementIndex != -1) { position.offsetStart = ac.getStartPosition(); position.offsetEnd = ac.getStartPosition() + ac.getLength(); } - } - else if (parent.getNodeType() == ASTNode.INFIX_EXPRESSION) { + } else if (parent.getNodeType() == ASTNode.INFIX_EXPRESSION) { InfixExpression ie = (InfixExpression) covering.getParent(); if ( covering == ie.getLeftOperand() ) { substatementIndex = 0; @@ -490,6 +487,20 @@ public class JavaLanguage implements ILanguage { } substatementIndex = 0; } + } else if ( parent.getNodeType() == ASTNode.ASSIGNMENT ) { + Assignment assign = (Assignment) parent; + if ( assign.getLeftHandSide() == covering ) { + // slice on value of right hand side + Expression rhs = assign.getRightHandSide(); + // go past parentheses to get to the real value + while ( rhs.getNodeType() == ASTNode.PARENTHESIZED_EXPRESSION ) + rhs = ((ParenthesizedExpression)rhs).getExpression(); + position.offsetStart = rhs.getStartPosition(); + position.offsetEnd = rhs.getStartPosition() + rhs.getLength(); + } + // else + // right hand side, give warning + } if (substatementIndex != -1) { -- 2.11.4.GIT