package org.eclipse.dltk.tcl.internal.core; import java.util.ArrayList; import java.util.List; import org.eclipse.dltk.core.PriorityClassDLTKExtensionManager; import org.eclipse.dltk.core.PriorityDLTKExtensionManager.ElementInfo; import org.eclipse.dltk.tcl.core.TclPlugin; import org.eclipse.dltk.tcl.core.extensions.ICompletionExtension; import org.eclipse.dltk.tcl.core.extensions.IMatchLocatorExtension; import org.eclipse.dltk.tcl.core.extensions.IMixinBuildVisitorExtension; import org.eclipse.dltk.tcl.core.extensions.ISelectionExtension; import org.eclipse.dltk.tcl.core.extensions.ISourceElementRequestVisitorExtension; import org.eclipse.dltk.tcl.core.extensions.ITclLanguageExtension; public class TclExtensionManager { PriorityClassDLTKExtensionManager manager = new PriorityClassDLTKExtensionManager( TclPlugin.PLUGIN_ID + ".tclExtension", "language"); private static TclExtensionManager sInstance; public static TclExtensionManager getDefault() { if (sInstance == null) { sInstance = new TclExtensionManager(); } return sInstance; } public ITclLanguageExtension[] getExtensions() { ElementInfo[] infos = manager.getElementInfos(); if (infos == null) { return new ITclLanguageExtension[0]; } List<ITclLanguageExtension> extensions = new ArrayList<>(); for (int i = 0; i < infos.length; i++) { Object object = manager.getInitObject(infos[i]); if (object instanceof ITclLanguageExtension) { extensions.add((ITclLanguageExtension) object); } } return extensions.toArray(new ITclLanguageExtension[extensions.size()]); } public ISourceElementRequestVisitorExtension[] getSourceElementRequestoVisitorExtensions() { ITclLanguageExtension[] extensions = getExtensions(); List<ISourceElementRequestVisitorExtension> result = new ArrayList<>(); for (int i = 0; i < extensions.length; i++) { ISourceElementRequestVisitorExtension visitorExtension = extensions[i] .createSourceElementRequestVisitorExtension(); if (visitorExtension != null) { result.add(visitorExtension); } } return result.toArray( new ISourceElementRequestVisitorExtension[result.size()]); } public IMixinBuildVisitorExtension[] getMixinVisitorExtensions() { ITclLanguageExtension[] extensions = getExtensions(); List<IMixinBuildVisitorExtension> result = new ArrayList<>(); for (int i = 0; i < extensions.length; i++) { IMixinBuildVisitorExtension visitorExtension = extensions[i] .createMixinBuildVisitorExtension(); if (visitorExtension != null) { result.add(visitorExtension); } } return result.toArray(new IMixinBuildVisitorExtension[result.size()]); } public IMatchLocatorExtension[] getMatchLocatorExtensions() { ITclLanguageExtension[] extensions = getExtensions(); List<IMatchLocatorExtension> result = new ArrayList<>(); for (int i = 0; i < extensions.length; i++) { IMatchLocatorExtension visitorExtension = extensions[i] .createMatchLocatorExtension(); if (visitorExtension != null) { result.add(visitorExtension); } } return result.toArray(new IMatchLocatorExtension[result.size()]); } public ICompletionExtension[] getCompletionExtensions() { ITclLanguageExtension[] extensions = getExtensions(); List<ICompletionExtension> result = new ArrayList<>(); for (int i = 0; i < extensions.length; i++) { ICompletionExtension visitorExtension = extensions[i] .createCompletionExtension(); if (visitorExtension != null) { result.add(visitorExtension); } } return result.toArray(new ICompletionExtension[result.size()]); } public ISelectionExtension[] getSelectionExtensions() { ITclLanguageExtension[] extensions = getExtensions(); List<ISelectionExtension> result = new ArrayList<>(); for (int i = 0; i < extensions.length; i++) { ISelectionExtension visitorExtension = extensions[i] .createSelectionExtension(); if (visitorExtension != null) { result.add(visitorExtension); } } return result.toArray(new ISelectionExtension[result.size()]); } }