Skip to content

Commit c2cd627

Browse files
committed
Code action for "The left-hand side of an assginment must be a variable"
- Add testcase and fix a disabled testcase - Update jakarta.servlet-api Signed-off-by: Roland Grunberg <rgrunber@redhat.com>
1 parent 7e962ad commit c2cd627

5 files changed

Lines changed: 57 additions & 21 deletions

File tree

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/QuickFixProcessor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
166166
case IProblem.UnresolvedVariable:
167167
UnresolvedElementsSubProcessor.getVariableProposals(context, problem, null, proposals);
168168
break;
169+
case IProblem.ExpressionShouldBeAVariable:
170+
LocalCorrectionsSubProcessor.addExpressionShouldBeAVariableProposals(context, problem, proposals);
169171
case IProblem.UninitializedBlankFinalField:
170172
UnInitializedFinalFieldBaseSubProcessor<ProposalKindWrapper> processor = new UnInitializedFinalFieldSubProcessor();
171173
processor.addProposals(context, problem, proposals);

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/corrections/proposals/LocalCorrectionsSubProcessor.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
import org.eclipse.jdt.internal.ui.text.correction.proposals.LinkedCorrectionProposalCore;
9090
import org.eclipse.jdt.internal.ui.text.correction.proposals.MissingAnnotationAttributesProposalCore;
9191
import org.eclipse.jdt.internal.ui.text.correction.proposals.ModifierChangeCorrectionProposalCore;
92+
import org.eclipse.jdt.internal.ui.text.correction.proposals.NewLocalVariableCorrectionProposalCore;
9293
import org.eclipse.jdt.internal.ui.text.correction.proposals.NewMethodCorrectionProposalCore;
9394
import org.eclipse.jdt.internal.ui.text.correction.proposals.NewVariableCorrectionProposalCore;
9495
import org.eclipse.jdt.internal.ui.text.correction.proposals.RefactoringCorrectionProposalCore;
@@ -837,6 +838,10 @@ public static void addValueForAnnotationProposals(IInvocationContext context, IP
837838
new LocalCorrectionsSubProcessor().getValueForAnnotationProposals(context, problem, proposals);
838839
}
839840

841+
public static void addExpressionShouldBeAVariableProposals(IInvocationContext context, IProblemLocation problem, Collection<ProposalKindWrapper> proposals) {
842+
new LocalCorrectionsSubProcessor().getExpressionShouldBeAVariableProposalsBase(context, problem, proposals);
843+
}
844+
840845
@Override
841846
protected ProposalKindWrapper refactoringCorrectionProposalToT(RefactoringCorrectionProposalCore core, int uid) {
842847
return CodeActionHandler.wrap(core, CodeActionKind.QuickFix);
@@ -912,4 +917,9 @@ protected ProposalKindWrapper modifierChangeCorrectionProposalToT(ModifierChange
912917
return CodeActionHandler.wrap(core, CodeActionKind.QuickFix);
913918
}
914919

920+
@Override
921+
protected ProposalKindWrapper newLocalVariableCorrectionProposalToT(NewLocalVariableCorrectionProposalCore core, int uid) {
922+
return CodeActionHandler.wrap(core, CodeActionKind.QuickFix);
923+
}
924+
915925
}

org.eclipse.jdt.ls.product/languageServer.product

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
<plugins>
2424
<plugin id="ch.qos.logback.classic"/>
2525
<plugin id="ch.qos.logback.core"/>
26-
<plugin id="jakarta.servlet-api" version="5.0.0"/>
26+
<plugin id="jakarta.servlet-api"/>
2727
<plugin id="org.apache.commons.commons-codec"/>
2828
<plugin id="org.apache.felix.scr"/>
2929
<plugin id="org.eclipse.ant.core"/>

