Bug 534449 - [formatter] org.eclipse.jdt.core.javaFormatter project setting lost during ProfileVersioner migration

Copy over profile-specific settings when migrating a profile.

Change-Id: I400416740fa3e262d5822819e05e6f84e02a9c39
Signed-off-by: Brian de Alwis <bsd@mt.ca>
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterMigrationTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterMigrationTest.java
new file mode 100644
index 0000000..927a243
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterMigrationTest.java
@@ -0,0 +1,51 @@
+/*******************************************************************************
+ * Copyright (c) 2018 Manumitting Technologies Inc 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:
+ *     Manumitting Technologies Inc - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.ui.tests.core;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.CustomProfile;
+import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileVersioner;
+
+import junit.framework.Test;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+/**
+ * Tests for migrating formatter profiles.
+ */
+public class CodeFormatterMigrationTest extends TestCase {
+	private static final Class<CodeFormatterMigrationTest> THIS= CodeFormatterMigrationTest.class;
+
+	public CodeFormatterMigrationTest(String name) {
+		super(name);
+	}
+
+	public static Test suite() {
+		return new TestSuite(THIS);
+	}
+
+	public void test13to14_javaFormatter() {
+		Map<String, String> options= new HashMap<>();
+		options.put("org.eclipse.jdt.core.javaFormatter", "foo");
+		int profileVersion= 13; // ProfileVersioner.VERSION_13
+		String kind= null; // kind
+		CustomProfile profile= new CustomProfile("13", options, profileVersion, kind);
+
+		assertEquals(-1, ProfileVersioner.getVersionStatus(profile)); // older
+		new ProfileVersioner().update(profile);
+
+		assertEquals(0, ProfileVersioner.getVersionStatus(profile));
+		assertTrue(profile.getSettings().containsKey("org.eclipse.jdt.core.javaFormatter"));
+		assertEquals("foo", profile.getSettings().get("org.eclipse.jdt.core.javaFormatter"));
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CoreTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CoreTests.java
index 09f0ee6..11ac989 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CoreTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CoreTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 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
@@ -43,6 +43,7 @@
 		suite.addTest(CodeFormatterUtilTest.suite());
 		suite.addTest(CodeFormatterTest.suite());
 		suite.addTest(CodeFormatterTest9.suite());
+		suite.addTest(CodeFormatterMigrationTest.suite());
 		suite.addTest(HierarchicalASTVisitorTest.suite());
 		suite.addTest(ImportOrganizeTest.suite());
 		suite.addTest(ImportOrganizeTest18.suite());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java
index bee4383..418f6f0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/ProfileVersioner.java
@@ -119,7 +119,10 @@
 		            newSettings.put(key, value);
 		        }
 		    }
-
+		    // copy over profile options (not formatter settings)
+		    if (oldSettings.containsKey(JavaCore.JAVA_FORMATTER)) {
+		        newSettings.put(JavaCore.JAVA_FORMATTER, oldSettings.get(JavaCore.JAVA_FORMATTER));
+		    }
 		}
 		setLatestCompliance(newSettings);
 		return newSettings;