Skip to content

Commit 8cef091

Browse files
committed
Add new quick-fixes
- add new methods to ModifierCorrectionSubProcessor and enable quick-fixes that call them in QuickFixProcessor - add new TypeArgumentMismatchSubProcessor class and enable quick-fix that uses it - add new tests to ModifierCorrectionsQuickFixTest and add new TypeArgumentMismatchCorrectionTest
1 parent df585c3 commit 8cef091

5 files changed

Lines changed: 467 additions & 25 deletions

File tree

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

Lines changed: 15 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* Copyright (c) 2000, 2025 IBM Corporation and others.
2+
* Copyright (c) 2000, 2026 IBM Corporation and others.
33
* All rights reserved. This program and the accompanying materials
44
* are made available under the terms of the Eclipse Public License 2.0
55
* which accompanies this distribution, and is available at
@@ -75,6 +75,7 @@
7575
import org.eclipse.jdt.ls.core.internal.handlers.OrganizeImportsHandler;
7676
import org.eclipse.jdt.ls.core.internal.text.correction.ModifierCorrectionSubProcessor;
7777
import org.eclipse.jdt.ls.core.internal.text.correction.NullAnnotationsCorrectionProcessor;
78+
import org.eclipse.jdt.ls.core.internal.text.correction.TypeArgumentMismatchSubProcessor;
7879
import org.eclipse.jdt.ls.core.internal.text.correction.VarargsWarningsSubProcessor;
7980
import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
8081
import org.eclipse.jdt.ui.text.java.IInvocationContext;
@@ -453,34 +454,23 @@ private void process(CodeActionParams params, IInvocationContext context, IProbl
453454
case IProblem.DeadCode:
454455
LocalCorrectionsSubProcessor.getUnreachableCodeProposals(context, problem, proposals);
455456
break;
456-
// case IProblem.DiamondNotBelow17:
457-
// TypeArgumentMismatchSubProcessor.getInferDiamondArgumentsProposal(context,
458-
// problem, proposals);
459-
// //$FALL-THROUGH$
460-
// case IProblem.LambdaExpressionNotBelow18:
461-
// LocalCorrectionsSubProcessor.getConvertLambdaToAnonymousClassCreationsProposals(context,
462-
// problem, proposals);
463-
// //$FALL-THROUGH$
464-
// case IProblem.NonGenericType:
465-
// TypeArgumentMismatchSubProcessor.removeMismatchedArguments(context,
466-
// problem, proposals);
467-
// break;
468-
// case IProblem.MissingOverrideAnnotation:
469-
// case
470-
// IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation:
471-
// ModifierCorrectionSubProcessor.addOverrideAnnotationProposal(context,
472-
// problem, proposals);
473-
// break;
457+
case IProblem.NonGenericType:
458+
TypeArgumentMismatchSubProcessor.removeMismatchedArguments(context, problem, proposals);
459+
break;
460+
case IProblem.MissingOverrideAnnotation:
461+
case IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation:
462+
ModifierCorrectionSubProcessor.addOverrideAnnotationProposal(context, problem, proposals);
463+
break;
474464
case IProblem.MethodMustOverride:
475465
case IProblem.MethodMustOverrideOrImplement:
476466
ModifierCorrectionSubProcessor.removeOverrideAnnotationProposal(context, problem, proposals);
477467
break;
478-
// case IProblem.FieldMissingDeprecatedAnnotation:
479-
// case IProblem.MethodMissingDeprecatedAnnotation:
480-
// case IProblem.TypeMissingDeprecatedAnnotation:
481-
// ModifierCorrectionSubProcessor.addDeprecatedAnnotationProposal(context,
482-
// problem, proposals);
483-
// break;
468+
case IProblem.FieldMissingDeprecatedAnnotation:
469+
case IProblem.MethodMissingDeprecatedAnnotation:
470+
case IProblem.TypeMissingDeprecatedAnnotation:
471+
case IProblem.MemberOfDeprecatedTypeNotDeprecated:
472+
ModifierCorrectionSubProcessor.addDeprecatedAnnotationProposal(context, problem, proposals);
473+
break;
484474
case IProblem.OverridingDeprecatedMethod:
485475
case IProblem.OverridingDeprecatedSinceVersionMethod:
486476
case IProblem.OverridingTerminallyDeprecatedMethod:

org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/text/correction/ModifierCorrectionSubProcessor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@
3838

3939
public class ModifierCorrectionSubProcessor extends ModifierCorrectionSubProcessorCore<ProposalKindWrapper> {
4040

41+
public static void addOverrideAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection<ProposalKindWrapper> proposals) {
42+
new ModifierCorrectionSubProcessor().getOverrideAnnotationProposal(context, problem, proposals);
43+
}
44+
45+
public static void addDeprecatedAnnotationProposal(IInvocationContext context, IProblemLocation problem, Collection<ProposalKindWrapper> proposals) {
46+
new ModifierCorrectionSubProcessor().getDeprecatedAnnotationProposal(context, problem, proposals);
47+
}
48+
4149
public static void addNonAccessibleReferenceProposal(IInvocationContext context, IProblemLocation problem, Collection<ProposalKindWrapper> proposals, int kind, int relevance) throws CoreException {
4250
new ModifierCorrectionSubProcessor().getNonAccessibleReferenceProposal(context, problem, proposals, kind, relevance);
4351
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2026 IBM Corporation and others.
3+
* All rights reserved. This program and the accompanying materials
4+
* are made available under the terms of the Eclipse Public License 2.0
5+
* which accompanies this distribution, and is available at
6+
* http://www.eclipse.org/legal/epl-2.0
7+
*
8+
* SPDX-License-Identifier: EPL-2.0
9+
*
10+
* Contributors:
11+
* IBM Corporation - initial API and implementation
12+
* Red Hat Inc. - modified for jdt.ls
13+
*******************************************************************************/
14+
package org.eclipse.jdt.ls.core.internal.text.correction;
15+
16+
import java.util.Collection;
17+
18+
import org.eclipse.jdt.internal.ui.text.correction.TypeArgumentMismatchBaseSubProcessor;
19+
import org.eclipse.jdt.ls.core.internal.corrections.ProposalKindWrapper;
20+
import org.eclipse.jdt.ls.core.internal.handlers.CodeActionHandler;
21+
import org.eclipse.jdt.ui.text.java.IInvocationContext;
22+
import org.eclipse.jdt.ui.text.java.IProblemLocation;
23+
import org.eclipse.jdt.ui.text.java.correction.ASTRewriteCorrectionProposalCore;
24+
import org.eclipse.lsp4j.CodeActionKind;
25+
26+
public class TypeArgumentMismatchSubProcessor extends TypeArgumentMismatchBaseSubProcessor<ProposalKindWrapper> {
27+
28+
public static void removeMismatchedArguments(IInvocationContext context, IProblemLocation problem, Collection<ProposalKindWrapper> proposals) {
29+
new TypeArgumentMismatchSubProcessor().addRemoveMismatchedArgumentProposals(context, problem, proposals);
30+
}
31+
32+
private TypeArgumentMismatchSubProcessor() {
33+
}
34+
35+
@Override
36+
public ProposalKindWrapper astRewriteCorrectionProposalToT(ASTRewriteCorrectionProposalCore core) {
37+
return CodeActionHandler.wrap(core, CodeActionKind.QuickFix);
38+
}
39+
40+
}

0 commit comments

Comments
 (0)