From e846358cb872e2106ff77a7049a154d09289d26d Mon Sep 17 00:00:00 2001 From: antelder Date: Tue, 10 Feb 2009 09:20:40 +0000 Subject: Rename plugins folder git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@742905 13f79535-47bb-0310-9956-ffa450edef68 --- .../tuscany/maven/compiler/CompilerRequestor.java | 114 +++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 maven-plugins/trunk/maven-eclipse-compiler/src/main/java/org/apache/tuscany/maven/compiler/CompilerRequestor.java (limited to 'maven-plugins/trunk/maven-eclipse-compiler/src/main/java/org/apache/tuscany/maven/compiler/CompilerRequestor.java') diff --git a/maven-plugins/trunk/maven-eclipse-compiler/src/main/java/org/apache/tuscany/maven/compiler/CompilerRequestor.java b/maven-plugins/trunk/maven-eclipse-compiler/src/main/java/org/apache/tuscany/maven/compiler/CompilerRequestor.java new file mode 100644 index 0000000000..509bdee95d --- /dev/null +++ b/maven-plugins/trunk/maven-eclipse-compiler/src/main/java/org/apache/tuscany/maven/compiler/CompilerRequestor.java @@ -0,0 +1,114 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.tuscany.maven.compiler; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.List; + +import org.codehaus.plexus.compiler.CompilerError; +import org.eclipse.jdt.core.compiler.IProblem; +import org.eclipse.jdt.internal.compiler.ClassFile; +import org.eclipse.jdt.internal.compiler.CompilationResult; +import org.eclipse.jdt.internal.compiler.ICompilerRequestor; + +class CompilerRequestor implements ICompilerRequestor { + private String outputDirectory; + private boolean showWarnings; + private List compilerErrors; + + public CompilerRequestor(String outputDirectory, boolean showWarnings, List compilerErrors) { + this.outputDirectory = outputDirectory; + this.showWarnings = showWarnings; + this.compilerErrors = compilerErrors; + } + + public void acceptResult(CompilationResult result) { + boolean hasErrors = false; + if (result.hasProblems()) { + + // Convert JDT IProblems into plexus CompilerErrors + for (IProblem problem: result.getProblems()) { + if (problem.isWarning()) { + if (showWarnings) { + compilerErrors.add(new CompilerError(new String(problem.getOriginatingFileName()), + false, + problem.getSourceLineNumber(), + problem.getSourceStart(), + problem.getSourceLineNumber(), + problem.getSourceEnd(), + problem.getMessage())); + } + + } else if (problem.isError()) { + hasErrors = true; + compilerErrors.add(new CompilerError(new String(problem.getOriginatingFileName()), + true, + problem.getSourceLineNumber(), + problem.getSourceStart(), + problem.getSourceLineNumber(), + problem.getSourceEnd(), + problem.getMessage())); + + } + } + } + + // Write the class files + if (!hasErrors) { + ClassFile[] classFiles = result.getClassFiles(); + for (ClassFile classFile: classFiles) { + + // Create file and parent directories + StringBuffer className = new StringBuffer(); + for (char[] name: classFile.getCompoundName()) { + if (className.length() != 0) { + className.append('.'); + } + className.append(name); + } + File file = new File(outputDirectory, className.toString().replace('.', '/') + ".class"); + if (!file.getParentFile().exists()) { + file.getParentFile().mkdirs(); + } + + // Write class file contents + FileOutputStream fos = null; + try { + fos = new FileOutputStream(file); + fos.write(classFile.getBytes()); + } catch (FileNotFoundException e) { + throw new IllegalArgumentException(e); + } catch (IOException e) { + throw new IllegalArgumentException(e); + } finally { + if (fos != null) { + try { + fos.close(); + } catch (IOException e) {} + } + } + } + } + } + +} \ No newline at end of file -- cgit v1.2.3