package org.springsource.ide.eclipse.commons.completions;
import static org.eclipse.jdt.ui.PreferenceConstants.CODEASSIST_CATEGORY_ORDER;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Map.Entry;
import java.util.StringTokenizer;
import org.eclipse.core.runtime.Assert;
import org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerRegistry;
import org.eclipse.jdt.ui.PreferenceConstants;
@SuppressWarnings("restriction")
public class JDTContentAssistPrefsHelper {
private static final String JAR_TYPE_SEARCH_CATEGORY_ID = "org.springsource.ide.eclipse.commons.completions.externalTypesProposalCategory";
/**
* Modify JDT content assist preferences to disable Jar Type Search completely
*/
public static void disableJarTypeSearch() {
try {
String[] _excluded = PreferenceConstants.getExcludedCompletionProposalCategories();
LinkedHashSet<String> excluded = new LinkedHashSet<String>();
if (_excluded!=null) {
excluded.addAll(Arrays.asList(_excluded));
}
excluded.add(JAR_TYPE_SEARCH_CATEGORY_ID);
PreferenceConstants.setExcludedCompletionProposalCategories(excluded.toArray(new String[excluded.size()]));
Map<String,Integer> ranks = getCompletionProposalCategoryOrder();
Integer existingRank = ranks.get(JAR_TYPE_SEARCH_CATEGORY_ID);
if (existingRank != null) {
if (existingRank>=0xFFFF) {
//already disabled nothing to do
return;
} else {
ranks.put(JAR_TYPE_SEARCH_CATEGORY_ID, 0xFFFF+existingRank);
}
} else {
ranks.put(JAR_TYPE_SEARCH_CATEGORY_ID, 0xFFFF + 100);
}
setCompletionProposalCategoryOrder(ranks);
} catch (Exception e) {
CompletionsActivator.log(e);
}
}
private static Map<String,Integer> getCompletionProposalCategoryOrder() {
String encodedPreference= PreferenceConstants.getPreference(CODEASSIST_CATEGORY_ORDER, null);
StringTokenizer tokenizer= new StringTokenizer(encodedPreference, "\0"); //$NON-NLS-1$
int count = tokenizer.countTokens();
Map<String, Integer> result = new HashMap<>();
for (int i= 0; i < count; i++) {
String pair = tokenizer.nextToken();
String[] pieces = pair.split(":");
result.put(pieces[0], Integer.parseInt(pieces[1]));
}
return result;
}
public static void setCompletionProposalCategoryOrder(Map<String, Integer> ranks) {
Assert.isLegal(ranks != null);
StringBuffer buf= new StringBuffer(50 * ranks.size());
for (Entry<String, Integer> pair : ranks.entrySet()) {
buf.append(pair.getKey()+":"+pair.getValue());
buf.append('\0');
}
PreferenceConstants.getPreferenceStore().setValue(CODEASSIST_CATEGORY_ORDER, buf.toString());
CompletionProposalComputerRegistry.getDefault().reload();
}
}