org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@
6666
<dependency>
6767
<groupId>jakarta.servlet</groupId>
6868
<artifactId>jakarta.servlet-api</artifactId>
69-
<version>5.0.0</version>
69+
<version>6.1.0</version>
7070
<type>jar</type>
7171
</dependency>
7272
</dependencies>
7373
</location>
7474
</locations>
7575
<targetJRE path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-24"/>
76-
</target>
76+
</target>

org.eclipse.jdt.ls.tests/src/org/eclipse/jdt/ls/core/internal/correction/LocalCorrectionQuickFixTest.java

Lines changed: 42 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2720,16 +2720,16 @@ public void testRemoveUnreachableCodeMultiStatementsSwitch() throws Exception {
27202720
buf.append("public class E {\n");
27212721
buf.append(" public void foo() {\n");
27222722
buf.append(" switch (1) {\n");
2723-
buf.append(" case 1:\n");
2724-
buf.append(" foo();\n");
2725-
buf.append(" break;\n");
2726-
buf.append(" foo();\n");
2727-
buf.append(" new Object();\n");
2728-
buf.append(" case 2:\n");
2729-
buf.append(" foo();\n");
2730-
buf.append(" break;\n");
2731-
buf.append(" default:\n");
2732-
buf.append(" break;\n");
2723+
buf.append(" case 1:\n");
2724+
buf.append(" foo();\n");
2725+
buf.append(" break;\n");
2726+
buf.append(" foo();\n");
2727+
buf.append(" new Object();\n");
2728+
buf.append(" case 2:\n");
2729+
buf.append(" foo();\n");
2730+
buf.append(" break;\n");
2731+
buf.append(" default:\n");
2732+
buf.append(" break;\n");
27332733
buf.append(" };\n");
27342734
buf.append(" }\n");
27352735
buf.append("}\n");
@@ -2740,18 +2740,42 @@ public void testRemoveUnreachableCodeMultiStatementsSwitch() throws Exception {
27402740
buf.append("public class E {\n");
27412741
buf.append(" public void foo() {\n");
27422742
buf.append(" switch (1) {\n");
2743-
buf.append(" case 1:\n");
2744-
buf.append(" foo();\n");
2745-
buf.append(" break;\n");
2746-
buf.append(" case 2:\n");
2747-
buf.append(" foo();\n");
2748-
buf.append(" break;\n");
2749-
buf.append(" default:\n");
2750-
buf.append(" break;\n");
2743+
buf.append(" case 1:\n");
2744+
buf.append(" foo();\n");
2745+
buf.append(" break;\n");
2746+
buf.append(" case 2:\n");
2747+
buf.append(" foo();\n");
2748+
buf.append(" break;\n");
2749+
buf.append(" default:\n");
2750+
buf.append(" break;\n");
27512751
buf.append(" };\n");
27522752
buf.append(" }\n");
27532753
buf.append("}\n");
27542754
Expected e1 = new Expected("Remove", buf.toString());
2755+
assertCodeActionExists(cu, e1);
2756+
}
2757+
2758+
@Test
2759+
public void testExpressionShouldBeVariable() throws Exception {
2760+
IPackageFragment pack1 = fSourceFolder.createPackageFragment("test1", false, null);
2761+
StringBuilder buf = new StringBuilder();
2762+
buf.append("package test1;\n"
2763+
+ "public class E {\n"
2764+
+ " public static void foo (String input) {\n"
2765+
+ " ((String)input);\n"
2766+
+ " }\n"
2767+
+ "}");
2768+
ICompilationUnit cu = pack1.createCompilationUnit("E.java", buf.toString(), false, null);
2769+
2770+
buf = new StringBuilder();
2771+
buf.append("package test1;\n"
2772+
+ "public class E {\n"
2773+
+ " public static void foo (String input) {\n"
2774+
+ " String string = (String)input;\n"
2775+
+ " }\n"
2776+
+ "}");
2777+
Expected e1 = new Expected("Create local variable using expression", buf.toString());
2778+
assertCodeActionExists(cu, e1);
27552779
}
27562780

27572781
}

0 commit comments

Comments
 (0)