[521209] Add/enable Typing preferences
diff --git a/json/bundles/org.eclipse.wst.json.ui/META-INF/MANIFEST.MF b/json/bundles/org.eclipse.wst.json.ui/META-INF/MANIFEST.MF
index 3748aeb..a81c6a6 100755
--- a/json/bundles/org.eclipse.wst.json.ui/META-INF/MANIFEST.MF
+++ b/json/bundles/org.eclipse.wst.json.ui/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.wst.json.ui;singleton:=true
-Bundle-Version: 1.0.400.qualifier
+Bundle-Version: 1.0.500.qualifier
 Bundle-Activator: org.eclipse.wst.json.ui.internal.JSONUIPlugin
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
diff --git a/json/bundles/org.eclipse.wst.json.ui/plugin.xml b/json/bundles/org.eclipse.wst.json.ui/plugin.xml
index 225573a..f278be8 100755
--- a/json/bundles/org.eclipse.wst.json.ui/plugin.xml
+++ b/json/bundles/org.eclipse.wst.json.ui/plugin.xml
@@ -37,10 +37,12 @@
 		<documentationTextHover
         	class="org.eclipse.wst.json.ui.internal.text.hover.JSONHoverProcessor"
         	target="org.eclipse.wst.json.JSON" />
-		<!--<provisionalConfiguration
+		<!--
+		<provisionalConfiguration
 			type="characterpairmatcher"
 			class="org.eclipse.wst.json.ui.internal.text.JSONDocumentRegionEdgeMatcher"
-			target="org.eclipse.wst.json.core.jsonsource" />-->
+			target="org.eclipse.wst.json.core.jsonsource" />
+		-->
 		<provisionalConfiguration
 			type="foldingstrategy"
 			class="org.eclipse.wst.json.ui.internal.projection.JSONFoldingStrategy"
@@ -151,13 +153,12 @@
 			id="org.eclipse.wst.json.ui.internal.preferences.JSONCatalogPreferencePage">
 			<keywordReference id="org.eclipse.wst.json.ui.jsoncatalog"/>
 		</page>
-		<!--
 		<page
 			name="%JSON_Typing"
 			category="org.eclipse.wst.sse.ui.preferences.json.source"
 			class="org.eclipse.wst.json.ui.internal.preferences.JSONTypingPreferencePage"
 			id="org.eclipse.wst.sse.ui.preferences.json.typing">
-		</page>-->
+		</page>
     	<page
             name="%JSON_Validator.name"
             category="org.eclipse.wst.json.ui.preferences.json.json"
diff --git a/json/bundles/org.eclipse.wst.json.ui/pom.xml b/json/bundles/org.eclipse.wst.json.ui/pom.xml
index ea81b88..d12f2c9 100644
--- a/json/bundles/org.eclipse.wst.json.ui/pom.xml
+++ b/json/bundles/org.eclipse.wst.json.ui/pom.xml
@@ -21,6 +21,6 @@
 
   <groupId>org.eclipse.webtools.sourceediting</groupId>
   <artifactId>org.eclipse.wst.json.ui</artifactId>
