Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 571661

Summary: [switch] AIOOBE on invoking create local variable quick fix
Product: [Eclipse Project] JDT Reporter: Noopur Gupta <noopur_gupta>
Component: UIAssignee: Kalyan Prasad Tatavarthi <kalyan_prasad>
Status: RESOLVED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: kalyan_prasad
Version: 4.19   
Target Milestone: BETA J16   
Hardware: All   
OS: All   
See Also: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/177200
https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=0acd3b8242feaa730f370a5920076f8e90a6f6ac
Whiteboard:

Description Noopur Gupta CLA 2021-03-03 11:31:10 EST
I20210223-0650

package pkg;

public class Snippet {
	public static void main(String[] args) {
		int a = 0;
		switch (a) {
		case value -> 1;

		default -> throw new IllegalArgumentException("Unexpected value: " + "a");
		}
	}
}

- Invoke create local variable quick fix at 'value'. We get this exception:

java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 5
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$ParagraphListRewriter.getNode(ASTRewriteAnalyzer.java:1138)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$SwitchListLabeledRuleRewriter.getNodeIndent(ASTRewriteAnalyzer.java:3659)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$ListRewriter.rewriteList(ASTRewriteAnalyzer.java:668)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$ListRewriter.rewriteList(ASTRewriteAnalyzer.java:823)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer.visit(ASTRewriteAnalyzer.java:3831)
	at org.eclipse.jdt.core.dom.SwitchStatement.accept0(SwitchStatement.java:161)
	at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:3012)
	at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.internalRewriteAST(ASTRewrite.java:307)
	at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.rewriteAST(ASTRewrite.java:296)
	at org.eclipse.jdt.ui.text.java.correction.ASTRewriteCorrectionProposal.addEdits(ASTRewriteCorrectionProposal.java:116)
	at org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal.createTextChange(CUCorrectionProposal.java:196)
	at org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal.createChange(CUCorrectionProposal.java:203)
	at org.eclipse.jdt.ui.text.java.correction.ChangeCorrectionProposal.getChange(ChangeCorrectionProposal.java:341)
	at org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal.getTextChange(CUCorrectionProposal.java:214)
	at org.eclipse.jdt.core.manipulation.CUCorrectionProposalCore.getAdditionalProposalInfo(CUCorrectionProposalCore.java:132)
	at org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal.getAdditionalProposalInfo(CUCorrectionProposal.java:138)
Comment 1 Kalyan Prasad Tatavarthi CLA 2021-03-05 01:47:23 EST
This quick fix should not be provided here as a case expression should be a constant expression. So creation of a variable here does not fix the problem.
Comment 2 Eclipse Genie CLA 2021-03-05 03:01:50 EST
New Gerrit change created: https://git.eclipse.org/r/c/jdt/eclipse.jdt.ui/+/177200