blob: 7e516faf3f985cb0500168ff2bbe375a32404285 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2016 IBM Corporation and others.
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0
*
*******************************************************************************/
package org.eclipse.dltk.internal.core;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.dltk.codeassist.ICompletionEngine;
import org.eclipse.dltk.codeassist.ISelectionEngine;
import org.eclipse.dltk.core.DLTKCore;
import org.eclipse.dltk.core.PriorityClassDLTKExtensionManager;
import org.eclipse.dltk.core.search.matching.IMatchLocator;
import org.eclipse.dltk.core.search.matching.MatchLocator;
import org.eclipse.dltk.utils.PriorityNatureExtensionManager;
public class InternalDLTKLanguageManager {
private final static String LANGUAGE_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".language"; //$NON-NLS-1$
private final static String SOURCE_ELEMENT_PARSERS_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".sourceElementParsers"; //$NON-NLS-1$
private final static String BINARY_ELEMENT_PARSERS_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".binaryElementParsers"; //$NON-NLS-1$
private final static String SOURCE_PARSERS_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".sourceParsers"; //$NON-NLS-1$
public final static String PROBLEM_FACTORY_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".problemFactory"; //$NON-NLS-1$
public final static String COMPLETION_ENGINE_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".completionEngine"; //$NON-NLS-1$
private final static String SELECTION_ENGINE_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".selectionEngine"; //$NON-NLS-1$
private final static String SEARCH_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".search"; //$NON-NLS-1$
private final static String CALLHIERARCHY_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".callHierarchy"; //$NON-NLS-1$
private final static String FILE_HIERARCHY_RESOLVER_EXTPOINT = DLTKCore.PLUGIN_ID
+ ".fileHierarchyResolvers";//$NON-NLS-1$
private static PriorityClassDLTKExtensionManager languageToolkitsManager = new PriorityClassDLTKExtensionManager(
LANGUAGE_EXTPOINT);
// Inner managers
private static PriorityClassDLTKExtensionManager sourceElementParsersManager = new NewInstanceClassBasedDLTKExtensionManager(
SOURCE_ELEMENT_PARSERS_EXTPOINT);
private static PriorityClassDLTKExtensionManager binaryElementParsersManager = new NewInstanceClassBasedDLTKExtensionManager(
BINARY_ELEMENT_PARSERS_EXTPOINT);
private static PriorityClassDLTKExtensionManager problemFactoryManager = new PriorityClassDLTKExtensionManager(
PROBLEM_FACTORY_EXTPOINT) {
@Override
protected boolean isValidConfigurationElement(
IConfigurationElement element) {
return "problemFactory".equals(element.getName());
}
};
private static PriorityNatureExtensionManager<ISelectionEngine> selectionEngineManager = new PriorityNatureExtensionManager<ISelectionEngine>(
SELECTION_ENGINE_EXTPOINT, ISelectionEngine.class) {
@Override
protected void saveInstances(String natureId,
ISelectionEngine[] resultArray) {
// empty
}
};
private static PriorityNatureExtensionManager<ICompletionEngine> completionEngineManager = new PriorityNatureExtensionManager<ICompletionEngine>(
COMPLETION_ENGINE_EXTPOINT, ICompletionEngine.class) {
@Override
protected void saveInstances(String natureId,
ICompletionEngine[] resultArray) {
// empty
}
};
private static PriorityClassDLTKExtensionManager sourceParsersManager = new NewInstanceClassBasedDLTKExtensionManager(
SOURCE_PARSERS_EXTPOINT);
private static PriorityClassDLTKExtensionManager searchManager = new PriorityClassDLTKExtensionManager(
SEARCH_EXTPOINT) {
@Override
protected boolean isValidConfigurationElement(
IConfigurationElement element) {
return "searchFactory".equals(element.getName())
|| "seachFactory".equals(element.getName());
// XXX there was a typo in schema
}
};
private static PriorityClassDLTKExtensionManager callHierarchyManager = new PriorityClassDLTKExtensionManager(
CALLHIERARCHY_EXTPOINT);
private static PriorityClassDLTKExtensionManager fileHierarchyResolversManager = new PriorityClassDLTKExtensionManager(
FILE_HIERARCHY_RESOLVER_EXTPOINT);
public static PriorityClassDLTKExtensionManager getSourceElementParsersManager() {
return sourceElementParsersManager;
}
public static PriorityClassDLTKExtensionManager getBinaryElementParsersManager() {
return binaryElementParsersManager;
}
public static PriorityClassDLTKExtensionManager getProblemFactoryManager() {
return problemFactoryManager;
}
public static PriorityNatureExtensionManager<ISelectionEngine> getSelectionEngineManager() {
return selectionEngineManager;
}
public static PriorityNatureExtensionManager<ICompletionEngine> getCompletionEngineManager() {
return completionEngineManager;
}
public static PriorityClassDLTKExtensionManager getSourceParsersManager() {
return sourceParsersManager;
}
public static PriorityClassDLTKExtensionManager getSearchManager() {
return searchManager;
}
public static PriorityClassDLTKExtensionManager getCallHierarchyManager() {
return callHierarchyManager;
}
public static PriorityClassDLTKExtensionManager getFileHierarchyResolversManager() {
return fileHierarchyResolversManager;
}
public static PriorityClassDLTKExtensionManager getLanguageToolkitsManager() {
return languageToolkitsManager;
}
private static final PriorityClassDLTKExtensionManager matchLocatorManager = new PriorityClassDLTKExtensionManager(
SEARCH_EXTPOINT) {
@Override
protected boolean isValidConfigurationElement(
IConfigurationElement element) {
return "matchLocator".equals(element.getName());
}
@Override
public Object getInitObject(ElementInfo ext) {
try {
if (ext != null)
return createObject(ext.config);
} catch (CoreException e) {
if (DLTKCore.DEBUG)
e.printStackTrace();
}
return null;
}
};
/**
* @param natureID
* @return
*/
public static IMatchLocator createMatchLocator(String natureID) {
final IMatchLocator locator = (IMatchLocator) matchLocatorManager
.getObject(natureID);
if (locator != null) {
return locator;
}
return new MatchLocator();
}
}