-  <version>1.0.400-SNAPSHOT</version>
+  <version>1.0.500-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.java b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.java
index be825c5..61b7031 100644
--- a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.java
+++ b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.java
@@ -1,5 +1,5 @@
 /**

- *  Copyright (c) 2013-2016 Angelo ZERR.

+ *  Copyright (c) 2013-2021 Angelo ZERR. and others

  *  All rights reserved. This program and the accompanying materials

  *  are made available under the terms of the Eclipse Public License 2.0

  *  which accompanies this distribution, and is available at

@@ -119,6 +119,11 @@
 	public static String PrefsLabel_WrappingInsertLineBreak;

 	public static String PrefsLabel_SelectorWhitespace;

 

+	public static String Automatically_close;

+	public static String Close_braces;

+	public static String Close_brackets;

+	public static String Close_strings;

+

 	public static String Creating_files_encoding;

 

 	static {

diff --git a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.properties b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.properties
index 1495191..971fdc4 100644
--- a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.properties
+++ b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/JSONUIMessages.properties
@@ -1,5 +1,5 @@
 ###############################################################################

-# Copyright (c) 2015, 2018 IBM Corporation and others.

+# Copyright (c) 2015, 2021 IBM Corporation and others.

 # This program and the accompanying materials

 # are made available under the terms of the Eclipse Public License 2.0

 # which accompanies this distribution, and is available at

@@ -107,3 +107,7 @@
 The_url_field_is_required=The url field is required.

 Invalid_URL=Invalid url.

 

+Automatically_close=Automatically close

+Close_braces=Braces

+Close_brackets=(Parentheses) and [square] brackets

+Close_strings=Strings

diff --git a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONTypingPreferencePage.java b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONTypingPreferencePage.java
new file mode 100644
index 0000000..4c15eb5
--- /dev/null
+++ b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONTypingPreferencePage.java
@@ -0,0 +1,81 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2021 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     
+ *******************************************************************************/
+package org.eclipse.wst.json.ui.internal.preferences;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.wst.json.ui.internal.JSONUIMessages;
+import org.eclipse.wst.json.ui.internal.JSONUIPlugin;
+import org.eclipse.wst.sse.ui.internal.preferences.ui.AbstractPreferencePage;
+ 
+public class JSONTypingPreferencePage extends AbstractPreferencePage {
+
+	private Button fCloseBraces;
+	private Button fCloseBrackets;
+	private Button fCloseStrings;
+
+	protected Control createContents(Composite parent) {
+		Composite composite = super.createComposite(parent, 1);
+
+		createAutoComplete(composite);
+		
+		setSize(composite);
+		loadPreferences();
+		
+		return composite;
+	}
+	
+	private void createAutoComplete(Composite parent) {
+		Group group = createGroup(parent, 1);
+		
+		group.setText(JSONUIMessages.Automatically_close);
+
+		fCloseBraces = createCheckBox(group, JSONUIMessages.Close_braces);
+		fCloseBrackets = createCheckBox(group, JSONUIMessages.Close_brackets);
+		fCloseStrings = createCheckBox(group, JSONUIMessages.Close_strings);
+	}
+	
+	public boolean performOk() {
+		boolean result = super.performOk();
+		
+		JSONUIPlugin.getDefault().savePluginPreferences();
+		
+		return result;
+	}
+	
+	protected void initializeValues() {
+		initCheckbox(fCloseBraces, JSONUIPreferenceNames.TYPING_CLOSE_BRACES);
+		initCheckbox(fCloseBrackets, JSONUIPreferenceNames.TYPING_CLOSE_BRACKETS);
+		initCheckbox(fCloseStrings, JSONUIPreferenceNames.TYPING_CLOSE_STRINGS);
+	}
+	
+	protected void performDefaults() {
+		defaultCheckbox(fCloseBraces, JSONUIPreferenceNames.TYPING_CLOSE_BRACES);
+		defaultCheckbox(fCloseBrackets, JSONUIPreferenceNames.TYPING_CLOSE_BRACKETS);
+		defaultCheckbox(fCloseStrings, JSONUIPreferenceNames.TYPING_CLOSE_STRINGS);
+	}
+	
+	protected void storeValues() {
+		getPreferenceStore().setValue(JSONUIPreferenceNames.TYPING_CLOSE_BRACES, (fCloseBraces != null) ? fCloseBraces.getSelection() : false);
+		getPreferenceStore().setValue(JSONUIPreferenceNames.TYPING_CLOSE_BRACKETS, (fCloseBrackets != null) ? fCloseBrackets.getSelection() : false);
+		getPreferenceStore().setValue(JSONUIPreferenceNames.TYPING_CLOSE_STRINGS, (fCloseStrings != null) ? fCloseStrings.getSelection() : false);
+	}
+	
+	protected IPreferenceStore doGetPreferenceStore() {
+		return JSONUIPlugin.getDefault().getPreferenceStore();
+	}
+}
diff --git a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceInitializer.java b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceInitializer.java
index 7cfc169..286ab54 100644
--- a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceInitializer.java
+++ b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceInitializer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2020 IBM Corporation and others.
+ * Copyright (c) 2006, 2021 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -113,6 +113,10 @@
 		PreferenceConverter.setDefault(store, AppearancePreferenceNames.CODEASSIST_PARAMETERS_BACKGROUND, ColorHelper.findRGB(registry, AppearancePreferenceNames.CODEASSIST_PARAMETERS_BACKGROUND, new RGB(255, 255, 255)));
 		PreferenceConverter.setDefault(store, AppearancePreferenceNames.CODEASSIST_PARAMETERS_FOREGROUND, ColorHelper.findRGB(registry, AppearancePreferenceNames.CODEASSIST_PARAMETERS_FOREGROUND, new RGB(0, 0, 0)));
 
