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

Bug 545112

Summary: [12][extract method] Incorrect extract of switch case node
Product: [Eclipse Project] JDT Reporter: Noopur Gupta <noopur_gupta>
Component: UIAssignee: Noopur Gupta <noopur_gupta>
Status: VERIFIED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: noopur_gupta
Version: 4.11   
Target Milestone: 4.12 M3   
Hardware: All   
OS: All   
See Also: https://git.eclipse.org/r/140662
https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=b938bef6791070b69196456372befc51ea8388b9
https://git.eclipse.org/r/140669
https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=30bf46684b5aaefea08f8b2bf98e2b43ff3c5af9
https://git.eclipse.org/r/140932
https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=c4aea0588954b9382f470c6cdf082daa4421b5d1
Whiteboard:
Bug Depends on:    
Bug Blocks: 545120    

Description Noopur Gupta CLA 2019-03-06 04:15:00 EST
String foo(Day day) {
	var today = switch (day) {
		case SATURDAY,SUNDAY: break "Weekend day";
		case MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY: break "Working day";
		default:
			throw new IllegalArgumentException("Invalid day: " + day.name());
	};
	return today;
}

- Select "case SATURDAY,SUNDAY:" and extract to a method. We get:
...
Caused by: java.lang.IllegalArgumentException: SwitchCase has no property expression
	at org.eclipse.jdt.internal.core.dom.rewrite.RewriteEventStore.validateHasChildProperty(RewriteEventStore.java:868)
	at org.eclipse.jdt.internal.core.dom.rewrite.RewriteEventStore.getEvent(RewriteEventStore.java:392)
	at org.eclipse.jdt.internal.core.dom.rewrite.RewriteEventStore.getNewValue(RewriteEventStore.java:525)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.getAttribute(ASTRewriteFlattener.java:187)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.getChildNode(ASTRewriteFlattener.java:175)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.visit(ASTRewriteFlattener.java:965)
	at org.eclipse.jdt.core.dom.SwitchCase.accept0(SwitchCase.java:197)
	at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2845)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.visitList(ASTRewriteFlattener.java:196)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.visit(ASTRewriteFlattener.java:340)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFormatter$ExtendedFlattener.visit(ASTRewriteFormatter.java:90)
	at org.eclipse.jdt.core.dom.Block.accept0(Block.java:126)
	at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2845)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFlattener.visit(ASTRewriteFlattener.java:731)
	at org.eclipse.jdt.core.dom.MethodDeclaration.accept0(MethodDeclaration.java:593)
	at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2845)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteFormatter.getFormattedResult(ASTRewriteFormatter.java:176)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer.doTextInsert(ASTRewriteAnalyzer.java:1382)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$ListRewriter.rewriteList(ASTRewriteAnalyzer.java:674)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer$ListRewriter.rewriteList(ASTRewriteAnalyzer.java:817)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer.rewriteParagraphList(ASTRewriteAnalyzer.java:1193)
	at org.eclipse.jdt.internal.core.dom.rewrite.ASTRewriteAnalyzer.visit(ASTRewriteAnalyzer.java:1842)
	at org.eclipse.jdt.core.dom.TypeDeclaration.accept0(TypeDeclaration.java:430)
	at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2845)
	at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.internalRewriteAST(ASTRewrite.java:305)
	at org.eclipse.jdt.core.dom.rewrite.ASTRewrite.rewriteAST(ASTRewrite.java:294)
	at org.eclipse.jdt.internal.corext.refactoring.code.ExtractMethodRefactoring.createChange(ExtractMethodRefactoring.java:552)
...

It should not allow to extract the selected switch case node.
Comment 1 Eclipse Genie CLA 2019-04-16 06:13:54 EDT
New Gerrit change created: https://git.eclipse.org/r/140662
Comment 3 Noopur Gupta CLA 2019-04-16 07:26:39 EDT
TODO: Add tests.
Comment 4 Eclipse Genie CLA 2019-04-16 07:28:00 EDT
New Gerrit change created: https://git.eclipse.org/r/140669
Comment 5 Eclipse Genie CLA 2019-04-16 07:33:13 EDT
Gerrit change https://git.eclipse.org/r/140669 was merged to [BETA_JAVA_12].
Commit: http://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=30bf46684b5aaefea08f8b2bf98e2b43ff3c5af9
Comment 6 Eclipse Genie CLA 2019-04-22 04:58:48 EDT
New Gerrit change created: https://git.eclipse.org/r/140932
Comment 8 Noopur Gupta CLA 2019-05-23 04:43:51 EDT
Verified in I20190522-1800.