blob: bef672268cc1bf579df25eadbd76dc67b3c971c5 [file] [log] [blame]
package org.eclipse.ant.core;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.core.runtime.IConfigurationElement;
import org.apache.tools.ant.*;
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory;
import org.apache.tools.ant.taskdefs.compilers.CompilerAdapter;
import java.util.Map;
/**
* Static helper functionality for finding the correct compiler adapter to use for the current
* Javac task. This class logically wrappers the standard Ant
* <code>CompilerAdapterFactory</code>. It changes the behavior to use the
* Ant plug-ins object class registry to find the compiler adapter class. This is needed
* because of the platform's class loading strategy (otherwise the Ant plug-in would likely not
* be able to see the other classes).
* <p>
* <b>Note:</b> This class/interface is part of an interim API that is still under
* development and expected to change significantly before reaching stability.
* It is being made available at this early stage to solicit feedback from pioneering
* adopters on the understanding that any code that uses this API will almost
* certainly be broken (repeatedly) as the API evolves.
* </p>
*/
public class EclipseCompilerAdapterFactory {
private EclipseCompilerAdapterFactory() {
}
/**
* Returns the <code>CompilerAdapter</code> to use given a compiler type and task.
*
* @return the compiler adapter to use
* @param compilerType the type of compiler
* @param task the task
* @exception BuildException thrown if a problem occurs while returning the adapter
*/
public static CompilerAdapter getCompiler(String compilerType, Task task) throws BuildException {
try {
return CompilerAdapterFactory.getCompiler(compilerType, task);
} catch (BuildException be) {
if (AntPlugin.getPlugin() == null)
throw be;
Map objects = AntPlugin.getPlugin().getObjectExtensions();
if (objects == null)
throw be;
IConfigurationElement declaration = (IConfigurationElement) objects.get(compilerType);
if (declaration == null)
throw be;
String className = declaration.getAttribute(AntPlugin.CLASS);
try {
Class clazz = declaration.getDeclaringExtension().getDeclaringPluginDescriptor().getPluginClassLoader().loadClass(className);
return (CompilerAdapter) clazz.newInstance();
} catch (ClassNotFoundException e) {
throw new BuildException(Policy.bind("exception.classNotFound",className), e);
} catch (ClassCastException e) {
throw new BuildException(Policy.bind("exception.classNotCompiler",className), e);
} catch (Exception e) {
throw new BuildException(Policy.bind("exception.creationProblem",className), e);
}
}
}
}