/*
Copyright (c) 2009 Andr� Arnold.
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:
Andr� Arnold - initial API and implementation
*/
package org.eclipse.xtend.middleend;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.emf.mwe.core.WorkflowContext;
import org.eclipse.emf.mwe.core.issues.Issues;
import org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent;
import org.eclipse.emf.mwe.core.monitor.ProgressMonitor;
import org.eclipse.xtend.middleend.plugins.LanguageSpecificMiddleEndFactory;
public class LanguageSetup extends AbstractWorkflowComponent {
private final List<String> _middleEndFactories = new ArrayList<String>();
public void addLanguageContributor (String contributorClassName) {
_middleEndFactories.add(contributorClassName);
}
public void addCompiledFunctionContributor (String contributorClassName) {
_middleEndFactories.add(contributorClassName);
}
@SuppressWarnings("unchecked")
@Override
protected void invokeInternal(WorkflowContext ctx, ProgressMonitor monitor,
Issues issues) {
for (String _middleEndFactoryClassName : _middleEndFactories) {
final Class<? extends LanguageSpecificMiddleEndFactory> middleEndFactory;
try {
middleEndFactory = (Class<? extends LanguageSpecificMiddleEndFactory>) Class.forName(_middleEndFactoryClassName);
LanguageContributor.INSTANCE.addLanguageContribution(middleEndFactory);
} catch (ClassNotFoundException e) {
issues.addError("The class " + _middleEndFactoryClassName + " has not been found");
} catch (ClassCastException cce) {
issues.addError("The class " +_middleEndFactoryClassName + " is not a language contributor");
}
}
}
public void checkConfiguration(Issues issues) {
if (_middleEndFactories.isEmpty())
issues.addError ("No LanguageContributors defined");
}
}