forked from phoedos/pmd
Make CPD "working set aware"
git-svn-id: https://pmd.svn.sourceforge.net/svnroot/pmd/trunk@4372 51baf565-9d33-0410-a72c-fc3788e3496d
This commit is contained in:
@ -1,6 +1,8 @@
|
||||
package net.sourceforge.pmd.eclipse.cpd;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import name.herlin.command.CommandException;
|
||||
import net.sourceforge.pmd.cpd.SimpleRenderer;
|
||||
@ -26,6 +28,9 @@ import org.eclipse.ui.IWorkbenchPart;
|
||||
* @version $Revision$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.2 2006/05/02 18:34:23 phherlin
|
||||
* Make CPD "working set aware"
|
||||
*
|
||||
* Revision 1.1 2005/05/31 23:04:11 phherlin
|
||||
* Fix Bug 1190624: refactor CPD integration
|
||||
*
|
||||
@ -49,6 +54,7 @@ import org.eclipse.ui.IWorkbenchPart;
|
||||
public class CPDCheckProjectAction implements IObjectActionDelegate {
|
||||
private static Log log = LogFactory.getLog("net.sourceforge.pmd.eclipse.CPDCheckProjectAction");
|
||||
private IWorkbenchPart targetPart;
|
||||
private Set projects = new HashSet();
|
||||
|
||||
/**
|
||||
* @see org.eclipse.ui.IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
|
||||
|
@ -3,6 +3,9 @@ package net.sourceforge.pmd.eclipse.cpd;
|
||||
import java.io.IOException;
|
||||
|
||||
import net.sourceforge.pmd.cpd.CPD;
|
||||
import net.sourceforge.pmd.eclipse.model.ModelException;
|
||||
import net.sourceforge.pmd.eclipse.model.ModelFactory;
|
||||
import net.sourceforge.pmd.eclipse.model.ProjectPropertiesModel;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@ -10,6 +13,8 @@ import org.eclipse.core.resources.IFile;
|
||||
import org.eclipse.core.resources.IResource;
|
||||
import org.eclipse.core.resources.IResourceVisitor;
|
||||
import org.eclipse.core.runtime.CoreException;
|
||||
import org.eclipse.ui.IWorkingSet;
|
||||
import org.eclipse.ui.ResourceWorkingSetFilter;
|
||||
|
||||
/**
|
||||
* A visitor to process IFile resource against CPD
|
||||
@ -19,17 +24,17 @@ import org.eclipse.core.runtime.CoreException;
|
||||
* @version $Revision$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.1 2005/05/31 23:04:11 phherlin
|
||||
* Fix Bug 1190624: refactor CPD integration
|
||||
*
|
||||
* Revision 1.4 2003/05/19 22:26:07 phherlin
|
||||
* Updating PMD engine to v1.05
|
||||
* Fixing CPD usage to conform to new engine implementation
|
||||
*
|
||||
* Revision 1.2 2006/05/02 18:34:23 phherlin
|
||||
* Make CPD "working set aware"
|
||||
* Revision 1.1 2005/05/31 23:04:11 phherlin Fix Bug 1190624: refactor CPD integration
|
||||
*
|
||||
* Revision 1.4 2003/05/19 22:26:07 phherlin Updating PMD engine to v1.05 Fixing CPD usage to conform to new engine implementation
|
||||
*
|
||||
*/
|
||||
public class CPDVisitor implements IResourceVisitor {
|
||||
private static Log log = LogFactory.getLog("net.sourceforge.pmd.eclipse.CPDVisitor");
|
||||
private CPD cpd;
|
||||
private boolean includeDerivedFiles;
|
||||
|
||||
/**
|
||||
* Constructor for CPDVisitor.
|
||||
@ -40,26 +45,58 @@ public class CPDVisitor implements IResourceVisitor {
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.core.resources.IResourceVisitor#visit(IResource)
|
||||
* Add java files into the CPD object
|
||||
* @param includeDerivedFiles The includeDerivedFiles to set.
|
||||
*/
|
||||
public void setIncludeDerivedFiles(boolean includeDerivedFiles) {
|
||||
this.includeDerivedFiles = includeDerivedFiles;
|
||||
}
|
||||
|
||||
/**
|
||||
* @see org.eclipse.core.resources.IResourceVisitor#visit(IResource) Add java files into the CPD object
|
||||
*/
|
||||
public boolean visit(IResource resource) throws CoreException {
|
||||
log.debug("CPD Visiting " + resource.getName());
|
||||
boolean result = true;
|
||||
if ((resource instanceof IFile)
|
||||
&& (((IFile) resource).getFileExtension() != null)
|
||||
&& ((IFile) resource).getFileExtension().equals("java")) {
|
||||
|
||||
if (resource instanceof IFile) {
|
||||
IFile file = (IFile) resource;
|
||||
try {
|
||||
log.debug("Add file " + resource.getName());
|
||||
cpd.add(((IFile) resource).getLocation().toFile());
|
||||
if ((((IFile) resource).getFileExtension() != null)
|
||||
&& ((IFile) resource).getFileExtension().equals("java")
|
||||
&& (isFileInWorkingSet(file) && (this.includeDerivedFiles || (!this.includeDerivedFiles && !file
|
||||
.isDerived())))) {
|
||||
log.debug("Add file " + resource.getName());
|
||||
cpd.add(((IFile) resource).getLocation().toFile());
|
||||
result = false;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.warn("IOException when adding file " + resource.getName() + " to CPD. Continuing.", e);
|
||||
} catch (ModelException e) {
|
||||
log.warn("ModelException when adding file " + resource.getName() + " to CPD. Continuing.", e);
|
||||
}
|
||||
result = false;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if a file is in the PMD working set
|
||||
*
|
||||
* @param file
|
||||
* @return true if the file should be checked
|
||||
*/
|
||||
private boolean isFileInWorkingSet(final IFile file) throws ModelException {
|
||||
boolean fileInWorkingSet = true;
|
||||
final ProjectPropertiesModel model = ModelFactory.getFactory().getProperiesModelForProject(file.getProject());
|
||||
final IWorkingSet workingSet = model.getProjectWorkingSet();
|
||||
if (workingSet != null) {
|
||||
final ResourceWorkingSetFilter filter = new ResourceWorkingSetFilter();
|
||||
filter.setWorkingSet(workingSet);
|
||||
fileInWorkingSet = filter.select(null, null, file);
|
||||
}
|
||||
|
||||
return fileInWorkingSet;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -47,6 +47,9 @@ import net.sourceforge.pmd.cpd.Renderer;
|
||||
import net.sourceforge.pmd.eclipse.PMDPlugin;
|
||||
import net.sourceforge.pmd.eclipse.PMDPluginConstants;
|
||||
import net.sourceforge.pmd.eclipse.cmd.AbstractDefaultCommand;
|
||||
import net.sourceforge.pmd.eclipse.model.ModelException;
|
||||
import net.sourceforge.pmd.eclipse.model.ModelFactory;
|
||||
import net.sourceforge.pmd.eclipse.model.ProjectPropertiesModel;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
@ -63,6 +66,9 @@ import org.eclipse.core.runtime.CoreException;
|
||||
* @version $Revision$
|
||||
*
|
||||
* $Log$
|
||||
* Revision 1.2 2006/05/02 18:34:23 phherlin
|
||||
* Make CPD "working set aware"
|
||||
*
|
||||
* Revision 1.1 2005/05/31 23:04:11 phherlin
|
||||
* Fix Bug 1190624: refactor CPD integration
|
||||
*
|
||||
@ -121,6 +127,9 @@ public class DetectCutAndPasteCmd extends AbstractDefaultCommand {
|
||||
} catch (IOException e) {
|
||||
log.debug("IO Exception: " + e.getMessage(), e);
|
||||
throw new CommandException(e);
|
||||
} catch (ModelException e) {
|
||||
log.debug("Model Exception: " + e.getMessage(), e);
|
||||
throw new CommandException(e);
|
||||
} finally {
|
||||
this.setTerminated(true);
|
||||
}
|
||||
@ -171,11 +180,14 @@ public class DetectCutAndPasteCmd extends AbstractDefaultCommand {
|
||||
* @return matches an iterator to CPD matches
|
||||
* @throws CoreException
|
||||
*/
|
||||
private Iterator detectCutAndPaste() throws CoreException {
|
||||
private Iterator detectCutAndPaste() throws CoreException, ModelException {
|
||||
log.debug("Searching for project files");
|
||||
final int minTileSize = PMDPlugin.getDefault().getPreferenceStore().getInt(PMDPlugin.MIN_TILE_SIZE_PREFERENCE);
|
||||
final ProjectPropertiesModel model = ModelFactory.getFactory().getProperiesModelForProject(project);
|
||||
final CPD cpd = new CPD(minTileSize, new LanguageFactory().createLanguage(LanguageFactory.JAVA_KEY));
|
||||
|
||||
final CPDVisitor visitor = new CPDVisitor(cpd);
|
||||
visitor.setIncludeDerivedFiles(model.isIncludeDerivedFiles());
|
||||
this.project.accept(visitor);
|
||||
|
||||
log.debug("Performing CPD");
|
||||
|
Reference in New Issue
Block a user