| /******************************************************************************* |
| * Copyright (c) 2011 xored software, Inc. |
| * |
| * 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 |
| * |
| * Contributors: |
| * xored software, Inc. - initial API and Implementation (Alex Panchenko) |
| *******************************************************************************/ |
| package org.eclipse.dltk.javascript.internal.parser; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.dltk.core.IModelElement; |
| import org.eclipse.dltk.javascript.parser.JSProblemReporter; |
| import org.eclipse.dltk.javascript.parser.JavaScriptParserPlugin; |
| import org.eclipse.dltk.javascript.parser.NodeTransformer; |
| import org.eclipse.dltk.utils.SimpleExtensionManager; |
| |
| public class NodeTransformerManager extends |
| SimpleExtensionManager<NodeTransformer.Factory> { |
| |
| private NodeTransformerManager() { |
| super(NodeTransformer.Factory.class, JavaScriptParserPlugin.PLUGIN_ID |
| + ".transformer"); |
| } |
| |
| private static NodeTransformerManager instance; |
| |
| public static NodeTransformerManager getManager() { |
| if (instance == null) { |
| instance = new NodeTransformerManager(); |
| } |
| return instance; |
| } |
| |
| public static final NodeTransformer[] NO_TRANSFORMERS = new NodeTransformer[0]; |
| |
| public static NodeTransformer[] createTransformers(IModelElement element, |
| JSProblemReporter reporter) { |
| final NodeTransformer.Factory[] factories = getManager().getInstances(); |
| if (factories.length == 0) { |
| return NO_TRANSFORMERS; |
| } |
| final List<NodeTransformer> result = new ArrayList<NodeTransformer>( |
| factories.length); |
| for (NodeTransformer.Factory factory : factories) { |
| final NodeTransformer transformer = factory.create(element, |
| reporter); |
| if (transformer != null) { |
| result.add(transformer); |
| } |
| } |
| if (result.isEmpty()) { |
| return NO_TRANSFORMERS; |
| } |
| return result.toArray(new NodeTransformer[result.size()]); |
| } |
| |
| } |