first commit
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
package net.sf.jasperreports.engine.design;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.PrintWriter;
|
||||
import java.lang.reflect.Method;
|
||||
import net.sf.jasperreports.engine.JRException;
|
||||
import net.sf.jasperreports.engine.util.JRClassLoader;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class JRJdk13Compiler extends JRAbstractMultiClassCompiler {
|
||||
static final Log log = LogFactory.getLog(JRJdk13Compiler.class);
|
||||
|
||||
private static final int MODERN_COMPILER_SUCCESS = 0;
|
||||
|
||||
static Class array$Ljava$lang$String;
|
||||
|
||||
public String compileClasses(File[] sourceFiles, String classpath) throws JRException {
|
||||
String[] source = new String[sourceFiles.length + 2];
|
||||
for (int i = 0; i < sourceFiles.length; i++)
|
||||
source[i] = sourceFiles[i].getPath();
|
||||
source[sourceFiles.length] = "-classpath";
|
||||
source[sourceFiles.length + 1] = classpath;
|
||||
String errors = null;
|
||||
try {
|
||||
Class clazz = JRClassLoader.loadClassForRealName("com.sun.tools.javac.Main");
|
||||
Object compiler = clazz.newInstance();
|
||||
try {
|
||||
Method compileMethod = clazz.getMethod("compile", new Class[] { (array$Ljava$lang$String == null) ? (array$Ljava$lang$String = class$("[Ljava.lang.String;")) : array$Ljava$lang$String, PrintWriter.class });
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
int result = ((Integer)compileMethod.invoke(compiler, new Object[] { source, new PrintWriter(baos) })).intValue();
|
||||
if (result != 0) {
|
||||
errors = baos.toString();
|
||||
} else if (log.isInfoEnabled() && baos.size() > 0) {
|
||||
log.info(baos.toString());
|
||||
}
|
||||
} catch (NoSuchMethodException ex) {
|
||||
Method compileMethod = clazz.getMethod("compile", new Class[] { (array$Ljava$lang$String == null) ? (array$Ljava$lang$String = class$("[Ljava.lang.String;")) : array$Ljava$lang$String });
|
||||
int result = ((Integer)compileMethod.invoke(compiler, new Object[] { source })).intValue();
|
||||
if (result != 0)
|
||||
errors = "See error messages above.";
|
||||
}
|
||||
} catch (Exception e) {
|
||||
StringBuffer files = new StringBuffer();
|
||||
for (int j = 0; j < sourceFiles.length; j++) {
|
||||
files.append(sourceFiles[j].getPath());
|
||||
files.append(' ');
|
||||
}
|
||||
throw new JRException("Error compiling report java source files : " + files, e);
|
||||
}
|
||||
return errors;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user