1 /*******************************************************************************
2 * Copyright (c) 2000, 2012 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 v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 * Benjamin Muskalla <b.muskalla@gmx.net> - [quick fix] Quick fix for missing synchronized modifier - https://bugs.eclipse.org/bugs/show_bug.cgi?id=245250
11 *******************************************************************************/
12 package org.eclipse.jdt.internal.ui.text.correction;
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.HashSet;
18 import org.eclipse.core.runtime.CoreException;
20 import org.eclipse.jdt.core.IBuffer;
21 import org.eclipse.jdt.core.ICompilationUnit;
22 import org.eclipse.jdt.core.JavaCore;
23 import org.eclipse.jdt.core.JavaModelException;
24 import org.eclipse.jdt.core.compiler.IProblem;
26 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
28 import org.eclipse.jdt.ui.text.java.IInvocationContext;
29 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
30 import org.eclipse.jdt.ui.text.java.IProblemLocation;
31 import org.eclipse.jdt.ui.text.java.IQuickFixProcessor;
32 import org.eclipse.jdt.ui.text.java.correction.ICommandAccess;
34 import org.eclipse.jdt.internal.ui.fix.NullQuickFixes;
35 import org.eclipse.jdt.internal.ui.text.correction.proposals.ReplaceCorrectionProposal;
36 import org.eclipse.jdt.internal.ui.text.correction.proposals.TaskMarkerProposal;
40 public class QuickFixProcessor implements IQuickFixProcessor {
43 public boolean hasCorrections(ICompilationUnit cu, int problemId) {
45 case IProblem.UnterminatedString:
46 case IProblem.UnusedImport:
47 case IProblem.DuplicateImport:
48 case IProblem.CannotImportPackage:
49 case IProblem.ConflictingImport:
50 case IProblem.ImportNotFound:
51 case IProblem.UndefinedMethod:
52 case IProblem.UndefinedConstructor:
53 case IProblem.ParameterMismatch:
54 case IProblem.MethodButWithConstructorName:
55 case IProblem.UndefinedField:
56 case IProblem.UndefinedName:
57 case IProblem.UnresolvedVariable:
58 case IProblem.PublicClassMustMatchFileName:
59 case IProblem.PackageIsNotExpectedPackage:
60 case IProblem.UndefinedType:
61 case IProblem.TypeMismatch:
62 case IProblem.UnhandledException:
63 case IProblem.UnhandledExceptionOnAutoClose:
64 case IProblem.UnreachableCatch:
65 case IProblem.InvalidCatchBlockSequence:
66 case IProblem.InvalidUnionTypeReferenceSequence:
67 case IProblem.VoidMethodReturnsValue:
68 case IProblem.ShouldReturnValue:
69 case IProblem.ShouldReturnValueHintMissingDefault:
70 case IProblem.MissingReturnType:
71 case IProblem.NonExternalizedStringLiteral:
72 case IProblem.NonStaticAccessToStaticField:
73 case IProblem.NonStaticAccessToStaticMethod:
74 case IProblem.StaticMethodRequested:
75 case IProblem.NonStaticFieldFromStaticInvocation:
76 case IProblem.InstanceMethodDuringConstructorInvocation:
77 case IProblem.InstanceFieldDuringConstructorInvocation:
78 case IProblem.NotVisibleMethod:
79 case IProblem.NotVisibleConstructor:
80 case IProblem.NotVisibleType:
81 case IProblem.NotVisibleField:
82 case IProblem.BodyForAbstractMethod:
83 case IProblem.AbstractMethodInAbstractClass:
84 case IProblem.AbstractMethodMustBeImplemented:
85 case IProblem.EnumAbstractMethodMustBeImplemented:
86 case IProblem.AbstractMethodsInConcreteClass:
87 case IProblem.AbstractMethodInEnum:
88 case IProblem.EnumConstantMustImplementAbstractMethod:
89 case IProblem.ShouldImplementHashcode:
90 case IProblem.BodyForNativeMethod:
91 case IProblem.OuterLocalMustBeFinal:
92 case IProblem.UninitializedLocalVariable:
93 case IProblem.UninitializedLocalVariableHintMissingDefault:
94 case IProblem.UndefinedConstructorInDefaultConstructor:
95 case IProblem.UnhandledExceptionInDefaultConstructor:
96 case IProblem.NotVisibleConstructorInDefaultConstructor:
97 case IProblem.AmbiguousType:
98 case IProblem.UnusedPrivateMethod:
99 case IProblem.UnusedPrivateConstructor:
100 case IProblem.UnusedPrivateField:
101 case IProblem.UnusedPrivateType:
102 case IProblem.LocalVariableIsNeverUsed:
103 case IProblem.ArgumentIsNeverUsed:
104 case IProblem.MethodRequiresBody:
105 case IProblem.NeedToEmulateFieldReadAccess:
106 case IProblem.NeedToEmulateFieldWriteAccess:
107 case IProblem.NeedToEmulateMethodAccess:
108 case IProblem.NeedToEmulateConstructorAccess:
109 case IProblem.SuperfluousSemicolon:
110 case IProblem.UnnecessaryCast:
111 case IProblem.UnnecessaryInstanceof:
112 case IProblem.IndirectAccessToStaticField:
113 case IProblem.IndirectAccessToStaticMethod:
115 case IProblem.UnusedMethodDeclaredThrownException:
116 case IProblem.UnusedConstructorDeclaredThrownException:
117 case IProblem.UnqualifiedFieldAccess:
118 case IProblem.JavadocMissing:
119 case IProblem.JavadocMissingParamTag:
120 case IProblem.JavadocMissingReturnTag:
121 case IProblem.JavadocMissingThrowsTag:
122 case IProblem.JavadocUndefinedType:
123 case IProblem.JavadocAmbiguousType:
124 case IProblem.JavadocNotVisibleType:
125 case IProblem.JavadocInvalidThrowsClassName:
126 case IProblem.JavadocDuplicateThrowsClassName:
127 case IProblem.JavadocDuplicateReturnTag:
128 case IProblem.JavadocDuplicateParamName:
129 case IProblem.JavadocInvalidParamName:
130 case IProblem.JavadocUnexpectedTag:
131 case IProblem.JavadocInvalidTag:
132 case IProblem.NonBlankFinalLocalAssignment:
133 case IProblem.DuplicateFinalLocalInitialization:
134 case IProblem.FinalFieldAssignment:
135 case IProblem.DuplicateBlankFinalFieldInitialization:
136 case IProblem.AnonymousClassCannotExtendFinalClass:
137 case IProblem.ClassExtendFinalClass:
138 case IProblem.FinalMethodCannotBeOverridden:
139 case IProblem.InheritedMethodReducesVisibility:
140 case IProblem.MethodReducesVisibility:
141 case IProblem.OverridingNonVisibleMethod:
142 case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod:
143 case IProblem.CannotHideAnInstanceMethodWithAStaticMethod:
144 case IProblem.UnexpectedStaticModifierForMethod:
145 case IProblem.LocalVariableHidingLocalVariable:
146 case IProblem.LocalVariableHidingField:
147 case IProblem.FieldHidingLocalVariable:
148 case IProblem.FieldHidingField:
149 case IProblem.ArgumentHidingLocalVariable:
150 case IProblem.ArgumentHidingField:
151 case IProblem.DuplicateField:
152 case IProblem.DuplicateMethod:
153 case IProblem.DuplicateTypeVariable:
154 case IProblem.DuplicateNestedType:
155 case IProblem.IllegalModifierForInterfaceMethod:
156 case IProblem.IllegalModifierForInterface:
157 case IProblem.IllegalModifierForClass:
158 case IProblem.IllegalModifierForInterfaceField:
159 case IProblem.IllegalModifierForMemberInterface:
160 case IProblem.IllegalModifierForMemberClass:
161 case IProblem.IllegalModifierForLocalClass:
162 case IProblem.IllegalModifierForArgument:
163 case IProblem.IllegalModifierForField:
164 case IProblem.IllegalModifierForMethod:
165 case IProblem.IllegalModifierForConstructor:
166 case IProblem.IllegalModifierForVariable:
167 case IProblem.IllegalModifierForEnum:
168 case IProblem.IllegalModifierForEnumConstant:
169 case IProblem.IllegalModifierForEnumConstructor:
170 case IProblem.IllegalModifierForMemberEnum:
171 case IProblem.UnexpectedStaticModifierForField:
172 case IProblem.IllegalModifierCombinationFinalVolatileForField:
173 case IProblem.IllegalVisibilityModifierForInterfaceMemberType:
174 case IProblem.IncompatibleReturnType:
175 case IProblem.IncompatibleExceptionInThrowsClause:
176 case IProblem.NoMessageSendOnArrayType:
177 case IProblem.InvalidOperator:
178 case IProblem.MissingSerialVersion:
179 case IProblem.UnnecessaryElse:
180 case IProblem.SuperclassMustBeAClass:
181 case IProblem.UseAssertAsAnIdentifier:
182 case IProblem.UseEnumAsAnIdentifier:
183 case IProblem.RedefinedLocal:
184 case IProblem.RedefinedArgument:
185 case IProblem.CodeCannotBeReached:
186 case IProblem.DeadCode:
187 case IProblem.InvalidUsageOfTypeParameters:
188 case IProblem.InvalidUsageOfStaticImports:
189 case IProblem.InvalidUsageOfForeachStatements:
190 case IProblem.InvalidUsageOfTypeArguments:
191 case IProblem.InvalidUsageOfEnumDeclarations:
192 case IProblem.InvalidUsageOfVarargs:
193 case IProblem.InvalidUsageOfAnnotations:
194 case IProblem.InvalidUsageOfAnnotationDeclarations:
195 case IProblem.FieldMissingDeprecatedAnnotation:
196 case IProblem.OverridingDeprecatedMethod:
197 case IProblem.MethodMissingDeprecatedAnnotation:
198 case IProblem.TypeMissingDeprecatedAnnotation:
199 case IProblem.MissingOverrideAnnotation:
200 case IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation:
201 case IProblem.MethodMustOverride:
202 case IProblem.MethodMustOverrideOrImplement:
203 case IProblem.IsClassPathCorrect:
204 case IProblem.MethodReturnsVoid:
205 case IProblem.ForbiddenReference:
206 case IProblem.DiscouragedReference:
207 case IProblem.UnnecessaryNLSTag:
208 case IProblem.AssignmentHasNoEffect:
209 case IProblem.UnsafeTypeConversion:
210 case IProblem.RawTypeReference:
211 case IProblem.UnsafeRawMethodInvocation:
212 case IProblem.RedundantSpecificationOfTypeArguments:
213 case IProblem.UndefinedAnnotationMember:
214 case IProblem.MissingValueForAnnotationMember:
215 case IProblem.FallthroughCase:
216 case IProblem.NonGenericType:
217 case IProblem.UnhandledWarningToken:
218 case IProblem.UnusedWarningToken:
219 case IProblem.RedundantSuperinterface:
220 case IProblem.JavadocInvalidMemberTypeQualification:
221 case IProblem.IncompatibleTypesInForeach:
222 case IProblem.MissingEnumConstantCase:
223 case IProblem.MissingEnumDefaultCase:
224 case IProblem.MissingDefaultCase:
225 case IProblem.MissingEnumConstantCaseDespiteDefault:
226 case IProblem.MissingSynchronizedModifierInInheritedMethod:
227 case IProblem.UnusedObjectAllocation:
228 case IProblem.MethodCanBeStatic:
229 case IProblem.MethodCanBePotentiallyStatic:
230 case IProblem.AutoManagedResourceNotBelow17:
231 case IProblem.MultiCatchNotBelow17:
232 case IProblem.PolymorphicMethodNotBelow17:
233 case IProblem.BinaryLiteralNotBelow17:
234 case IProblem.UnderscoresInLiteralsNotBelow17:
235 case IProblem.SwitchOnStringsNotBelow17:
236 case IProblem.DiamondNotBelow17:
237 case IProblem.PotentialHeapPollutionFromVararg :
238 case IProblem.UnsafeGenericArrayForVarargs:
239 case IProblem.SafeVarargsOnFixedArityMethod :
240 case IProblem.SafeVarargsOnNonFinalInstanceMethod:
241 case IProblem.RequiredNonNullButProvidedNull:
242 case IProblem.RequiredNonNullButProvidedPotentialNull:
243 case IProblem.RequiredNonNullButProvidedUnknown:
244 case IProblem.IllegalReturnNullityRedefinition:
245 case IProblem.IllegalRedefinitionToNonNullParameter:
246 case IProblem.IllegalDefinitionToNonNullParameter:
247 case IProblem.ParameterLackingNonNullAnnotation:
248 case IProblem.ParameterLackingNullableAnnotation:
249 case IProblem.NonNullLocalVariableComparisonYieldsFalse:
250 case IProblem.RedundantNullCheckOnNonNullLocalVariable:
253 return SuppressWarningsSubProcessor.hasSuppressWarningsProposal(cu.getJavaProject(), problemId);
257 private static int moveBack(int offset, int start, String ignoreCharacters, ICompilationUnit cu) {
259 IBuffer buf= cu.getBuffer();
260 while (offset >= start) {
261 if (ignoreCharacters.indexOf(buf.getChar(offset - 1)) == -1) {
266 } catch(JavaModelException e) {
274 * @see IAssistProcessor#getCorrections(org.eclipse.jdt.internal.ui.text.correction.IAssistContext, org.eclipse.jdt.internal.ui.text.correction.IProblemLocation[])
276 public IJavaCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException {
277 if (locations == null || locations.length == 0) {
281 HashSet<Integer> handledProblems= new HashSet<Integer>(locations.length);
282 ArrayList<ICommandAccess> resultingCollections= new ArrayList<ICommandAccess>();
283 for (int i= 0; i < locations.length; i++) {
284 IProblemLocation curr= locations[i];
285 Integer id= new Integer(curr.getProblemId());
286 if (handledProblems.add(id)) {
287 process(context, curr, resultingCollections);
290 return resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
293 private void process(IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals) throws CoreException {
294 int id= problem.getProblemId();
295 if (id == 0) { // no proposals for none-problem locations
299 case IProblem.UnterminatedString:
300 String quoteLabel= CorrectionMessages.JavaCorrectionProcessor_addquote_description;
301 int pos= moveBack(problem.getOffset() + problem.getLength(), problem.getOffset(), "\n\r", context.getCompilationUnit()); //$NON-NLS-1$
302 proposals.add(new ReplaceCorrectionProposal(quoteLabel, context.getCompilationUnit(), pos, 0, "\"", 0)); //$NON-NLS-1$
304 case IProblem.UnusedImport:
305 case IProblem.DuplicateImport:
306 case IProblem.CannotImportPackage:
307 case IProblem.ConflictingImport:
308 ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals);
310 case IProblem.ImportNotFound:
311 ReorgCorrectionsSubProcessor.importNotFoundProposals(context, problem, proposals);
312 ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals);
314 case IProblem.UndefinedMethod:
315 UnresolvedElementsSubProcessor.getMethodProposals(context, problem, false, proposals);
317 case IProblem.UndefinedConstructor:
318 UnresolvedElementsSubProcessor.getConstructorProposals(context, problem, proposals);
320 case IProblem.UndefinedAnnotationMember:
321 UnresolvedElementsSubProcessor.getAnnotationMemberProposals(context, problem, proposals);
323 case IProblem.ParameterMismatch:
324 UnresolvedElementsSubProcessor.getMethodProposals(context, problem, true, proposals);
326 case IProblem.MethodButWithConstructorName:
327 ReturnTypeSubProcessor.addMethodWithConstrNameProposals(context, problem, proposals);
329 case IProblem.UndefinedField:
330 case IProblem.UndefinedName:
331 case IProblem.UnresolvedVariable:
332 UnresolvedElementsSubProcessor.getVariableProposals(context, problem, null, proposals);
334 case IProblem.AmbiguousType:
335 case IProblem.JavadocAmbiguousType:
336 UnresolvedElementsSubProcessor.getAmbiguosTypeReferenceProposals(context, problem, proposals);
338 case IProblem.PublicClassMustMatchFileName:
339 ReorgCorrectionsSubProcessor.getWrongTypeNameProposals(context, problem, proposals);
341 case IProblem.PackageIsNotExpectedPackage:
342 ReorgCorrectionsSubProcessor.getWrongPackageDeclNameProposals(context, problem, proposals);
344 case IProblem.UndefinedType:
345 case IProblem.JavadocUndefinedType:
346 UnresolvedElementsSubProcessor.getTypeProposals(context, problem, proposals);
348 case IProblem.TypeMismatch:
349 TypeMismatchSubProcessor.addTypeMismatchProposals(context, problem, proposals);
351 case IProblem.IncompatibleTypesInForeach:
352 TypeMismatchSubProcessor.addTypeMismatchInForEachProposals(context, problem, proposals);
354 case IProblem.IncompatibleReturnType:
355 TypeMismatchSubProcessor.addIncompatibleReturnTypeProposals(context, problem, proposals);
357 case IProblem.IncompatibleExceptionInThrowsClause:
358 TypeMismatchSubProcessor.addIncompatibleThrowsProposals(context, problem, proposals);
360 case IProblem.UnhandledException:
361 case IProblem.UnhandledExceptionOnAutoClose:
362 LocalCorrectionsSubProcessor.addUncaughtExceptionProposals(context, problem, proposals);
364 case IProblem.UnreachableCatch:
365 case IProblem.InvalidCatchBlockSequence:
366 case IProblem.InvalidUnionTypeReferenceSequence:
367 LocalCorrectionsSubProcessor.addUnreachableCatchProposals(context, problem, proposals);
369 case IProblem.RedundantSuperinterface:
370 LocalCorrectionsSubProcessor.addRedundantSuperInterfaceProposal(context, problem, proposals);
372 case IProblem.VoidMethodReturnsValue:
373 ReturnTypeSubProcessor.addVoidMethodReturnsProposals(context, problem, proposals);
375 case IProblem.MethodReturnsVoid:
376 ReturnTypeSubProcessor.addMethodRetunsVoidProposals(context, problem, proposals);
378 case IProblem.MissingReturnType:
379 ReturnTypeSubProcessor.addMissingReturnTypeProposals(context, problem, proposals);
381 case IProblem.ShouldReturnValue:
382 case IProblem.ShouldReturnValueHintMissingDefault:
383 ReturnTypeSubProcessor.addMissingReturnStatementProposals(context, problem, proposals);
385 case IProblem.NonExternalizedStringLiteral:
386 LocalCorrectionsSubProcessor.addNLSProposals(context, problem, proposals);
388 case IProblem.UnnecessaryNLSTag:
389 LocalCorrectionsSubProcessor.getUnnecessaryNLSTagProposals(context, problem, proposals);
391 case IProblem.NonStaticAccessToStaticField:
392 case IProblem.NonStaticAccessToStaticMethod:
393 case IProblem.IndirectAccessToStaticField:
394 case IProblem.IndirectAccessToStaticMethod:
395 LocalCorrectionsSubProcessor.addCorrectAccessToStaticProposals(context, problem, proposals);
397 case IProblem.StaticMethodRequested:
398 case IProblem.NonStaticFieldFromStaticInvocation:
399 case IProblem.InstanceMethodDuringConstructorInvocation:
400 case IProblem.InstanceFieldDuringConstructorInvocation:
401 ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_STATIC, 5);
403 case IProblem.NonBlankFinalLocalAssignment:
404 case IProblem.DuplicateFinalLocalInitialization:
405 case IProblem.FinalFieldAssignment:
406 case IProblem.DuplicateBlankFinalFieldInitialization:
407 case IProblem.AnonymousClassCannotExtendFinalClass:
408 case IProblem.ClassExtendFinalClass:
409 ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL, 9);
411 case IProblem.InheritedMethodReducesVisibility:
412 case IProblem.MethodReducesVisibility:
413 case IProblem.OverridingNonVisibleMethod:
414 ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE);
416 case IProblem.FinalMethodCannotBeOverridden:
417 ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL);
419 case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod:
420 ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC);
422 case IProblem.CannotHideAnInstanceMethodWithAStaticMethod:
423 case IProblem.IllegalModifierForInterfaceMethod:
424 case IProblem.IllegalModifierForInterface:
425 case IProblem.IllegalModifierForClass:
426 case IProblem.IllegalModifierForInterfaceField:
427 case IProblem.UnexpectedStaticModifierForField:
428 case IProblem.IllegalModifierCombinationFinalVolatileForField:
429 case IProblem.IllegalModifierForMemberInterface:
430 case IProblem.IllegalModifierForMemberClass:
431 case IProblem.IllegalModifierForLocalClass:
432 case IProblem.IllegalModifierForArgument:
433 case IProblem.IllegalModifierForField:
434 case IProblem.IllegalModifierForMethod:
435 case IProblem.IllegalModifierForConstructor:
436 case IProblem.IllegalModifierForVariable:
437 case IProblem.IllegalModifierForEnum:
438 case IProblem.IllegalModifierForEnumConstant:
439 case IProblem.IllegalModifierForEnumConstructor:
440 case IProblem.IllegalModifierForMemberEnum:
441 case IProblem.IllegalVisibilityModifierForInterfaceMemberType:
442 case IProblem.UnexpectedStaticModifierForMethod:
443 ModifierCorrectionSubProcessor.addRemoveInvalidModifiersProposal(context, problem, proposals, 5);
445 case IProblem.NotVisibleField:
446 GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, problem, proposals, 9);
447 ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE, 10);
449 case IProblem.NotVisibleMethod:
450 case IProblem.NotVisibleConstructor:
451 case IProblem.NotVisibleType:
452 case IProblem.JavadocNotVisibleType:
453 ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE, 10);
455 case IProblem.BodyForAbstractMethod:
456 case IProblem.AbstractMethodInAbstractClass:
457 case IProblem.AbstractMethodInEnum:
458 case IProblem.EnumAbstractMethodMustBeImplemented:
459 ModifierCorrectionSubProcessor.addAbstractMethodProposals(context, problem, proposals);
461 case IProblem.AbstractMethodsInConcreteClass:
462 ModifierCorrectionSubProcessor.addAbstractTypeProposals(context, problem, proposals);
464 case IProblem.AbstractMethodMustBeImplemented:
465 case IProblem.EnumConstantMustImplementAbstractMethod:
466 LocalCorrectionsSubProcessor.addUnimplementedMethodsProposals(context, problem, proposals);
468 case IProblem.ShouldImplementHashcode:
469 LocalCorrectionsSubProcessor.addMissingHashCodeProposals(context, problem, proposals);
471 case IProblem.MissingValueForAnnotationMember:
472 LocalCorrectionsSubProcessor.addValueForAnnotationProposals(context, problem, proposals);
474 case IProblem.BodyForNativeMethod:
475 ModifierCorrectionSubProcessor.addNativeMethodProposals(context, problem, proposals);
477 case IProblem.MethodRequiresBody:
478 ModifierCorrectionSubProcessor.addMethodRequiresBodyProposals(context, problem, proposals);
480 case IProblem.OuterLocalMustBeFinal:
481 ModifierCorrectionSubProcessor.addNonFinalLocalProposal(context, problem, proposals);
483 case IProblem.UninitializedLocalVariable:
484 case IProblem.UninitializedLocalVariableHintMissingDefault:
485 LocalCorrectionsSubProcessor.addUninitializedLocalVariableProposal(context, problem, proposals);
487 case IProblem.UnhandledExceptionInDefaultConstructor:
488 case IProblem.UndefinedConstructorInDefaultConstructor:
489 case IProblem.NotVisibleConstructorInDefaultConstructor:
490 LocalCorrectionsSubProcessor.addConstructorFromSuperclassProposal(context, problem, proposals);
492 case IProblem.UnusedPrivateMethod:
493 case IProblem.UnusedPrivateConstructor:
494 case IProblem.UnusedPrivateField:
495 case IProblem.UnusedPrivateType:
496 case IProblem.LocalVariableIsNeverUsed:
497 case IProblem.ArgumentIsNeverUsed:
498 LocalCorrectionsSubProcessor.addUnusedMemberProposal(context, problem, proposals);
500 case IProblem.NeedToEmulateFieldReadAccess:
501 case IProblem.NeedToEmulateFieldWriteAccess:
502 case IProblem.NeedToEmulateMethodAccess:
503 case IProblem.NeedToEmulateConstructorAccess:
504 ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_PRIVATE, 5);
506 case IProblem.SuperfluousSemicolon:
507 LocalCorrectionsSubProcessor.addSuperfluousSemicolonProposal(context, problem, proposals);
509 case IProblem.UnnecessaryCast:
510 LocalCorrectionsSubProcessor.addUnnecessaryCastProposal(context, problem, proposals);
512 case IProblem.UnnecessaryInstanceof:
513 LocalCorrectionsSubProcessor.addUnnecessaryInstanceofProposal(context, problem, proposals);
515 case IProblem.UnusedMethodDeclaredThrownException:
516 case IProblem.UnusedConstructorDeclaredThrownException:
517 LocalCorrectionsSubProcessor.addUnnecessaryThrownExceptionProposal(context, problem, proposals);
519 case IProblem.UnqualifiedFieldAccess:
520 GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, problem, proposals, 5);
521 LocalCorrectionsSubProcessor.addUnqualifiedFieldAccessProposal(context, problem, proposals);
524 proposals.add(new TaskMarkerProposal(context.getCompilationUnit(), problem, 10));
526 case IProblem.JavadocMissing:
527 JavadocTagsSubProcessor.getMissingJavadocCommentProposals(context, problem, proposals);
529 case IProblem.JavadocMissingParamTag:
530 case IProblem.JavadocMissingReturnTag:
531 case IProblem.JavadocMissingThrowsTag:
532 JavadocTagsSubProcessor.getMissingJavadocTagProposals(context, problem, proposals);
534 case IProblem.JavadocInvalidThrowsClassName:
535 case IProblem.JavadocDuplicateThrowsClassName:
536 case IProblem.JavadocDuplicateReturnTag:
537 case IProblem.JavadocDuplicateParamName:
538 case IProblem.JavadocInvalidParamName:
539 case IProblem.JavadocUnexpectedTag:
540 case IProblem.JavadocInvalidTag:
541 JavadocTagsSubProcessor.getRemoveJavadocTagProposals(context, problem, proposals);
543 case IProblem.JavadocInvalidMemberTypeQualification:
544 JavadocTagsSubProcessor.getInvalidQualificationProposals(context, problem, proposals);
547 case IProblem.LocalVariableHidingLocalVariable:
548 case IProblem.LocalVariableHidingField:
549 case IProblem.FieldHidingLocalVariable:
550 case IProblem.FieldHidingField:
551 case IProblem.ArgumentHidingLocalVariable:
552 case IProblem.ArgumentHidingField:
553 case IProblem.UseAssertAsAnIdentifier:
554 case IProblem.UseEnumAsAnIdentifier:
555 case IProblem.RedefinedLocal:
556 case IProblem.RedefinedArgument:
557 case IProblem.DuplicateField:
558 case IProblem.DuplicateMethod:
559 case IProblem.DuplicateTypeVariable:
560 case IProblem.DuplicateNestedType:
561 LocalCorrectionsSubProcessor.addInvalidVariableNameProposals(context, problem, proposals);
563 case IProblem.NoMessageSendOnArrayType:
564 UnresolvedElementsSubProcessor.getArrayAccessProposals(context, problem, proposals);
566 case IProblem.InvalidOperator:
567 LocalCorrectionsSubProcessor.getInvalidOperatorProposals(context, problem, proposals);
569 case IProblem.MissingSerialVersion:
570 SerialVersionSubProcessor.getSerialVersionProposals(context, problem, proposals);
572 case IProblem.UnnecessaryElse:
573 LocalCorrectionsSubProcessor.getUnnecessaryElseProposals(context, problem, proposals);
575 case IProblem.SuperclassMustBeAClass:
576 LocalCorrectionsSubProcessor.getInterfaceExtendsClassProposals(context, problem, proposals);
578 case IProblem.CodeCannotBeReached:
579 case IProblem.DeadCode:
580 LocalCorrectionsSubProcessor.getUnreachableCodeProposals(context, problem, proposals);
582 case IProblem.InvalidUsageOfTypeParameters:
583 case IProblem.InvalidUsageOfStaticImports:
584 case IProblem.InvalidUsageOfForeachStatements:
585 case IProblem.InvalidUsageOfTypeArguments:
586 case IProblem.InvalidUsageOfEnumDeclarations:
587 case IProblem.InvalidUsageOfVarargs:
588 case IProblem.InvalidUsageOfAnnotations:
589 case IProblem.InvalidUsageOfAnnotationDeclarations:
590 ReorgCorrectionsSubProcessor.getNeedHigherComplianceProposals(context, problem, proposals, JavaCore.VERSION_1_5);
592 case IProblem.DiamondNotBelow17:
593 TypeArgumentMismatchSubProcessor.getInferDiamondArgumentsProposal(context, problem, proposals);
595 case IProblem.AutoManagedResourceNotBelow17:
596 case IProblem.MultiCatchNotBelow17:
597 case IProblem.PolymorphicMethodNotBelow17:
598 case IProblem.BinaryLiteralNotBelow17:
599 case IProblem.UnderscoresInLiteralsNotBelow17:
600 case IProblem.SwitchOnStringsNotBelow17:
601 ReorgCorrectionsSubProcessor.getNeedHigherComplianceProposals(context, problem, proposals, JavaCore.VERSION_1_7);
603 case IProblem.NonGenericType:
604 TypeArgumentMismatchSubProcessor.removeMismatchedArguments(context, problem, proposals);
606 case IProblem.MissingOverrideAnnotation:
607 case IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation:
608 ModifierCorrectionSubProcessor.addOverrideAnnotationProposal(context, problem, proposals);
610 case IProblem.MethodMustOverride:
611 case IProblem.MethodMustOverrideOrImplement:
612 ModifierCorrectionSubProcessor.removeOverrideAnnotationProposal(context, problem, proposals);
614 case IProblem.FieldMissingDeprecatedAnnotation:
615 case IProblem.MethodMissingDeprecatedAnnotation:
616 case IProblem.TypeMissingDeprecatedAnnotation:
617 ModifierCorrectionSubProcessor.addDeprecatedAnnotationProposal(context, problem, proposals);
619 case IProblem.OverridingDeprecatedMethod:
620 ModifierCorrectionSubProcessor.addOverridingDeprecatedMethodProposal(context, problem, proposals);
622 case IProblem.IsClassPathCorrect:
623 ReorgCorrectionsSubProcessor.getIncorrectBuildPathProposals(context, problem, proposals);
625 case IProblem.ForbiddenReference:
626 case IProblem.DiscouragedReference:
627 ReorgCorrectionsSubProcessor.getAccessRulesProposals(context, problem, proposals);
629 case IProblem.AssignmentHasNoEffect:
630 LocalCorrectionsSubProcessor.getAssignmentHasNoEffectProposals(context, problem, proposals);
632 case IProblem.UnsafeTypeConversion:
633 case IProblem.RawTypeReference:
634 case IProblem.UnsafeRawMethodInvocation:
635 LocalCorrectionsSubProcessor.addDeprecatedFieldsToMethodsProposals(context, problem, proposals);
636 LocalCorrectionsSubProcessor.addTypePrametersToRawTypeReference(context, problem, proposals);
638 case IProblem.RedundantSpecificationOfTypeArguments:
639 LocalCorrectionsSubProcessor.addRemoveRedundantTypeArgumentsProposals(context, problem, proposals);
641 case IProblem.FallthroughCase:
642 LocalCorrectionsSubProcessor.addFallThroughProposals(context, problem, proposals);
644 case IProblem.UnhandledWarningToken:
645 SuppressWarningsSubProcessor.addUnknownSuppressWarningProposals(context, problem, proposals);
647 case IProblem.UnusedWarningToken:
648 SuppressWarningsSubProcessor.addRemoveUnusedSuppressWarningProposals(context, problem, proposals);
650 case IProblem.MissingEnumConstantCase:
651 case IProblem.MissingEnumDefaultCase:
652 LocalCorrectionsSubProcessor.getMissingEnumConstantCaseProposals(context, problem, proposals);
654 case IProblem.MissingDefaultCase:
655 LocalCorrectionsSubProcessor.addMissingDefaultCaseProposal(context, problem, proposals);
657 case IProblem.MissingEnumConstantCaseDespiteDefault:
658 LocalCorrectionsSubProcessor.getMissingEnumConstantCaseProposals(context, problem, proposals);
659 LocalCorrectionsSubProcessor.addCasesOmittedProposals(context, problem, proposals);
661 case IProblem.MissingSynchronizedModifierInInheritedMethod:
662 ModifierCorrectionSubProcessor.addSynchronizedMethodProposal(context, problem, proposals);
664 case IProblem.UnusedObjectAllocation:
665 LocalCorrectionsSubProcessor.getUnusedObjectAllocationProposals(context, problem, proposals);
667 case IProblem.MethodCanBeStatic:
668 case IProblem.MethodCanBePotentiallyStatic:
669 ModifierCorrectionSubProcessor.addStaticMethodProposal(context, problem, proposals);
671 case IProblem.PotentialHeapPollutionFromVararg :
672 VarargsWarningsSubProcessor.addAddSafeVarargsProposals(context, problem, proposals);
674 case IProblem.UnsafeGenericArrayForVarargs:
675 VarargsWarningsSubProcessor.addAddSafeVarargsToDeclarationProposals(context, problem, proposals);
677 case IProblem.SafeVarargsOnFixedArityMethod :
678 case IProblem.SafeVarargsOnNonFinalInstanceMethod:
679 VarargsWarningsSubProcessor.addRemoveSafeVarargsProposals(context, problem, proposals);
681 case IProblem.IllegalReturnNullityRedefinition:
682 case IProblem.IllegalDefinitionToNonNullParameter:
683 case IProblem.IllegalRedefinitionToNonNullParameter:
684 NullQuickFixes.addNullAnnotationInSignatureProposal(context, problem, proposals, false);
685 NullQuickFixes.addNullAnnotationInSignatureProposal(context, problem, proposals, true);
687 case IProblem.RequiredNonNullButProvidedNull:
688 case IProblem.RequiredNonNullButProvidedPotentialNull:
689 case IProblem.RequiredNonNullButProvidedUnknown:
690 case IProblem.ParameterLackingNonNullAnnotation:
691 case IProblem.ParameterLackingNullableAnnotation:
692 case IProblem.NonNullLocalVariableComparisonYieldsFalse:
693 case IProblem.RedundantNullCheckOnNonNullLocalVariable:
694 NullQuickFixes.addReturnAndArgumentTypeProposal(context, problem, proposals);
698 if (JavaModelUtil.is50OrHigher(context.getCompilationUnit().getJavaProject())) {
699 SuppressWarningsSubProcessor.addSuppressWarningsProposals(context, problem, proposals);