Merge branch 'tiobe/pmd-core-cpdcmdlineoptfix' of https://github.com/tiobe/pmd into tiobe-tiobe/pmd-core-cpdcmdlineoptfix

This commit is contained in:
Andreas Dangel
2015-01-18 12:13:09 +01:00
7 changed files with 46 additions and 30 deletions

View File

@ -53,11 +53,11 @@ public class CPD {
return matchAlgorithm.matches(); return matchAlgorithm.matches();
} }
public void addAllInDirectory(String dir) throws IOException { public void addAllInDirectory(File dir) throws IOException {
addDirectory(dir, false); addDirectory(dir, false);
} }
public void addRecursively(String dir) throws IOException { public void addRecursively(File dir) throws IOException {
addDirectory(dir, true); addDirectory(dir, true);
} }
@ -67,8 +67,8 @@ public class CPD {
} }
} }
private void addDirectory(String dir, boolean recurse) throws IOException { private void addDirectory(File dir, boolean recurse) throws IOException {
if (!(new File(dir)).exists()) { if (!dir.exists()) {
throw new FileNotFoundException("Couldn't find directory " + dir); throw new FileNotFoundException("Couldn't find directory " + dir);
} }
FileFinder finder = new FileFinder(); FileFinder finder = new FileFinder();

View File

@ -3,6 +3,9 @@
*/ */
package net.sourceforge.pmd.cpd; package net.sourceforge.pmd.cpd;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.util.Arrays; import java.util.Arrays;
@ -73,7 +76,7 @@ public class CPDCommandLineInterface {
//Add files //Add files
if ( null != arguments.getFiles() && ! arguments.getFiles().isEmpty() ) if ( null != arguments.getFiles() && ! arguments.getFiles().isEmpty() )
{ {
addSourcesFilesToCPD(arguments.getFiles(),cpd, !arguments.isNonRecursive()); addSourcesFilesToCPD(arguments.getFiles(), arguments.filenameFilter(), cpd, !arguments.isNonRecursive());
} }
//Add Database URIS //Add Database URIS
@ -89,14 +92,27 @@ public class CPDCommandLineInterface {
} }
} }
private static void addSourcesFilesToCPD(List<String> files, CPD cpd, boolean recursive) { private static void addSourcesFilesToCPD(List<File> files, FilenameFilter filter, CPD cpd, boolean recursive) {
try { try {
for (String file : files) for (File file : files) {
if (recursive) { if (!file.exists()) {
cpd.addRecursively(file); throw new FileNotFoundException("Couldn't find directory/file '" + file + "'");
} else if (file.isDirectory()) {
if (recursive) {
cpd.addRecursively(file);
} else {
cpd.addAllInDirectory(file);
}
} else { } else {
cpd.addAllInDirectory(file); //Add a single file if it is accepted by the file filter
File directory = file.getAbsoluteFile().getParentFile();
String filename = file.getName();
if (filter.accept(directory, filename)) {
cpd.add(file);
}
} }
}
} catch (IOException e) { } catch (IOException e) {
throw new IllegalStateException(e); throw new IllegalStateException(e);
} }

View File

@ -16,6 +16,7 @@ import net.sourceforge.pmd.util.FileFinder;
import com.beust.jcommander.IStringConverter; import com.beust.jcommander.IStringConverter;
import com.beust.jcommander.Parameter; import com.beust.jcommander.Parameter;
import com.beust.jcommander.converters.FileConverter;
/** /**
* *
@ -69,11 +70,11 @@ public class CPDConfiguration extends AbstractConfiguration {
+ "Default is \"" + Tokenizer.DEFAULT_SKIP_BLOCKS_PATTERN + "\".", required = false) + "Default is \"" + Tokenizer.DEFAULT_SKIP_BLOCKS_PATTERN + "\".", required = false)
private String skipBlocksPattern = Tokenizer.DEFAULT_SKIP_BLOCKS_PATTERN; private String skipBlocksPattern = Tokenizer.DEFAULT_SKIP_BLOCKS_PATTERN;
@Parameter(names = "--files", variableArity = true, description = "List of files and directories to process", required = false) @Parameter(names = "--files", variableArity = true, description = "List of files and directories to process", required = false, converter = FileConverter.class)
private List<String> files; private List<File> files;
@Parameter(names = "--exclude", variableArity = true, description = "Files to be excluded from CPD check", required = false) @Parameter(names = "--exclude", variableArity = true, description = "Files to be excluded from CPD check", required = false, converter = FileConverter.class)
private List<String> excludes; private List<File> excludes;
@Parameter(names = "--non-recursive", description = "Don't scan subdirectiories", required = false) @Parameter(names = "--non-recursive", description = "Don't scan subdirectiories", required = false)
private boolean nonRecursive; private boolean nonRecursive;
@ -245,15 +246,14 @@ public class CPDConfiguration extends AbstractConfiguration {
if (excludes != null) { if (excludes != null) {
FileFinder finder = new FileFinder(); FileFinder finder = new FileFinder();
for (String excludedFile : excludes) { for (File excludedFile : excludes) {
File exFile = new File(excludedFile); if (excludedFile.isDirectory()) {
if (exFile.isDirectory()) {
List<File> files = finder.findFilesFrom(excludedFile, languageFilter, true); List<File> files = finder.findFilesFrom(excludedFile, languageFilter, true);
for (File f : files) { for (File f : files) {
exclusions.add(f.getAbsolutePath()); exclusions.add(f.getAbsolutePath());
} }
} else { } else {
exclusions.add(exFile.getAbsolutePath()); exclusions.add(excludedFile.getAbsolutePath());
} }
} }
} }
@ -307,11 +307,11 @@ public class CPDConfiguration extends AbstractConfiguration {
this.skipLexicalErrors = skipLexicalErrors; this.skipLexicalErrors = skipLexicalErrors;
} }
public List<String> getFiles() { public List<File> getFiles() {
return files; return files;
} }
public void setFiles(List<String> files) { public void setFiles(List<File> files) {
this.files = files; this.files = files;
} }
@ -323,11 +323,11 @@ public class CPDConfiguration extends AbstractConfiguration {
this.uri = uri; this.uri = uri;
} }
public List<String> getExcludes() { public List<File> getExcludes() {
return excludes; return excludes;
} }
public void setExcludes(List<String> excludes) { public void setExcludes(List<File> excludes) {
this.excludes = excludes; this.excludes = excludes;
} }

View File

@ -572,9 +572,9 @@ public class GUI implements CPDListener {
} }
private void go() { private void go() {
String dirPath = rootDirectoryField.getText();
try { try {
if (!(new File(dirPath)).exists()) { File dirPath = new File(rootDirectoryField.getText());
if (!dirPath.exists()) {
JOptionPane.showMessageDialog(frame, JOptionPane.showMessageDialog(frame,
"Can't read from that root source directory", "Can't read from that root source directory",
"Error", JOptionPane.ERROR_MESSAGE); "Error", JOptionPane.ERROR_MESSAGE);
@ -602,8 +602,8 @@ public class GUI implements CPDListener {
cpd.setCpdListener(this); cpd.setCpdListener(this);
tokenizingFilesBar.setMinimum(0); tokenizingFilesBar.setMinimum(0);
phaseLabel.setText(""); phaseLabel.setText("");
if (isLegalPath(dirPath, conf)) { // should use the language file filter instead? if (isLegalPath(dirPath.getPath(), conf)) { // should use the language file filter instead?
cpd.add(new File(dirPath)); cpd.add(dirPath);
} else { } else {
if (recurseCheckbox.isSelected()) { if (recurseCheckbox.isSelected()) {
cpd.addRecursively(dirPath); cpd.addRecursively(dirPath);

View File

@ -116,7 +116,7 @@ public class DCD {
for (int i = 0; i < directories.size(); i++) { for (int i = 0; i < directories.size(); i++) {
File directory = directories.get(i); File directory = directories.get(i);
FilenameFilter filter = filters.get(i); FilenameFilter filter = filters.get(i);
List<File> files = new FileFinder().findFilesFrom(directory.getPath(), filter, true); List<File> files = new FileFinder().findFilesFrom(directory, filter, true);
for (File file : files) { for (File file : files) {
String name = file.getPath(); String name = file.getPath();

View File

@ -16,10 +16,10 @@ public class FileFinder {
private FilenameFilter filter; private FilenameFilter filter;
private static final String FILE_SEP = System.getProperty("file.separator"); private static final String FILE_SEP = System.getProperty("file.separator");
public List<File> findFilesFrom(String dir, FilenameFilter filter, boolean recurse) { public List<File> findFilesFrom(File dir, FilenameFilter filter, boolean recurse) {
this.filter = filter; this.filter = filter;
List<File> files = new ArrayList<File>(); List<File> files = new ArrayList<File>();
scanDirectory(new File(dir), files, recurse); scanDirectory(dir, files, recurse);
return files; return files;
} }

View File

@ -97,7 +97,7 @@ public final class FileUtil {
.getDirectoryFilter(), Filters.toNormalizedFileFilter(Filters.buildRegexFilterExcludeOverInclude( .getDirectoryFilter(), Filters.toNormalizedFileFilter(Filters.buildRegexFilterExcludeOverInclude(
null, Collections.singletonList("SCCS"))))); null, Collections.singletonList("SCCS")))));
FileFinder finder = new FileFinder(); FileFinder finder = new FileFinder();
List<File> files = finder.findFilesFrom(file.getAbsolutePath(), Filters.toFilenameFilter(filter), true); List<File> files = finder.findFilesFrom(file, Filters.toFilenameFilter(filter), true);
for (File f : files) { for (File f : files) {
dataSources.add(new FileDataSource(f)); dataSources.add(new FileDataSource(f));
} }