]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-after/ui/org/eclipse/jdt/internal/ui/text/correction/QuickFixProcessor.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-after / ui / org / eclipse / jdt / internal / ui / text / correction / QuickFixProcessor.java
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
7  *
8  * Contributors:
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;
13
14 import java.util.ArrayList;
15 import java.util.Collection;
16 import java.util.HashSet;
17
18 import org.eclipse.core.runtime.CoreException;
19
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;
25
26 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
27
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;
33
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;
37
38 /**
39   */
40 public class QuickFixProcessor implements IQuickFixProcessor {
41
42
43         public boolean hasCorrections(ICompilationUnit cu, int problemId) {
44                 switch (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:
114                         case IProblem.Task:
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:
251                                 return true;
252                         default:
253                                 return SuppressWarningsSubProcessor.hasSuppressWarningsProposal(cu.getJavaProject(), problemId);
254                 }
255         }
256
257         private static int moveBack(int offset, int start, String ignoreCharacters, ICompilationUnit cu) {
258                 try {
259                         IBuffer buf= cu.getBuffer();
260                         while (offset >= start) {
261                                 if (ignoreCharacters.indexOf(buf.getChar(offset - 1)) == -1) {
262                                         return offset;
263                                 }
264                                 offset--;
265                         }
266                 } catch(JavaModelException e) {
267                         // use start
268                 }
269                 return start;
270         }
271
272
273         /* (non-Javadoc)
274          * @see IAssistProcessor#getCorrections(org.eclipse.jdt.internal.ui.text.correction.IAssistContext, org.eclipse.jdt.internal.ui.text.correction.IProblemLocation[])
275          */
276         public IJavaCompletionProposal[] getCorrections(IInvocationContext context, IProblemLocation[] locations) throws CoreException {
277                 if (locations == null || locations.length == 0) {
278                         return null;
279                 }
280
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);
288                         }
289                 }
290                 return resultingCollections.toArray(new IJavaCompletionProposal[resultingCollections.size()]);
291         }
292
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
296                         return;
297                 }
298                 switch (id) {
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$
303                                 break;
304                         case IProblem.UnusedImport:
305                         case IProblem.DuplicateImport:
306                         case IProblem.CannotImportPackage:
307                         case IProblem.ConflictingImport:
308                                 ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals);
309                                 break;
310                         case IProblem.ImportNotFound:
311                                 ReorgCorrectionsSubProcessor.importNotFoundProposals(context, problem, proposals);
312                                 ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals);
313                                 break;
314                         case IProblem.UndefinedMethod:
315                                 UnresolvedElementsSubProcessor.getMethodProposals(context, problem, false, proposals);
316                                 break;
317                         case IProblem.UndefinedConstructor:
318                                 UnresolvedElementsSubProcessor.getConstructorProposals(context, problem, proposals);
319                                 break;
320                         case IProblem.UndefinedAnnotationMember:
321                                 UnresolvedElementsSubProcessor.getAnnotationMemberProposals(context, problem, proposals);
322                                 break;
323                         case IProblem.ParameterMismatch:
324                                 UnresolvedElementsSubProcessor.getMethodProposals(context, problem, true, proposals);
325                                 break;
326                         case IProblem.MethodButWithConstructorName:
327                                 ReturnTypeSubProcessor.addMethodWithConstrNameProposals(context, problem, proposals);
328                                 break;
329                         case IProblem.UndefinedField:
330                         case IProblem.UndefinedName:
331                         case IProblem.UnresolvedVariable:
332                                 UnresolvedElementsSubProcessor.getVariableProposals(context, problem, null, proposals);
333                                 break;
334                         case IProblem.AmbiguousType:
335                         case IProblem.JavadocAmbiguousType:
336                                 UnresolvedElementsSubProcessor.getAmbiguosTypeReferenceProposals(context, problem, proposals);
337                                 break;
338                         case IProblem.PublicClassMustMatchFileName:
339                                 ReorgCorrectionsSubProcessor.getWrongTypeNameProposals(context, problem, proposals);
340                                 break;
341                         case IProblem.PackageIsNotExpectedPackage:
342                                 ReorgCorrectionsSubProcessor.getWrongPackageDeclNameProposals(context, problem, proposals);
343                                 break;
344                         case IProblem.UndefinedType:
345                         case IProblem.JavadocUndefinedType:
346                                 UnresolvedElementsSubProcessor.getTypeProposals(context, problem, proposals);
347                                 break;
348                         case IProblem.TypeMismatch:
349                                 TypeMismatchSubProcessor.addTypeMismatchProposals(context, problem, proposals);
350                                 break;
351                         case IProblem.IncompatibleTypesInForeach:
352                                 TypeMismatchSubProcessor.addTypeMismatchInForEachProposals(context, problem, proposals);
353                                 break;
354                         case IProblem.IncompatibleReturnType:
355                                 TypeMismatchSubProcessor.addIncompatibleReturnTypeProposals(context, problem, proposals);
356                                 break;
357                         case IProblem.IncompatibleExceptionInThrowsClause:
358                                 TypeMismatchSubProcessor.addIncompatibleThrowsProposals(context, problem, proposals);
359                                 break;
360                         case IProblem.UnhandledException:
361                         case IProblem.UnhandledExceptionOnAutoClose:
362                                 LocalCorrectionsSubProcessor.addUncaughtExceptionProposals(context, problem, proposals);
363                                 break;
364                         case IProblem.UnreachableCatch:
365                         case IProblem.InvalidCatchBlockSequence:
366                         case IProblem.InvalidUnionTypeReferenceSequence:
367                                 LocalCorrectionsSubProcessor.addUnreachableCatchProposals(context, problem, proposals);
368                                 break;
369                         case IProblem.RedundantSuperinterface:
370                                 LocalCorrectionsSubProcessor.addRedundantSuperInterfaceProposal(context, problem, proposals);
371                                 break;
372                         case IProblem.VoidMethodReturnsValue:
373                                 ReturnTypeSubProcessor.addVoidMethodReturnsProposals(context, problem, proposals);
374                                 break;
375                         case IProblem.MethodReturnsVoid:
376                                 ReturnTypeSubProcessor.addMethodRetunsVoidProposals(context, problem, proposals);
377                                 break;
378                         case IProblem.MissingReturnType:
379                                 ReturnTypeSubProcessor.addMissingReturnTypeProposals(context, problem, proposals);
380                                 break;
381                         case IProblem.ShouldReturnValue:
382                         case IProblem.ShouldReturnValueHintMissingDefault:
383                                 ReturnTypeSubProcessor.addMissingReturnStatementProposals(context, problem, proposals);
384                                 break;
385                         case IProblem.NonExternalizedStringLiteral:
386                                 LocalCorrectionsSubProcessor.addNLSProposals(context, problem, proposals);
387                                 break;
388                         case IProblem.UnnecessaryNLSTag:
389                                 LocalCorrectionsSubProcessor.getUnnecessaryNLSTagProposals(context, problem, proposals);
390                                 break;
391                         case IProblem.NonStaticAccessToStaticField:
392                         case IProblem.NonStaticAccessToStaticMethod:
393                         case IProblem.IndirectAccessToStaticField:
394                         case IProblem.IndirectAccessToStaticMethod:
395                                 LocalCorrectionsSubProcessor.addCorrectAccessToStaticProposals(context, problem, proposals);
396                                 break;
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);
402                                 break;
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);
410                                 break;
411                         case IProblem.InheritedMethodReducesVisibility:
412                         case IProblem.MethodReducesVisibility:
413                         case IProblem.OverridingNonVisibleMethod:
414                                 ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE);
415                                 break;
416                         case IProblem.FinalMethodCannotBeOverridden:
417                                 ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL);
418                                 break;
419                         case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod:
420                                 ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC);
421                                 break;
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);
444                                 break;
445                         case IProblem.NotVisibleField:
446                                 GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, problem, proposals, 9);
447                                 ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE, 10);
448                                 break;
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);
454                                 break;
455                         case IProblem.BodyForAbstractMethod:
456                         case IProblem.AbstractMethodInAbstractClass:
457                         case IProblem.AbstractMethodInEnum:
458                         case IProblem.EnumAbstractMethodMustBeImplemented:
459                                 ModifierCorrectionSubProcessor.addAbstractMethodProposals(context, problem, proposals);
460                                 break;
461                         case IProblem.AbstractMethodsInConcreteClass:
462                                 ModifierCorrectionSubProcessor.addAbstractTypeProposals(context, problem, proposals);
463                                 break;
464                         case IProblem.AbstractMethodMustBeImplemented:
465                         case IProblem.EnumConstantMustImplementAbstractMethod:
466                                 LocalCorrectionsSubProcessor.addUnimplementedMethodsProposals(context, problem, proposals);
467                                 break;
468                         case IProblem.ShouldImplementHashcode:
469                                 LocalCorrectionsSubProcessor.addMissingHashCodeProposals(context, problem, proposals);
470                                 break;
471                         case IProblem.MissingValueForAnnotationMember:
472                                 LocalCorrectionsSubProcessor.addValueForAnnotationProposals(context, problem, proposals);
473                                 break;
474                         case IProblem.BodyForNativeMethod:
475                                 ModifierCorrectionSubProcessor.addNativeMethodProposals(context, problem, proposals);
476                                 break;
477                         case IProblem.MethodRequiresBody:
478                                 ModifierCorrectionSubProcessor.addMethodRequiresBodyProposals(context, problem, proposals);
479                                 break;
480                         case IProblem.OuterLocalMustBeFinal:
481                                 ModifierCorrectionSubProcessor.addNonFinalLocalProposal(context, problem, proposals);
482                                 break;
483                         case IProblem.UninitializedLocalVariable:
484                         case IProblem.UninitializedLocalVariableHintMissingDefault:
485                                 LocalCorrectionsSubProcessor.addUninitializedLocalVariableProposal(context, problem, proposals);
486                                 break;
487                         case IProblem.UnhandledExceptionInDefaultConstructor:
488                         case IProblem.UndefinedConstructorInDefaultConstructor:
489                         case IProblem.NotVisibleConstructorInDefaultConstructor:
490                                 LocalCorrectionsSubProcessor.addConstructorFromSuperclassProposal(context, problem, proposals);
491                                 break;
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);
499                                 break;
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);
505                                 break;
506                         case IProblem.SuperfluousSemicolon:
507                                 LocalCorrectionsSubProcessor.addSuperfluousSemicolonProposal(context, problem, proposals);
508                                 break;
509                         case IProblem.UnnecessaryCast:
510                                 LocalCorrectionsSubProcessor.addUnnecessaryCastProposal(context, problem, proposals);
511                                 break;
512                         case IProblem.UnnecessaryInstanceof:
513                                 LocalCorrectionsSubProcessor.addUnnecessaryInstanceofProposal(context, problem, proposals);
514                                 break;
515                         case IProblem.UnusedMethodDeclaredThrownException:
516                         case IProblem.UnusedConstructorDeclaredThrownException:
517                                 LocalCorrectionsSubProcessor.addUnnecessaryThrownExceptionProposal(context, problem, proposals);
518                                 break;
519                         case IProblem.UnqualifiedFieldAccess:
520                                 GetterSetterCorrectionSubProcessor.addGetterSetterProposal(context, problem, proposals, 5);
521                                 LocalCorrectionsSubProcessor.addUnqualifiedFieldAccessProposal(context, problem, proposals);
522                                 break;
523                         case IProblem.Task:
524                                 proposals.add(new TaskMarkerProposal(context.getCompilationUnit(), problem, 10));
525                                 break;
526                         case IProblem.JavadocMissing:
527                                 JavadocTagsSubProcessor.getMissingJavadocCommentProposals(context, problem, proposals);
528                                 break;
529                         case IProblem.JavadocMissingParamTag:
530                         case IProblem.JavadocMissingReturnTag:
531                         case IProblem.JavadocMissingThrowsTag:
532                                 JavadocTagsSubProcessor.getMissingJavadocTagProposals(context, problem, proposals);
533                                 break;
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);
542                                 break;
543                         case IProblem.JavadocInvalidMemberTypeQualification:
544                                 JavadocTagsSubProcessor.getInvalidQualificationProposals(context, problem, proposals);
545                                 break;
546
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);
562                                 break;
563                         case IProblem.NoMessageSendOnArrayType:
564                                 UnresolvedElementsSubProcessor.getArrayAccessProposals(context, problem, proposals);
565                                 break;
566                         case IProblem.InvalidOperator:
567                                 LocalCorrectionsSubProcessor.getInvalidOperatorProposals(context, problem, proposals);
568                                 break;
569                         case IProblem.MissingSerialVersion:
570                             SerialVersionSubProcessor.getSerialVersionProposals(context, problem, proposals);
571                                 break;
572                         case IProblem.UnnecessaryElse:
573                                 LocalCorrectionsSubProcessor.getUnnecessaryElseProposals(context, problem, proposals);
574                                 break;
575                         case IProblem.SuperclassMustBeAClass:
576                                 LocalCorrectionsSubProcessor.getInterfaceExtendsClassProposals(context, problem, proposals);
577                                 break;
578                         case IProblem.CodeCannotBeReached:
579                         case IProblem.DeadCode:
580                                 LocalCorrectionsSubProcessor.getUnreachableCodeProposals(context, problem, proposals);
581                                 break;
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);
591                                 break;
592                         case IProblem.DiamondNotBelow17:
593                                 TypeArgumentMismatchSubProcessor.getInferDiamondArgumentsProposal(context, problem, proposals);
594                                 //$FALL-THROUGH$
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);
602                                 break;
603                         case IProblem.NonGenericType:
604                                 TypeArgumentMismatchSubProcessor.removeMismatchedArguments(context, problem, proposals);
605                                 break;
606                         case IProblem.MissingOverrideAnnotation:
607                         case IProblem.MissingOverrideAnnotationForInterfaceMethodImplementation:
608                                 ModifierCorrectionSubProcessor.addOverrideAnnotationProposal(context, problem, proposals);
609                                 break;
610                         case IProblem.MethodMustOverride:
611                         case IProblem.MethodMustOverrideOrImplement:
612                                 ModifierCorrectionSubProcessor.removeOverrideAnnotationProposal(context, problem, proposals);
613                                 break;
614                         case IProblem.FieldMissingDeprecatedAnnotation:
615                         case IProblem.MethodMissingDeprecatedAnnotation:
616                         case IProblem.TypeMissingDeprecatedAnnotation:
617                                 ModifierCorrectionSubProcessor.addDeprecatedAnnotationProposal(context, problem, proposals);
618                                 break;
619                         case IProblem.OverridingDeprecatedMethod:
620                                 ModifierCorrectionSubProcessor.addOverridingDeprecatedMethodProposal(context, problem, proposals);
621                                 break;
622                         case IProblem.IsClassPathCorrect:
623                                 ReorgCorrectionsSubProcessor.getIncorrectBuildPathProposals(context, problem, proposals);
624                                 break;
625                         case IProblem.ForbiddenReference:
626                         case IProblem.DiscouragedReference:
627                                 ReorgCorrectionsSubProcessor.getAccessRulesProposals(context, problem, proposals);
628                                 break;
629                         case IProblem.AssignmentHasNoEffect:
630                                 LocalCorrectionsSubProcessor.getAssignmentHasNoEffectProposals(context, problem, proposals);
631                                 break;
632                         case IProblem.UnsafeTypeConversion:
633                         case IProblem.RawTypeReference:
634                         case IProblem.UnsafeRawMethodInvocation:
635                                 LocalCorrectionsSubProcessor.addDeprecatedFieldsToMethodsProposals(context, problem, proposals);
636                                 LocalCorrectionsSubProcessor.addTypePrametersToRawTypeReference(context, problem, proposals);
637                                 break;
638                         case IProblem.RedundantSpecificationOfTypeArguments:
639                                 LocalCorrectionsSubProcessor.addRemoveRedundantTypeArgumentsProposals(context, problem, proposals);
640                                 break;
641                         case IProblem.FallthroughCase:
642                                 LocalCorrectionsSubProcessor.addFallThroughProposals(context, problem, proposals);
643                                 break;
644                         case IProblem.UnhandledWarningToken:
645                                 SuppressWarningsSubProcessor.addUnknownSuppressWarningProposals(context, problem, proposals);
646                                 break;
647                         case IProblem.UnusedWarningToken:
648                                 SuppressWarningsSubProcessor.addRemoveUnusedSuppressWarningProposals(context, problem, proposals);
649                                 break;
650                         case IProblem.MissingEnumConstantCase:
651                         case IProblem.MissingEnumDefaultCase:
652                                 LocalCorrectionsSubProcessor.getMissingEnumConstantCaseProposals(context, problem, proposals);
653                                 break;
654                         case IProblem.MissingDefaultCase:
655                                 LocalCorrectionsSubProcessor.addMissingDefaultCaseProposal(context, problem, proposals);
656                                 break;
657                         case IProblem.MissingEnumConstantCaseDespiteDefault:
658                                 LocalCorrectionsSubProcessor.getMissingEnumConstantCaseProposals(context, problem, proposals);
659                                 LocalCorrectionsSubProcessor.addCasesOmittedProposals(context, problem, proposals);
660                                 break;
661                         case IProblem.MissingSynchronizedModifierInInheritedMethod:
662                                 ModifierCorrectionSubProcessor.addSynchronizedMethodProposal(context, problem, proposals);
663                                 break;
664                         case IProblem.UnusedObjectAllocation:
665                                 LocalCorrectionsSubProcessor.getUnusedObjectAllocationProposals(context, problem, proposals);
666                                 break;
667                         case IProblem.MethodCanBeStatic:
668                         case IProblem.MethodCanBePotentiallyStatic:
669                                 ModifierCorrectionSubProcessor.addStaticMethodProposal(context, problem, proposals);
670                                 break;
671                         case IProblem.PotentialHeapPollutionFromVararg :
672                                 VarargsWarningsSubProcessor.addAddSafeVarargsProposals(context, problem, proposals);
673                                 break;
674                         case IProblem.UnsafeGenericArrayForVarargs:
675                                 VarargsWarningsSubProcessor.addAddSafeVarargsToDeclarationProposals(context, problem, proposals);
676                                 break;
677                         case IProblem.SafeVarargsOnFixedArityMethod :
678                         case IProblem.SafeVarargsOnNonFinalInstanceMethod:
679                                 VarargsWarningsSubProcessor.addRemoveSafeVarargsProposals(context, problem, proposals);
680                                 break;
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);
686                                 break;
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);
695                                 break;
696                         default:
697                 }
698                 if (JavaModelUtil.is50OrHigher(context.getCompilationUnit().getJavaProject())) {
699                         SuppressWarningsSubProcessor.addSuppressWarningsProposals(context, problem, proposals);
700                 }
701         }
702 }