/******************************************************************************* * Copyright (c) 2011 xored software, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * 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()]); } }