+		store.setDefault(JSONUIPreferenceNames.TYPING_CLOSE_BRACES, true);
+		store.setDefault(JSONUIPreferenceNames.TYPING_CLOSE_BRACKETS, false);
+		store.setDefault(JSONUIPreferenceNames.TYPING_CLOSE_STRINGS, true);
+
 		// hover help preferences are not part of base text editor preference
 		String mod2Name = Action.findModifierString(SWT.MOD2);
 		/*
diff --git a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceNames.java b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceNames.java
index da9bfed..75eed0a 100644
--- a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceNames.java
+++ b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/preferences/JSONUIPreferenceNames.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2016 IBM Corporation and others.
+ * Copyright (c) 2005, 2021 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
@@ -144,4 +144,30 @@
 	 */
 	public static final String INSERT_SINGLE_SUGGESTION = "insertSingleSuggestion"; //$NON-NLS-1$
 
+	/**
+	 * The key to store the option for auto-completing strings (" and ') while
+	 * typing.
+	 * <p>
+	 * Value is of type <code>boolean</code>.
+	 * </p>
+	 */
+	public static final String TYPING_CLOSE_STRINGS = "closeStrings"; //$NON-NLS-1$
+
+	/**
+	 * The key to store the option for auto-completing braces ({) while
+	 * typing.
+	 * <p>
+	 * Value is of type <code>boolean</code>.
+	 * </p>
+	 */
+	public static final String TYPING_CLOSE_BRACES = "closeBraces"; //$NON-NLS-1$
+
+	/**
+	 * The key to store the option for auto-completing brackets ([ and () while
+	 * typing.
+	 * <p>
+	 * Value is of type <code>boolean</code>.
+	 * </p>
+	 */
+	public static final String TYPING_CLOSE_BRACKETS = "closeBrackets"; //$NON-NLS-1$
 }
diff --git a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/text/JSONCharacterPairInserter.java b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/text/JSONCharacterPairInserter.java
index c9383fc..a5e4f5d 100644
--- a/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/text/JSONCharacterPairInserter.java
+++ b/json/bundles/org.eclipse.wst.json.ui/src/org/eclipse/wst/json/ui/internal/text/JSONCharacterPairInserter.java
@@ -12,20 +12,30 @@
  */
 package org.eclipse.wst.json.ui.internal.text;

 

+import org.eclipse.jface.preference.IPreferenceStore;

 import org.eclipse.jface.text.BadLocationException;

 import org.eclipse.jface.text.IDocument;

 import org.eclipse.jface.text.link.ILinkedModeListener;

 import org.eclipse.jface.text.link.LinkedModeModel;

 import org.eclipse.jface.text.link.LinkedModeUI.ExitFlags;

 import org.eclipse.jface.text.link.LinkedModeUI.IExitPolicy;

+import org.eclipse.jface.text.source.ISourceViewer;

+import org.eclipse.jface.util.IPropertyChangeListener;

+import org.eclipse.jface.util.PropertyChangeEvent;

 import org.eclipse.swt.events.VerifyEvent;

+import org.eclipse.wst.json.ui.internal.JSONUIPlugin;

