public static ICleanUpFix createCleanUp(
      CompilationUnit compilationUnit,
      IProblemLocation[] problems,
      boolean addOverrideAnnotation,
      boolean addOverrideInterfaceAnnotation,
      boolean addDeprecatedAnnotation,
      boolean rawTypeReferences) {

    ICompilationUnit cu = (ICompilationUnit) compilationUnit.getJavaElement();
    if (!JavaModelUtil.is50OrHigher(cu.getJavaProject())) return null;

    if (!addOverrideAnnotation && !addDeprecatedAnnotation && !rawTypeReferences) return null;

    List /*<CompilationUnitRewriteOperation>*/ operations = new ArrayList();

    if (addOverrideAnnotation)
      createAddOverrideAnnotationOperations(
          compilationUnit, addOverrideInterfaceAnnotation, problems, operations);

    if (addDeprecatedAnnotation)
      createAddDeprecatedAnnotationOperations(compilationUnit, problems, operations);

    if (rawTypeReferences) createRawTypeReferenceOperations(compilationUnit, problems, operations);

    if (operations.size() == 0) return null;

    CompilationUnitRewriteOperation[] operationsArray =
        (CompilationUnitRewriteOperation[])
            operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
    return new Java50Fix(
        FixMessages.Java50Fix_add_annotations_change_name, compilationUnit, operationsArray);
  }
  private static Java50Fix createFix(
      CompilationUnit compilationUnit, IProblemLocation problem, String annotation, String label) {
    ICompilationUnit cu = (ICompilationUnit) compilationUnit.getJavaElement();
    if (!JavaModelUtil.is50OrHigher(cu.getJavaProject())) return null;

    ASTNode selectedNode = problem.getCoveringNode(compilationUnit);
    if (selectedNode == null) return null;

    ASTNode declaringNode = getDeclaringNode(selectedNode);
    if (!(declaringNode instanceof BodyDeclaration)) return null;

    BodyDeclaration declaration = (BodyDeclaration) declaringNode;

    AnnotationRewriteOperation operation = new AnnotationRewriteOperation(declaration, annotation);

    return new Java50Fix(label, compilationUnit, new CompilationUnitRewriteOperation[] {operation});
  }
  public static ICleanUpFix createCleanUp(
      CompilationUnit compilationUnit,
      boolean addOverrideAnnotation,
      boolean addOverrideInterfaceAnnotation,
      boolean addDeprecatedAnnotation,
      boolean rawTypeReference) {

    ICompilationUnit cu = (ICompilationUnit) compilationUnit.getJavaElement();
    if (!JavaModelUtil.is50OrHigher(cu.getJavaProject())) return null;

    if (!addOverrideAnnotation && !addDeprecatedAnnotation && !rawTypeReference) return null;

    List /*<CompilationUnitRewriteOperation>*/ operations = new ArrayList();

    IProblem[] problems = compilationUnit.getProblems();
    IProblemLocation[] locations = new IProblemLocation[problems.length];
    for (int i = 0; i < problems.length; i++) {
      locations[i] = new ProblemLocation(problems[i]);
    }

    if (addOverrideAnnotation)
      createAddOverrideAnnotationOperations(
          compilationUnit, addOverrideInterfaceAnnotation, locations, operations);

    if (addDeprecatedAnnotation)
      createAddDeprecatedAnnotationOperations(compilationUnit, locations, operations);

    if (rawTypeReference) createRawTypeReferenceOperations(compilationUnit, locations, operations);

    if (operations.size() == 0) return null;

    String fixName;
    if (rawTypeReference) {
      fixName = FixMessages.Java50Fix_add_type_parameters_change_name;
    } else {
      fixName = FixMessages.Java50Fix_add_annotations_change_name;
    }

    CompilationUnitRewriteOperation[] operationsArray =
        (CompilationUnitRewriteOperation[])
            operations.toArray(new CompilationUnitRewriteOperation[operations.size()]);
    return new Java50Fix(fixName, compilationUnit, operationsArray);
  }
  /*
   * Finds a type by the simple name. From AddImportsOperation
   */
  private TypeNameMatch[] findAllTypes(
      String simpleTypeName,
      IJavaSearchScope searchScope,
      SimpleName nameNode,
      IProgressMonitor monitor,
      ICompilationUnit cu)
      throws JavaModelException {
    boolean is50OrHigher = JavaModelUtil.is50OrHigher(cu.getJavaProject());

    int typeKinds = SimilarElementsRequestor.ALL_TYPES;
    if (nameNode != null) {
      typeKinds = ASTResolving.getPossibleTypeKinds(nameNode, is50OrHigher);
    }

    ArrayList<TypeNameMatch> typeInfos = new ArrayList<TypeNameMatch>();
    TypeNameMatchCollector requestor = new TypeNameMatchCollector(typeInfos);
    new SearchEngine()
        .searchAllTypeNames(
            null,
            0,
            simpleTypeName.toCharArray(),
            SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE,
            getSearchForConstant(typeKinds),
            searchScope,
            requestor,
            IJavaSearchConstants.FORCE_IMMEDIATE_SEARCH,
            monitor);

    ArrayList<TypeNameMatch> typeRefsFound = new ArrayList<TypeNameMatch>(typeInfos.size());
    for (int i = 0, len = typeInfos.size(); i < len; i++) {
      TypeNameMatch curr = typeInfos.get(i);
      if (curr.getPackageName().length() > 0) { // do not suggest imports from the default package
        if (isOfKind(curr, typeKinds, is50OrHigher) && isVisible(curr, cu)) {
          typeRefsFound.add(curr);
        }
      }
    }
    return typeRefsFound.toArray(new TypeNameMatch[typeRefsFound.size()]);
  }
 public boolean hasCorrections(ICompilationUnit cu, int problemId) {
   switch (problemId) {
     case IProblem.UnterminatedString:
     case IProblem.UnusedImport:
     case IProblem.DuplicateImport:
     case IProblem.CannotImportPackage:
     case IProblem.ConflictingImport:
     case IProblem.ImportNotFound:
     case IProblem.UndefinedMethod:
     case IProblem.UndefinedConstructor:
     case IProblem.ParameterMismatch:
     case IProblem.MethodButWithConstructorName:
     case IProblem.UndefinedField:
     case IProblem.UndefinedName:
     case IProblem.PublicClassMustMatchFileName:
     case IProblem.PackageIsNotExpectedPackage:
     case IProblem.UndefinedType:
     case IProblem.TypeMismatch:
     case IProblem.UnhandledException:
     case IProblem.UnreachableCatch:
     case IProblem.InvalidCatchBlockSequence:
     case IProblem.VoidMethodReturnsValue:
     case IProblem.ShouldReturnValue:
     case IProblem.MissingReturnType:
     case IProblem.NonExternalizedStringLiteral:
     case IProblem.NonStaticAccessToStaticField:
     case IProblem.NonStaticAccessToStaticMethod:
     case IProblem.StaticMethodRequested:
     case IProblem.NonStaticFieldFromStaticInvocation:
     case IProblem.InstanceMethodDuringConstructorInvocation:
     case IProblem.InstanceFieldDuringConstructorInvocation:
     case IProblem.NotVisibleMethod:
     case IProblem.NotVisibleConstructor:
     case IProblem.NotVisibleType:
     case IProblem.NotVisibleField:
     case IProblem.BodyForAbstractMethod:
     case IProblem.AbstractMethodInAbstractClass:
     case IProblem.AbstractMethodMustBeImplemented:
     case IProblem.BodyForNativeMethod:
     case IProblem.OuterLocalMustBeFinal:
     case IProblem.UninitializedLocalVariable:
     case IProblem.UndefinedConstructorInDefaultConstructor:
     case IProblem.UnhandledExceptionInDefaultConstructor:
     case IProblem.NotVisibleConstructorInDefaultConstructor:
     case IProblem.AmbiguousType:
     case IProblem.UnusedPrivateMethod:
     case IProblem.UnusedPrivateConstructor:
     case IProblem.UnusedPrivateField:
     case IProblem.UnusedPrivateType:
     case IProblem.LocalVariableIsNeverUsed:
     case IProblem.ArgumentIsNeverUsed:
     case IProblem.MethodRequiresBody:
     case IProblem.NeedToEmulateFieldReadAccess:
     case IProblem.NeedToEmulateFieldWriteAccess:
     case IProblem.NeedToEmulateMethodAccess:
     case IProblem.NeedToEmulateConstructorAccess:
     case IProblem.SuperfluousSemicolon:
     case IProblem.UnnecessaryCast:
     case IProblem.UnnecessaryInstanceof:
     case IProblem.IndirectAccessToStaticField:
     case IProblem.IndirectAccessToStaticMethod:
     case IProblem.Task:
     case IProblem.UnusedMethodDeclaredThrownException:
     case IProblem.UnusedConstructorDeclaredThrownException:
     case IProblem.UnqualifiedFieldAccess:
     case IProblem.JavadocMissing:
     case IProblem.JavadocMissingParamTag:
     case IProblem.JavadocMissingReturnTag:
     case IProblem.JavadocMissingThrowsTag:
     case IProblem.JavadocUndefinedType:
     case IProblem.JavadocAmbiguousType:
     case IProblem.JavadocNotVisibleType:
     case IProblem.JavadocInvalidThrowsClassName:
     case IProblem.JavadocDuplicateThrowsClassName:
     case IProblem.JavadocDuplicateReturnTag:
     case IProblem.JavadocDuplicateParamName:
     case IProblem.JavadocInvalidParamName:
     case IProblem.JavadocUnexpectedTag:
     case IProblem.JavadocInvalidTag:
     case IProblem.NonBlankFinalLocalAssignment:
     case IProblem.DuplicateFinalLocalInitialization:
     case IProblem.FinalFieldAssignment:
     case IProblem.DuplicateBlankFinalFieldInitialization:
     case IProblem.AnonymousClassCannotExtendFinalClass:
     case IProblem.ClassExtendFinalClass:
     case IProblem.FinalMethodCannotBeOverridden:
     case IProblem.InheritedMethodReducesVisibility:
     case IProblem.MethodReducesVisibility:
     case IProblem.OverridingNonVisibleMethod:
     case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod:
     case IProblem.CannotHideAnInstanceMethodWithAStaticMethod:
     case IProblem.UnexpectedStaticModifierForMethod:
     case IProblem.LocalVariableHidingLocalVariable:
     case IProblem.LocalVariableHidingField:
     case IProblem.FieldHidingLocalVariable:
     case IProblem.FieldHidingField:
     case IProblem.ArgumentHidingLocalVariable:
     case IProblem.ArgumentHidingField:
     case IProblem.IllegalModifierForInterfaceMethod:
     case IProblem.IllegalModifierForInterface:
     case IProblem.IllegalModifierForClass:
     case IProblem.IllegalModifierForInterfaceField:
     case IProblem.IllegalModifierForMemberInterface:
     case IProblem.IllegalModifierForMemberClass:
     case IProblem.IllegalModifierForLocalClass:
     case IProblem.IllegalModifierForArgument:
     case IProblem.IllegalModifierForField:
     case IProblem.IllegalModifierForMethod:
     case IProblem.IllegalModifierForVariable:
     case IProblem.IllegalVisibilityModifierForInterfaceMemberType:
     case IProblem.IncompatibleReturnType:
     case IProblem.IncompatibleExceptionInThrowsClause:
     case IProblem.NoMessageSendOnArrayType:
     case IProblem.InvalidOperator:
     case IProblem.MissingSerialVersion:
     case IProblem.UnnecessaryElse:
     case IProblem.SuperclassMustBeAClass:
     case IProblem.UseAssertAsAnIdentifier:
     case IProblem.UseEnumAsAnIdentifier:
     case IProblem.RedefinedLocal:
     case IProblem.RedefinedArgument:
     case IProblem.CodeCannotBeReached:
     case IProblem.InvalidUsageOfTypeParameters:
     case IProblem.InvalidUsageOfStaticImports:
     case IProblem.InvalidUsageOfForeachStatements:
     case IProblem.InvalidUsageOfTypeArguments:
     case IProblem.InvalidUsageOfEnumDeclarations:
     case IProblem.InvalidUsageOfVarargs:
     case IProblem.InvalidUsageOfAnnotations:
     case IProblem.InvalidUsageOfAnnotationDeclarations:
     case IProblem.FieldMissingDeprecatedAnnotation:
     case IProblem.MethodMissingDeprecatedAnnotation:
     case IProblem.TypeMissingDeprecatedAnnotation:
     case IProblem.MissingOverrideAnnotation:
     case IProblem.IsClassPathCorrect:
     case IProblem.MethodReturnsVoid:
     case IProblem.ForbiddenReference:
     case IProblem.DiscouragedReference:
     case IProblem.UnnecessaryNLSTag:
     case IProblem.AssignmentHasNoEffect:
     case IProblem.UnsafeTypeConversion:
     case IProblem.UndefinedAnnotationMember:
     case IProblem.MissingValueForAnnotationMember:
     case IProblem.FallthroughCase:
     case IProblem.NonGenericType:
     case IProblem.UnhandledWarningToken:
       return true;
     default:
       if (JavaModelUtil.is50OrHigher(cu.getJavaProject())) {
         return SuppressWarningsSubProcessor.hasSuppressWarningsProposal(
             cu.getJavaProject(), problemId); // AJDT 3.6
       }
       return false;
   }
 }
 private void process(
     IInvocationContext context, IProblemLocation problem, Collection<ICommandAccess> proposals)
     throws CoreException {
   int id = problem.getProblemId();
   if (id == 0) { // no proposals for none-problem locations
     return;
   }
   switch (id) {
     case IProblem.UnterminatedString:
       String quoteLabel = CorrectionMessages.JavaCorrectionProcessor_addquote_description;
       int pos =
           moveBack(
               problem.getOffset() + problem.getLength(),
               problem.getOffset(),
               "\n\r",
               context.getCompilationUnit()); // $NON-NLS-1$
       proposals.add(
           new ReplaceCorrectionProposal(
               quoteLabel, context.getCompilationUnit(), pos, 0, "\"", 0)); // $NON-NLS-1$
       break;
     case IProblem.UnusedImport:
     case IProblem.DuplicateImport:
     case IProblem.CannotImportPackage:
     case IProblem.ConflictingImport:
       ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals);
       break;
     case IProblem.ImportNotFound:
       ReorgCorrectionsSubProcessor.importNotFoundProposals(context, problem, proposals);
       ReorgCorrectionsSubProcessor.removeImportStatementProposals(context, problem, proposals);
       break;
     case IProblem.UndefinedMethod:
       UnresolvedElementsSubProcessor.getMethodProposals(context, problem, false, proposals);
       break;
     case IProblem.UndefinedConstructor:
       UnresolvedElementsSubProcessor.getConstructorProposals(context, problem, proposals);
       break;
     case IProblem.UndefinedAnnotationMember:
       UnresolvedElementsSubProcessor.getAnnotationMemberProposals(context, problem, proposals);
       break;
     case IProblem.ParameterMismatch:
       UnresolvedElementsSubProcessor.getMethodProposals(context, problem, true, proposals);
       break;
     case IProblem.MethodButWithConstructorName:
       ReturnTypeSubProcessor.addMethodWithConstrNameProposals(context, problem, proposals);
       break;
     case IProblem.UndefinedField:
     case IProblem.UndefinedName:
       UnresolvedElementsSubProcessor.getVariableProposals(context, problem, null, proposals);
       break;
     case IProblem.AmbiguousType:
     case IProblem.JavadocAmbiguousType:
       UnresolvedElementsSubProcessor.getAmbiguosTypeReferenceProposals(
           context, problem, proposals);
       break;
     case IProblem.PublicClassMustMatchFileName:
       ReorgCorrectionsSubProcessor.getWrongTypeNameProposals(context, problem, proposals);
       break;
     case IProblem.PackageIsNotExpectedPackage:
       ReorgCorrectionsSubProcessor.getWrongPackageDeclNameProposals(context, problem, proposals);
       break;
     case IProblem.UndefinedType:
     case IProblem.JavadocUndefinedType:
       UnresolvedElementsSubProcessor.getTypeProposals(context, problem, proposals);
       break;
     case IProblem.TypeMismatch:
       // AspectJ Change
       if (problem.getProblemArguments() != null) { // Bug 265052
         TypeMismatchSubProcessor.addTypeMismatchProposals(context, problem, proposals);
       }
       break;
     case IProblem.IncompatibleReturnType:
       TypeMismatchSubProcessor.addIncompatibleReturnTypeProposals(context, problem, proposals);
       break;
     case IProblem.IncompatibleExceptionInThrowsClause:
       TypeMismatchSubProcessor.addIncompatibleThrowsProposals(context, problem, proposals);
       break;
     case IProblem.UnhandledException:
       LocalCorrectionsSubProcessor.addUncaughtExceptionProposals(context, problem, proposals);
       break;
     case IProblem.UnreachableCatch:
     case IProblem.InvalidCatchBlockSequence:
       LocalCorrectionsSubProcessor.addUnreachableCatchProposals(context, problem, proposals);
       break;
     case IProblem.VoidMethodReturnsValue:
       ReturnTypeSubProcessor.addVoidMethodReturnsProposals(context, problem, proposals);
       break;
     case IProblem.MethodReturnsVoid:
       ReturnTypeSubProcessor.addMethodRetunsVoidProposals(context, problem, proposals);
       break;
     case IProblem.MissingReturnType:
       ReturnTypeSubProcessor.addMissingReturnTypeProposals(context, problem, proposals);
       break;
     case IProblem.ShouldReturnValue:
       ReturnTypeSubProcessor.addMissingReturnStatementProposals(context, problem, proposals);
       break;
     case IProblem.NonExternalizedStringLiteral:
       LocalCorrectionsSubProcessor.addNLSProposals(context, problem, proposals);
       break;
     case IProblem.UnnecessaryNLSTag:
       LocalCorrectionsSubProcessor.getUnnecessaryNLSTagProposals(context, problem, proposals);
       break;
     case IProblem.NonStaticAccessToStaticField:
     case IProblem.NonStaticAccessToStaticMethod:
     case IProblem.IndirectAccessToStaticField:
     case IProblem.IndirectAccessToStaticMethod:
       LocalCorrectionsSubProcessor.addCorrectAccessToStaticProposals(context, problem, proposals);
       break;
     case IProblem.StaticMethodRequested:
     case IProblem.NonStaticFieldFromStaticInvocation:
     case IProblem.InstanceMethodDuringConstructorInvocation:
     case IProblem.InstanceFieldDuringConstructorInvocation:
       ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_STATIC, 5);
       break;
     case IProblem.NonBlankFinalLocalAssignment:
     case IProblem.DuplicateFinalLocalInitialization:
     case IProblem.FinalFieldAssignment:
     case IProblem.DuplicateBlankFinalFieldInitialization:
     case IProblem.AnonymousClassCannotExtendFinalClass:
     case IProblem.ClassExtendFinalClass:
       ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL, 9);
       break;
     case IProblem.InheritedMethodReducesVisibility:
     case IProblem.MethodReducesVisibility:
     case IProblem.OverridingNonVisibleMethod:
       ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE);
       break;
     case IProblem.FinalMethodCannotBeOverridden:
       ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_FINAL);
       break;
     case IProblem.CannotOverrideAStaticMethodWithAnInstanceMethod:
       ModifierCorrectionSubProcessor.addChangeOverriddenModifierProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_STATIC);
       break;
     case IProblem.CannotHideAnInstanceMethodWithAStaticMethod:
     case IProblem.IllegalModifierForInterfaceMethod:
     case IProblem.IllegalModifierForInterface:
     case IProblem.IllegalModifierForClass:
     case IProblem.IllegalModifierForInterfaceField:
     case IProblem.IllegalModifierForMemberInterface:
     case IProblem.IllegalModifierForMemberClass:
     case IProblem.IllegalModifierForLocalClass:
     case IProblem.IllegalModifierForArgument:
     case IProblem.IllegalModifierForField:
     case IProblem.IllegalModifierForMethod:
     case IProblem.IllegalModifierForVariable:
     case IProblem.IllegalVisibilityModifierForInterfaceMemberType:
     case IProblem.UnexpectedStaticModifierForMethod:
       ModifierCorrectionSubProcessor.addRemoveInvalidModifiersProposal(
           context, problem, proposals, 5);
       break;
     case IProblem.NotVisibleMethod:
     case IProblem.NotVisibleConstructor:
     case IProblem.NotVisibleType:
     case IProblem.NotVisibleField:
     case IProblem.JavadocNotVisibleType:
       ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_VISIBLE, 10);
       break;
     case IProblem.BodyForAbstractMethod:
     case IProblem.AbstractMethodInAbstractClass:
       ModifierCorrectionSubProcessor.addAbstractMethodProposals(context, problem, proposals);
       break;
     case IProblem.AbstractMethodMustBeImplemented:
       LocalCorrectionsSubProcessor.addUnimplementedMethodsProposals(context, problem, proposals);
       break;
     case IProblem.MissingValueForAnnotationMember:
       LocalCorrectionsSubProcessor.addValueForAnnotationProposals(context, problem, proposals);
       break;
     case IProblem.BodyForNativeMethod:
       ModifierCorrectionSubProcessor.addNativeMethodProposals(context, problem, proposals);
       break;
     case IProblem.MethodRequiresBody:
       ModifierCorrectionSubProcessor.addMethodRequiresBodyProposals(context, problem, proposals);
       break;
     case IProblem.OuterLocalMustBeFinal:
       ModifierCorrectionSubProcessor.addNonFinalLocalProposal(context, problem, proposals);
       break;
     case IProblem.UninitializedLocalVariable:
       LocalCorrectionsSubProcessor.addUninitializedLocalVariableProposal(
           context, problem, proposals);
       break;
     case IProblem.UnhandledExceptionInDefaultConstructor:
     case IProblem.UndefinedConstructorInDefaultConstructor:
     case IProblem.NotVisibleConstructorInDefaultConstructor:
       LocalCorrectionsSubProcessor.addConstructorFromSuperclassProposal(
           context, problem, proposals);
       break;
     case IProblem.UnusedPrivateMethod:
     case IProblem.UnusedPrivateConstructor:
     case IProblem.UnusedPrivateField:
     case IProblem.UnusedPrivateType:
     case IProblem.LocalVariableIsNeverUsed:
     case IProblem.ArgumentIsNeverUsed:
       LocalCorrectionsSubProcessor.addUnusedMemberProposal(context, problem, proposals);
       break;
     case IProblem.NeedToEmulateFieldReadAccess:
     case IProblem.NeedToEmulateFieldWriteAccess:
     case IProblem.NeedToEmulateMethodAccess:
     case IProblem.NeedToEmulateConstructorAccess:
       ModifierCorrectionSubProcessor.addNonAccessibleReferenceProposal(
           context, problem, proposals, ModifierCorrectionSubProcessor.TO_NON_PRIVATE, 5);
       break;
     case IProblem.SuperfluousSemicolon:
       LocalCorrectionsSubProcessor.addSuperfluousSemicolonProposal(context, problem, proposals);
       break;
     case IProblem.UnnecessaryCast:
       LocalCorrectionsSubProcessor.addUnnecessaryCastProposal(context, problem, proposals);
       break;
     case IProblem.UnnecessaryInstanceof:
       LocalCorrectionsSubProcessor.addUnnecessaryInstanceofProposal(context, problem, proposals);
       break;
     case IProblem.UnusedMethodDeclaredThrownException:
     case IProblem.UnusedConstructorDeclaredThrownException:
       LocalCorrectionsSubProcessor.addUnnecessaryThrownExceptionProposal(
           context, problem, proposals);
       break;
     case IProblem.UnqualifiedFieldAccess:
       LocalCorrectionsSubProcessor.addUnqualifiedFieldAccessProposal(context, problem, proposals);
       break;
     case IProblem.Task:
       proposals.add(new TaskMarkerProposal(context.getCompilationUnit(), problem, 10));
       break;
     case IProblem.JavadocMissing:
       JavadocTagsSubProcessor.getMissingJavadocCommentProposals(context, problem, proposals);
       break;
     case IProblem.JavadocMissingParamTag:
     case IProblem.JavadocMissingReturnTag:
     case IProblem.JavadocMissingThrowsTag:
       JavadocTagsSubProcessor.getMissingJavadocTagProposals(context, problem, proposals);
       break;
     case IProblem.JavadocInvalidThrowsClassName:
     case IProblem.JavadocDuplicateThrowsClassName:
     case IProblem.JavadocDuplicateReturnTag:
     case IProblem.JavadocDuplicateParamName:
     case IProblem.JavadocInvalidParamName:
     case IProblem.JavadocUnexpectedTag:
     case IProblem.JavadocInvalidTag:
       JavadocTagsSubProcessor.getRemoveJavadocTagProposals(context, problem, proposals);
       break;
     case IProblem.LocalVariableHidingLocalVariable:
     case IProblem.LocalVariableHidingField:
     case IProblem.FieldHidingLocalVariable:
     case IProblem.FieldHidingField:
     case IProblem.ArgumentHidingLocalVariable:
     case IProblem.ArgumentHidingField:
     case IProblem.UseAssertAsAnIdentifier:
     case IProblem.UseEnumAsAnIdentifier:
     case IProblem.RedefinedLocal:
     case IProblem.RedefinedArgument:
       LocalCorrectionsSubProcessor.addInvalidVariableNameProposals(context, problem, proposals);
       break;
     case IProblem.NoMessageSendOnArrayType:
       UnresolvedElementsSubProcessor.getArrayAccessProposals(context, problem, proposals);
       break;
     case IProblem.InvalidOperator:
       LocalCorrectionsSubProcessor.getInvalidOperatorProposals(context, problem, proposals);
       break;
     case IProblem.MissingSerialVersion:
       SerialVersionSubProcessor.getSerialVersionProposals(context, problem, proposals);
       break;
     case IProblem.UnnecessaryElse:
       LocalCorrectionsSubProcessor.getUnnecessaryElseProposals(context, problem, proposals);
       break;
     case IProblem.SuperclassMustBeAClass:
       LocalCorrectionsSubProcessor.getInterfaceExtendsClassProposals(context, problem, proposals);
       break;
     case IProblem.CodeCannotBeReached:
       LocalCorrectionsSubProcessor.getUnreachableCodeProposals(context, problem, proposals);
       break;
     case IProblem.InvalidUsageOfTypeParameters:
     case IProblem.InvalidUsageOfStaticImports:
     case IProblem.InvalidUsageOfForeachStatements:
     case IProblem.InvalidUsageOfTypeArguments:
     case IProblem.InvalidUsageOfEnumDeclarations:
     case IProblem.InvalidUsageOfVarargs:
     case IProblem.InvalidUsageOfAnnotations:
     case IProblem.InvalidUsageOfAnnotationDeclarations:
       // FICXADE  Need reflection here!
       // ECLIPSE 3.8
       //                ReorgCorrectionsSubProcessor.getNeedHigherComplianceProposals(context,
       // problem, proposals, JavaCore.VERSION_1_5);
       // ORIG
       //                ReorgCorrectionsSubProcessor.getNeed50ComplianceProposals(context,
       // problem, proposals);
       break;
     case IProblem.NonGenericType:
       TypeArgumentMismatchSubProcessor.removeMismatchedArguments(context, problem, proposals);
       break;
     case IProblem.MissingOverrideAnnotation:
       ModifierCorrectionSubProcessor.addOverrideAnnotationProposal(context, problem, proposals);
       break;
     case IProblem.FieldMissingDeprecatedAnnotation:
     case IProblem.MethodMissingDeprecatedAnnotation:
     case IProblem.TypeMissingDeprecatedAnnotation:
       ModifierCorrectionSubProcessor.addDeprecatedAnnotationProposal(context, problem, proposals);
       break;
     case IProblem.IsClassPathCorrect:
       ReorgCorrectionsSubProcessor.getIncorrectBuildPathProposals(context, problem, proposals);
       break;
     case IProblem.ForbiddenReference:
     case IProblem.DiscouragedReference:
       ReorgCorrectionsSubProcessor.getAccessRulesProposals(context, problem, proposals);
       break;
     case IProblem.AssignmentHasNoEffect:
       LocalCorrectionsSubProcessor.getAssignmentHasNoEffectProposals(context, problem, proposals);
       break;
     case IProblem.UnsafeTypeConversion:
     case IProblem.RawTypeReference:
     case IProblem.UnsafeRawMethodInvocation:
       LocalCorrectionsSubProcessor.addTypePrametersToRawTypeReference(
           context, problem, proposals);
       break;
     case IProblem.FallthroughCase:
       LocalCorrectionsSubProcessor.addFallThroughProposals(context, problem, proposals);
       break;
     case IProblem.UnhandledWarningToken:
       SuppressWarningsSubProcessor.addUnknownSuppressWarningProposals(
           context, problem, proposals);
       break;
     default:
   }
   if (JavaModelUtil.is50OrHigher(context.getCompilationUnit().getJavaProject())) {
     SuppressWarningsSubProcessor.addSuppressWarningsProposals(context, problem, proposals);
   }
 }