| /******************************************************************************* |
| * Copyright (c) 2000, 2015 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 |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Gábor Kövesdán - Contribution for Bug 350000 - [content assist] Include non-prefix matches in auto-complete suggestions |
| *******************************************************************************/ |
| package org.eclipse.jdt.internal.codeassist.impl; |
| |
| import java.util.Map; |
| |
| import org.eclipse.jdt.core.compiler.CharOperation; |
| |
| @SuppressWarnings("rawtypes") |
| public class AssistOptions { |
| /** |
| * Option IDs |
| */ |
| public static final String OPTION_PerformVisibilityCheck = |
| "org.eclipse.jdt.core.codeComplete.visibilityCheck"; //$NON-NLS-1$ |
| public static final String OPTION_PerformDeprecationCheck = |
| "org.eclipse.jdt.core.codeComplete.deprecationCheck"; //$NON-NLS-1$ |
| public static final String OPTION_ForceImplicitQualification = |
| "org.eclipse.jdt.core.codeComplete.forceImplicitQualification"; //$NON-NLS-1$ |
| public static final String OPTION_FieldPrefixes = |
| "org.eclipse.jdt.core.codeComplete.fieldPrefixes"; //$NON-NLS-1$ |
| public static final String OPTION_StaticFieldPrefixes = |
| "org.eclipse.jdt.core.codeComplete.staticFieldPrefixes"; //$NON-NLS-1$ |
| public static final String OPTION_StaticFinalFieldPrefixes = |
| "org.eclipse.jdt.core.codeComplete.staticFinalFieldPrefixes"; //$NON-NLS-1$ |
| public static final String OPTION_LocalPrefixes = |
| "org.eclipse.jdt.core.codeComplete.localPrefixes"; //$NON-NLS-1$ |
| public static final String OPTION_ArgumentPrefixes = |
| "org.eclipse.jdt.core.codeComplete.argumentPrefixes"; //$NON-NLS-1$ |
| public static final String OPTION_FieldSuffixes = |
| "org.eclipse.jdt.core.codeComplete.fieldSuffixes"; //$NON-NLS-1$ |
| public static final String OPTION_StaticFieldSuffixes = |
| "org.eclipse.jdt.core.codeComplete.staticFieldSuffixes"; //$NON-NLS-1$ |
| public static final String OPTION_StaticFinalFieldSuffixes = |
| "org.eclipse.jdt.core.codeComplete.staticFinalFieldSuffixes"; //$NON-NLS-1$ |
| public static final String OPTION_LocalSuffixes = |
| "org.eclipse.jdt.core.codeComplete.localSuffixes"; //$NON-NLS-1$ |
| public static final String OPTION_ArgumentSuffixes = |
| "org.eclipse.jdt.core.codeComplete.argumentSuffixes"; //$NON-NLS-1$ |
| public static final String OPTION_PerformForbiddenReferenceCheck = |
| "org.eclipse.jdt.core.codeComplete.forbiddenReferenceCheck"; //$NON-NLS-1$ |
| public static final String OPTION_PerformDiscouragedReferenceCheck = |
| "org.eclipse.jdt.core.codeComplete.discouragedReferenceCheck"; //$NON-NLS-1$ |
| public static final String OPTION_CamelCaseMatch = |
| "org.eclipse.jdt.core.codeComplete.camelCaseMatch"; //$NON-NLS-1$ |
| public static final String OPTION_SubstringMatch = |
| "org.eclipse.jdt.core.codeComplete.substringMatch"; //$NON-NLS-1$ |
| public static final String OPTION_SuggestStaticImports = |
| "org.eclipse.jdt.core.codeComplete.suggestStaticImports"; //$NON-NLS-1$ |
| |
| public static final String ENABLED = "enabled"; //$NON-NLS-1$ |
| public static final String DISABLED = "disabled"; //$NON-NLS-1$ |
| |
| public boolean checkVisibility = false; |
| public boolean checkDeprecation = false; |
| public boolean checkForbiddenReference = false; |
| public boolean checkDiscouragedReference = false; |
| public boolean forceImplicitQualification = false; |
| public boolean camelCaseMatch = true; |
| public boolean substringMatch = true; |
| public boolean suggestStaticImport = true; |
| public char[][] fieldPrefixes = null; |
| public char[][] staticFieldPrefixes = null; |
| public char[][] staticFinalFieldPrefixes = null; |
| public char[][] localPrefixes = null; |
| public char[][] argumentPrefixes = null; |
| public char[][] fieldSuffixes = null; |
| public char[][] staticFieldSuffixes = null; |
| public char[][] staticFinalFieldSuffixes = null; |
| public char[][] localSuffixes = null; |
| public char[][] argumentSuffixes = null; |
| |
| /** |
| * Initializing the assist options with default settings |
| */ |
| public AssistOptions() { |
| // Initializing the assist options with default settings |
| } |
| |
| /** |
| * Initializing the assist options with external settings |
| */ |
| public AssistOptions(Map settings) { |
| if (settings == null) |
| return; |
| |
| set(settings); |
| } |
| public void set(Map optionsMap) { |
| |
| Object optionValue; |
| if ((optionValue = optionsMap.get(OPTION_PerformVisibilityCheck)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.checkVisibility = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.checkVisibility = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_ForceImplicitQualification)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.forceImplicitQualification = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.forceImplicitQualification = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_FieldPrefixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.fieldPrefixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.fieldPrefixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_StaticFieldPrefixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.staticFieldPrefixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.staticFieldPrefixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_StaticFinalFieldPrefixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.staticFinalFieldPrefixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.staticFinalFieldPrefixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_LocalPrefixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.localPrefixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.localPrefixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_ArgumentPrefixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.argumentPrefixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.argumentPrefixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_FieldSuffixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.fieldSuffixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.fieldSuffixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_StaticFieldSuffixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.staticFieldSuffixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.staticFieldSuffixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_StaticFinalFieldSuffixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.staticFinalFieldSuffixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.staticFinalFieldSuffixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_LocalSuffixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.localSuffixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.localSuffixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_ArgumentSuffixes)) != null) { |
| if (optionValue instanceof String) { |
| String stringValue = (String) optionValue; |
| if (stringValue.length() > 0){ |
| this.argumentSuffixes = splitAndTrimOn(',', stringValue.toCharArray()); |
| } else { |
| this.argumentSuffixes = null; |
| } |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_PerformForbiddenReferenceCheck)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.checkForbiddenReference = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.checkForbiddenReference = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_PerformDiscouragedReferenceCheck)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.checkDiscouragedReference = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.checkDiscouragedReference = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_CamelCaseMatch)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.camelCaseMatch = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.camelCaseMatch = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_SubstringMatch)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.substringMatch = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.substringMatch = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_PerformDeprecationCheck)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.checkDeprecation = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.checkDeprecation = false; |
| } |
| } |
| if ((optionValue = optionsMap.get(OPTION_SuggestStaticImports)) != null) { |
| if (ENABLED.equals(optionValue)) { |
| this.suggestStaticImport = true; |
| } else if (DISABLED.equals(optionValue)) { |
| this.suggestStaticImport = false; |
| } |
| } |
| } |
| |
| private char[][] splitAndTrimOn(char divider, char[] arrayToSplit) { |
| char[][] result = CharOperation.splitAndTrimOn(',', arrayToSplit); |
| |
| int length = result.length; |
| |
| int resultCount = 0; |
| for (int i = 0; i < length; i++) { |
| if(result[i].length != 0) { |
| result[resultCount++] = result[i]; |
| } |
| } |
| if(resultCount != length) { |
| System.arraycopy(result, 0, result = new char[resultCount][], 0, resultCount); |
| } |
| return result; |
| } |
| } |