+import org.eclipse.wst.json.ui.internal.preferences.JSONUIPreferenceNames;

 import org.eclipse.wst.sse.ui.typing.AbstractCharacterPairInserter;

 

 /**

- * Character pair insrter for JSON to auto close JSON character like '{', '['.

+ * Character pair inserter for JSON to auto close JSON character like '{', '['.

  *

  */

-public class JSONCharacterPairInserter extends AbstractCharacterPairInserter {

+public class JSONCharacterPairInserter extends AbstractCharacterPairInserter implements IPropertyChangeListener {

+

+	private boolean fCloseStrings;

+	private boolean fCloseBrackets;

+	private boolean fCloseBraces;

 

 	public boolean hasPair(char c) {

 		switch (c) {

@@ -39,6 +49,15 @@
 		}

 	}

 

+	@Override

+	public void initialize() {

+		IPreferenceStore store = JSONUIPlugin.getDefault().getPreferenceStore();

+		fCloseStrings = store.getBoolean(JSONUIPreferenceNames.TYPING_CLOSE_STRINGS);

+		fCloseBraces = store.getBoolean(JSONUIPreferenceNames.TYPING_CLOSE_BRACES);

+		fCloseBrackets = store.getBoolean(JSONUIPreferenceNames.TYPING_CLOSE_BRACKETS);

+		store.addPropertyChangeListener(this);

+	}

+

 	protected char getPair(char c) {

 		switch (c) {

 		case '\'':

@@ -98,4 +117,28 @@
 			IDocument document) {

 		return new ExitPolicy(exit, escape, document);

 	}

+	public void propertyChange(PropertyChangeEvent event) {

+		if (JSONUIPreferenceNames.TYPING_CLOSE_BRACKETS.equals(event.getProperty()))

+			fCloseBrackets = ((Boolean) event.getNewValue()).booleanValue();

+		else if (JSONUIPreferenceNames.TYPING_CLOSE_BRACES.equals(event.getProperty()))

+			fCloseBraces = ((Boolean) event.getNewValue()).booleanValue();

+		else if (JSONUIPreferenceNames.TYPING_CLOSE_STRINGS.equals(event.getProperty()))

+			fCloseStrings = ((Boolean) event.getNewValue()).booleanValue();

+	}

+

+	@Override

+	protected boolean shouldPair(ISourceViewer viewer, char c) {

+		switch (c) {

+			case '\'' :

+			case '"' :

+				return fCloseStrings;

+			case '[' :

+			case '(' :

+				return fCloseBrackets;

+			case '{' :

+				return fCloseBraces;

+			default :

+				return false;

+		}

+	}

 }

diff --git a/json/features/org.eclipse.wst.json_ui.feature/feature.xml b/json/features/org.eclipse.wst.json_ui.feature/feature.xml
index b5f42a1..00d001a 100644
--- a/json/features/org.eclipse.wst.json_ui.feature/feature.xml
+++ b/json/features/org.eclipse.wst.json_ui.feature/feature.xml
@@ -11,11 +11,10 @@
     Contributors:
         IBM Corporation - initial API and implementation
  -->
-
 <feature
       id="org.eclipse.wst.json_ui.feature"
       label="%featureName"
-      version="1.1.8.qualifier"
+      version="1.1.9.qualifier"
       provider-name="%providerName"
       plugin="org.eclipse.wst.json.ui"
       license-feature="org.eclipse.license"
diff --git a/json/features/org.eclipse.wst.json_ui.feature/pom.xml b/json/features/org.eclipse.wst.json_ui.feature/pom.xml
index ad16bf5..9e3e729 100644
--- a/json/features/org.eclipse.wst.json_ui.feature/pom.xml
+++ b/json/features/org.eclipse.wst.json_ui.feature/pom.xml
@@ -21,7 +21,7 @@
 
   <groupId>org.eclipse.webtools.sourceediting</groupId>
   <artifactId>org.eclipse.wst.json_ui.feature</artifactId>
-  <version>1.1.8-SNAPSHOT</version>
+  <version>1.1.9-SNAPSHOT</version>
   <packaging>eclipse-feature</packaging>
 
   <build>