/*
* CCVisu is a tool for visual graph clustering
* and general force-directed graph layout.
* This file is part of CCVisu.
*
* Copyright (C) 2005-2012 Dirk Beyer
*
* CCVisu is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* CCVisu 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with CCVisu; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Please find the GNU Lesser General Public License in file
* license_lgpl.txt or http://www.gnu.org/licenses/lgpl.txt
*
* Dirk Beyer (firstname.lastname@uni-passau.de)
* University of Passau, Bavaria, Germany
*/
package org.sosy_lab.ccvisu.readers.factextractor;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.ASTParser;
import org.sosy_lab.ccvisu.graph.Relation;
import com.google.common.base.Strings;
public class FactExtractor {
private String workspace;
private String libPath;
public FactExtractor(String sourceDir, String libPath) {
assert (sourceDir != null && libPath != null);
this.workspace = sourceDir;
this.libPath = libPath;
}
public Relation extractRelations() {
return extractStructure(workspace);
}
private static ASTParser createParser(String[] classpathEntries,
String[] sourcepathEntries, boolean resolveBindings,
boolean recoverBindings) {
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setResolveBindings(resolveBindings);
parser.setBindingsRecovery(recoverBindings);
parser.setEnvironment(classpathEntries, sourcepathEntries, null, true);
return parser;
}
private Relation extractStructure(String sourcePath) {
// Prepare AST parser
List<String> classpathEntries = new ArrayList<String>();
if (!Strings.isNullOrEmpty(libPath)) {
classpathEntries = FileBot.extractAllFilePaths(libPath, true,
FileBot.FILE_EXT_JAR);
}
List<String> sourcepathEntries = FileBot.extractAllDirs(sourcePath);
List<String> projectFiles = new ArrayList<String>();
projectFiles = FileBot.extractAllFilePaths(sourcePath, true,
FileBot.FILE_EXT_JAVA);
Relation relation = new Relation();
EclipseFactVisitor eclipseVisitor =
new EclipseFactVisitor(relation);
EclipseFileASTRequestor eclipseFileASTRequestor =
new EclipseFileASTRequestor(eclipseVisitor);
ASTParser parser = createParser(classpathEntries.toArray(new String[0]),
sourcepathEntries.toArray(new String[0]), true, true);
parser.createASTs(projectFiles.toArray(new String[0]), null, new String[0],
eclipseFileASTRequestor, null);
return relation;
}
}