/* Copyright (C) 2004 - 2008 Versant Inc. http://www.db4o.com
This file is part of the sharpen open source java to c# translator.
sharpen is free software; you can redistribute it and/or modify it under
the terms of version 2 of the GNU General Public License as published
by the Free Software Foundation and as clarified by db4objects' GPL
interpretation policy, available at
http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
Suite 350, San Mateo, CA 94403, USA.
sharpen is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
package sharpen.core;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import sharpen.core.csharp.ast.CSCompilationUnit;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.eclipse.jdt.core.dom.CompilationUnit;
public class StandaloneConverter extends SharpenConversion {
private ASTParser _parser;
public StandaloneConverter(Configuration configuration) {
super(configuration);
_parser = ASTParser.newParser(AST.JLS4);
_parser.setKind(ASTParser.K_COMPILATION_UNIT);
@SuppressWarnings("unchecked")
Map<String, String> options = JavaCore.getOptions();
options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_7);
options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM,
JavaCore.VERSION_1_7);
options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_7);
_parser.setCompilerOptions(options);
}
public CSCompilationUnit run() throws IOException {
if (null == _writer || null == _source) {
throw new IllegalStateException("source and writer must be set");
}
File sourceFile = new File(_source);
List<String> sourcefilePaths = new ArrayList<String>();
sourcefilePaths.add(sourceFile.getPath());
String []sourcefilearr = new String[sourcefilePaths.size()];
sourcefilePaths.toArray(sourcefilearr);
_parser.setEnvironment(null,sourcefilearr,
null, true);
_parser.setSource(ReadFileToCharArray(_source));
_parser.setResolveBindings(true);
CompilationUnit ast = (CompilationUnit) _parser.createAST(null);
return run(ast);
}
private char[] ReadFileToCharArray(String filePath) throws IOException {
StringBuilder fileData = new StringBuilder(1000);
BufferedReader reader = new BufferedReader(new FileReader(filePath));
char[] buf = new char[10];
int numRead = 0;
while ((numRead = reader.read(buf)) != -1) {
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
return fileData.toString().toCharArray();
}
}