mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
run the init of completion contributor in a ISafeRunnable
This commit is contained in:
parent
67b40d2e68
commit
fd3e1ebcc0
1 changed files with 50 additions and 45 deletions
|
@ -5,18 +5,18 @@ package org.eclipse.cdt.internal.ui;
|
|||
* All Rights Reserved.
|
||||
*/
|
||||
|
||||
|
||||
import org.eclipse.cdt.ui.*;
|
||||
import org.eclipse.cdt.ui.ICCompletionContributor;
|
||||
import org.eclipse.cdt.ui.IFunctionSummary;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.eclipse.cdt.ui.CUIPlugin;
|
||||
import org.eclipse.cdt.ui.ICCompletionContributor;
|
||||
import org.eclipse.cdt.ui.IFunctionSummary;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.core.runtime.IConfigurationElement;
|
||||
import org.eclipse.core.runtime.IExtensionPoint;
|
||||
import org.eclipse.core.runtime.ISafeRunnable;
|
||||
import org.eclipse.core.runtime.Platform;
|
||||
|
||||
|
||||
/**
|
||||
* Manages external plugins that contribute completion and function
|
||||
* info through the CCompletionContributor extension point
|
||||
|
@ -29,47 +29,48 @@ public class CCompletionContributorManager {
|
|||
public static final String CONTRIBUTION_EXTENSION = "CCompletionContributor";
|
||||
static private CCompletionContributorManager fInstance;
|
||||
|
||||
|
||||
private CCompletionContributorManager() {
|
||||
// Initialize and scan the extension points
|
||||
}
|
||||
|
||||
public static CCompletionContributorManager getDefault() {
|
||||
if(fInstance == null) {
|
||||
if (fInstance == null) {
|
||||
fInstance = new CCompletionContributorManager();
|
||||
}
|
||||
return fInstance;
|
||||
}
|
||||
|
||||
public IFunctionSummary getFunctionInfo(String name) {
|
||||
if(!fContributorsLoaded)
|
||||
if (!fContributorsLoaded)
|
||||
loadExtensions();
|
||||
|
||||
for (int i= 0; i < fCompletionContributors.size(); i++) {
|
||||
ICCompletionContributor c = (ICCompletionContributor)fCompletionContributors.get(i);
|
||||
for (int i = 0; i < fCompletionContributors.size(); i++) {
|
||||
ICCompletionContributor c = (ICCompletionContributor) fCompletionContributors.get(i);
|
||||
IFunctionSummary f = c.getFunctionInfo(name);
|
||||
|
||||
if(f != null)
|
||||
if (f != null)
|
||||
return f;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public IFunctionSummary[] getMatchingFunctions(String frag) {
|
||||
if(!fContributorsLoaded)
|
||||
if (!fContributorsLoaded)
|
||||
loadExtensions();
|
||||
IFunctionSummary[] fs = null;
|
||||
|
||||
for (int i= 0; i < fCompletionContributors.size(); i++) {
|
||||
ICCompletionContributor c = (ICCompletionContributor)fCompletionContributors.get(i);
|
||||
for (int i = 0; i < fCompletionContributors.size(); i++) {
|
||||
ICCompletionContributor c = (ICCompletionContributor) fCompletionContributors.get(i);
|
||||
IFunctionSummary[] f = c.getMatchingFunctions(frag);
|
||||
if(f != null) {
|
||||
if(fs != null) {
|
||||
if (f != null) {
|
||||
if (fs != null) {
|
||||
int length = f.length + fs.length;
|
||||
IFunctionSummary[] ft = new IFunctionSummary[length];
|
||||
int j;
|
||||
for(j = 0; j < fs.length; j++) ft[j] = fs[j];
|
||||
for(j = 0; j < f.length; j++) ft[j + fs.length] = f[j];
|
||||
for (j = 0; j < fs.length; j++)
|
||||
ft[j] = fs[j];
|
||||
for (j = 0; j < f.length; j++)
|
||||
ft[j + fs.length] = f[j];
|
||||
fs = ft;
|
||||
} else {
|
||||
fs = f;
|
||||
|
@ -85,29 +86,33 @@ public class CCompletionContributorManager {
|
|||
|
||||
private void loadExtensions() {
|
||||
fContributorsLoaded = true;
|
||||
fCompletionContributors= new ArrayList(2);
|
||||
fCompletionContributors = new ArrayList(2);
|
||||
|
||||
// populate list
|
||||
IExtensionPoint extensionPoint= Platform.getPluginRegistry().getExtensionPoint(CUIPlugin.PLUGIN_ID, "CCompletionContributor"); //$NON-NLS-1$
|
||||
IExtensionPoint extensionPoint = Platform.getPluginRegistry().getExtensionPoint(CUIPlugin.PLUGIN_ID, "CCompletionContributor"); //$NON-NLS-1$
|
||||
if (extensionPoint != null) {
|
||||
IConfigurationElement[] elements= extensionPoint.getConfigurationElements();
|
||||
for (int i= 0; i < elements.length; i++) {
|
||||
if(elements[i].getName().equals("provider")) {
|
||||
ICCompletionContributor c;
|
||||
|
||||
IConfigurationElement[] elements = extensionPoint.getConfigurationElements();
|
||||
for (int i = 0; i < elements.length; i++) {
|
||||
if (elements[i].getName().equals("provider")) {
|
||||
try {
|
||||
final ICCompletionContributor c;
|
||||
// Instantiate the classe
|
||||
c = (ICCompletionContributor)elements[i].createExecutableExtension("class");
|
||||
c = (ICCompletionContributor) elements[i].createExecutableExtension("class");
|
||||
ISafeRunnable runnable = new ISafeRunnable() {
|
||||
public void run() throws Exception {
|
||||
// Initialize
|
||||
c.initialize();
|
||||
// Add to contributor list
|
||||
fCompletionContributors.add(c);
|
||||
}
|
||||
public void handleException(Throwable exception) {
|
||||
}
|
||||
};
|
||||
Platform.run(runnable);
|
||||
} catch (CoreException e) {
|
||||
System.out.println("Unable to instantiate ContributionManager extension");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue