--- /dev/null
+/*******************************************************************************
+ * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.text.correction;
+
+import java.util.Collection;
+import java.util.Hashtable;
+import java.util.Map;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.IProposableFix;
+import org.eclipse.jdt.internal.corext.fix.PotentialProgrammingProblemsFix;
+
+import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
+import org.eclipse.jdt.ui.cleanup.ICleanUp;
+import org.eclipse.jdt.ui.text.java.IInvocationContext;
+import org.eclipse.jdt.ui.text.java.IProblemLocation;
+import org.eclipse.jdt.ui.text.java.correction.ICommandAccess;
+
+import org.eclipse.jdt.internal.ui.JavaPluginImages;
+import org.eclipse.jdt.internal.ui.fix.PotentialProgrammingProblemsCleanUp;
+import org.eclipse.jdt.internal.ui.text.correction.proposals.FixCorrectionProposal;
+
+/**
+ * Subprocessor for serial version quickfix proposals.
+ *
+ * @since 3.1
+ */
+public final class SerialVersionSubProcessor {
+
+ public static final class SerialVersionProposal extends FixCorrectionProposal {
+ private boolean fIsDefaultProposal;
+
+ public SerialVersionProposal(IProposableFix fix, int relevance, IInvocationContext context, boolean isDefault) {
+ super(fix, createCleanUp(isDefault), relevance, JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_ADD), context);
+ fIsDefaultProposal= isDefault;
+ }
+
+ private static ICleanUp createCleanUp(boolean isDefault) {
+ Map<String, String> options= new Hashtable<String, String>();
+ options.put(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID, CleanUpOptions.TRUE);
+ if (isDefault) {
+ options.put(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_DEFAULT, CleanUpOptions.TRUE);
+ } else {
+ options.put(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_GENERATED, CleanUpOptions.TRUE);
+ }
+ return new PotentialProgrammingProblemsCleanUp(options);
+ }
+
+ public boolean isDefaultProposal() {
+ return fIsDefaultProposal;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public Object getAdditionalProposalInfo(IProgressMonitor monitor) {
+ if (fIsDefaultProposal) {
+ return CorrectionMessages.SerialVersionDefaultProposal_message_default_info;
+ } else {
+ return CorrectionMessages.SerialVersionHashProposal_message_generated_info;
+ }
+ }
+ }
+
+
+ /**
+ * Determines the serial version quickfix proposals.
+ *
+ * @param context
+ * the invocation context
+ * @param location
+ * the problem location
+ * @param proposals
+ * the proposal collection to extend
+ */
+ public static final void getSerialVersionProposals(final IInvocationContext context, final IProblemLocation location, final Collection<ICommandAccess> proposals) {
+
+ Assert.isNotNull(context);
+ Assert.isNotNull(location);
+ Assert.isNotNull(proposals);
+
+ IProposableFix[] fixes= PotentialProgrammingProblemsFix.createMissingSerialVersionFixes(context.getASTRoot(), location);
+ if (fixes != null) {
+ proposals.add(new SerialVersionProposal(fixes[0], 9, context, true));
+ proposals.add(new SerialVersionProposal(fixes[1], 9, context, false));
+ }
+ }
+}