Search in sources :

Example 1 with FileRecord

use of net.sourceforge.pmd.eclipse.ui.model.FileRecord in project pmd-eclipse-plugin by pmd.

the class ViolationOverview method treeExpanded.

/**
 * Calculates the LOC of the expanded file record.
 *
 * @see org.eclipse.jface.viewers.ITreeViewerListener#treeExpanded(org.eclipse.jface.viewers.TreeExpansionEvent)
 */
public void treeExpanded(TreeExpansionEvent event) {
    Object object = event.getElement();
    if (object instanceof PackageRecord) {
        PackageRecord record = (PackageRecord) object;
        AbstractPMDRecord[] children = record.getChildren();
        for (AbstractPMDRecord element : children) {
            if (element instanceof FileRecord) {
                FileRecord fileRecord = (FileRecord) element;
                fileRecord.calculateLinesOfCode();
                fileRecord.calculateNumberOfMethods();
            }
        }
    }
    // refresh the labels in the table
    Display.getDefault().asyncExec(new Runnable() {

        public void run() {
            getViewer().refresh();
        }
    });
}
Also used : PackageRecord(net.sourceforge.pmd.eclipse.ui.model.PackageRecord) FileRecord(net.sourceforge.pmd.eclipse.ui.model.FileRecord) AbstractPMDRecord(net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord)

Example 2 with FileRecord

use of net.sourceforge.pmd.eclipse.ui.model.FileRecord in project pmd-eclipse-plugin by pmd.

the class ViolationOverviewContentProvider method updateViewer.

// public void resourceChanged(IResourceChangeEvent event) {
// 
// LOG.debug("resource changed event");
// 
// List<IMarkerDelta> markerDeltas = MarkerUtil.markerDeltasIn(event);
// 
// // first we get a List of changes to Files and Projects
// // so we won't need updating everything
// List<IResource> changedFiles = new ArrayList<IResource>();
// List<IProject> changedProjects = new ArrayList<IProject>();
// for (IMarkerDelta markerDelta : markerDeltas) {
// IResource resource = markerDelta.getResource();
// IProject project = resource.getProject();
// 
// // the lists should not contain Projects or Resources twice
// 
// if (!changedFiles.contains(resource)) {
// changedFiles.add(resource);
// LOG.debug("Resource " + resource.getName() + " has changed");
// }
// 
// if (!changedProjects.contains(project)) {
// changedProjects.add(project);
// LOG.debug("Project " + project.getName() + " has changed");
// }
// }
// 
// // we can add, change or remove Resources
// // all this changes are given to the viewer later
// final List<AbstractPMDRecord> additions = new ArrayList<AbstractPMDRecord>();
// final List<AbstractPMDRecord> removals = new ArrayList<AbstractPMDRecord>();
// final List<AbstractPMDRecord> changes = new ArrayList<AbstractPMDRecord>();
// 
// // we go through the changed Projects
// for (IProject project : changedProjects) {
// LOG.debug("Processing changes for project " + project.getName());
// ProjectRecord projectRec = (ProjectRecord) root.findResource(project);
// 
// // if the Project is closed or deleted,
// // we also delete it from the Model and go on
// if (!(project.isOpen() && project.isAccessible())) { // NOPMD by Sven on 09.11.06 22:17
// LOG.debug("The project is not open or not accessible. Remove it");
// List<AbstractPMDRecord>[] array = updateFiles(project, changedFiles);
// removals.addAll(array[1]);
// root.removeResource(project);
// }
// 
// // if we couldn't find the Project
// // then it has to be new
// else if (projectRec == null) {
// LOG.debug("Cannot find a project record for it. Add it.");
// projectRec = (ProjectRecord) root.addResource(project);
// }
// 
// // then we can update the Files for the new or updated Project
// List<AbstractPMDRecord>[] array = updateFiles(project, changedFiles);
// additions.addAll(array[0]);
// removals.addAll(array[1]);
// changes.addAll(array[2]);
// }
// 
// // the additions, removals and changes are given to the viewer
// // so that it can update itself
// // updating the table MUST be in sync
// treeViewer.getControl().getDisplay().syncExec(new Runnable() {
// public void run() {
// updateViewer(additions, removals, changes);
// }
// });
// }
/**
 * Updates the Files for a given Project
 *
 * @param project
 * @param changedFiles,
 *            a List of all changed Files
 * @return an List of Lists containing additions [0], removals [1] and changes [2] (Array-Position in Brackets)
 */
// protected List<AbstractPMDRecord>[] updateFiles(IProject project, List<IResource> changedFiles) {
// 
// final List<AbstractPMDRecord> additions = new ArrayList<AbstractPMDRecord>();
// final List<AbstractPMDRecord> removals = new ArrayList<AbstractPMDRecord>();
// final List<AbstractPMDRecord> changes = new ArrayList<AbstractPMDRecord>();
// List<AbstractPMDRecord>[] updatedFiles = new List[] { additions, removals, changes };
// 
// // we search for the ProjectRecord to the Project
// // if it doesn't exist, we return nothing
// final ProjectRecord projectRec = (ProjectRecord) root.findResource(project);
// 
// // we got through all files
// if (projectRec != null && project.isAccessible()) {
// updatedFiles = ChangeEvaluator.searchProjectForModifications(projectRec, changedFiles);
// }
// 
// // if the project is deleted or closed
// else if (projectRec != null) {
// final List<AbstractPMDRecord> packages = projectRec.getChildrenAsList();
// // ... we add all Packages to the removals
// // so they are not shown anymore
// removals.addAll(packages);
// for (int k = 0; k < packages.size(); k++) {
// final PackageRecord packageRec = (PackageRecord) packages.get(k);
// removals.addAll(packageRec.getChildrenAsList());
// }
// updatedFiles = new List[] { additions, removals, changes };
// }
// 
// return updatedFiles;
// }
// /**
// * Analyzes the modification inside a single project and compute the list of additions, updates and removals.
// *
// * @param projectRec
// * @param changedFiles
// * @return
// */
// private List<AbstractPMDRecord>[] searchProjectForModifications(ProjectRecord projectRec, List<IResource>
// changedFiles) {
// final List<AbstractPMDRecord> additions = new ArrayList<AbstractPMDRecord>();
// final List<AbstractPMDRecord> removals = new ArrayList<AbstractPMDRecord>();
// final List<AbstractPMDRecord> changes = new ArrayList<AbstractPMDRecord>();
// final IProject project = (IProject) projectRec.getResource();
// 
// LOG.debug("Analyses project " + project.getName());
// 
// for (IResource resource : changedFiles) {
// LOG.debug("Analyses resource " + resource.getName());
// 
// // ... and first check, if the project is the right one
// if (project.equals(resource.getProject())) {
// final AbstractPMDRecord rec = projectRec.findResource(resource);
// if (rec != null && rec.getResourceType() == IResource.FILE) {
// final FileRecord fileRec = (FileRecord) rec;
// fileRec.updateChildren();
// if (fileRec.getResource().isAccessible() && fileRec.hasMarkers()) {
// LOG.debug("The file has changed");
// changes.add(fileRec);
// } else {
// LOG.debug("The file has been removed");
// projectRec.removeResource(fileRec.getResource());
// removals.add(fileRec);
// 
// // remove parent if no more markers
// final PackageRecord packageRec = (PackageRecord) fileRec.getParent();
// if (!packageRec.hasMarkers()) {
// projectRec.removeResource(fileRec.getParent().getResource());
// removals.add(packageRec);
// }
// }
// } else if (rec == null) {
// LOG.debug("This is a new file.");
// final AbstractPMDRecord fileRec = projectRec.addResource(resource);
// additions.add(fileRec);
// } else {
// LOG.debug("The resource found is not a file! type found : " + rec.getResourceType());
// }
// } else {
// LOG.debug("The project resource is not the same! (" + resource.getProject().getName() + ')');
// }
// }
// 
// return new List[] { additions, removals, changes };
// }
/**
 * Applies found updates on the table, adapted from Philippe Herlin
 *
 * @param additions
 * @param removals
 * @param changes
 */
// protected void updateViewer(List<AbstractPMDRecord> additions, List<AbstractPMDRecord> removals,
// List<AbstractPMDRecord> changes) {
// 
// // perform removals
// if (removals.size() > 0) {
// treeViewer.cancelEditing();
// treeViewer.remove(removals.toArray());
// }
// 
// // perform additions
// if (additions.size() > 0) {
// for (int i = 0; i < additions.size(); i++) {
// final AbstractPMDRecord addedRec = additions.get(i);
// if (addedRec instanceof FileRecord) {
// treeViewer.add(addedRec.getParent(), addedRec);
// } else {
// treeViewer.add(root, addedRec);
// }
// }
// }
// 
// // perform changes
// if (changes.size() > 0) {
// treeViewer.update(changes.toArray(), null);
// }
// 
// violationView.refresh();
// }
protected void updateViewer(ChangeRecord<AbstractPMDRecord> changes) {
    // perform removals
    if (changes.hasRemovals()) {
        treeViewer.cancelEditing();
        treeViewer.remove(changes.removals.toArray());
    }
    // perform additions (if any)
    for (AbstractPMDRecord addedRec : changes.additions) {
        if (addedRec instanceof FileRecord) {
            treeViewer.add(addedRec.getParent(), addedRec);
        } else {
            treeViewer.add(root, addedRec);
        }
    }
    // perform changes
    if (changes.hasChanges()) {
        treeViewer.update(changes.changes.toArray(), null);
    }
    violationView.refresh();
}
Also used : FileRecord(net.sourceforge.pmd.eclipse.ui.model.FileRecord) AbstractPMDRecord(net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord)

Example 3 with FileRecord

use of net.sourceforge.pmd.eclipse.ui.model.FileRecord in project pmd-eclipse-plugin by pmd.

the class DataflowView method doCreatePage.

/* @see org.eclipse.ui.part.PageBookView#doCreatePage(org.eclipse.ui.IWorkbenchPart) */
@Override
protected PageRec doCreatePage(IWorkbenchPart part) {
    FileRecord resourceRecord = getFileRecordFromWorkbenchPart(part);
    if (resourceRecord != null) {
        setupListener(resourceRecord);
        // creates a new DataflowViewPage, when a Resource exists
        DataflowViewPage page = new DataflowViewPage(part, resourceRecord);
        initPage(page);
        page.createControl(getPageBook());
        return new PageRec(part, page);
    }
    return null;
}
Also used : FileRecord(net.sourceforge.pmd.eclipse.ui.model.FileRecord)

Example 4 with FileRecord

use of net.sourceforge.pmd.eclipse.ui.model.FileRecord in project pmd-eclipse-plugin by pmd.

the class ChangeEvaluator method searchProjectForModifications.

/**
 * Analyzes the modification inside a single project and compute the list of
 * additions, updates and removals.
 *
 * @param projectRec
 * @param changedFiles
 * @return
 */
private static List<AbstractPMDRecord>[] searchProjectForModifications(ProjectRecord projectRec, List<IResource> changedFiles) {
    // TODO use ChangeRecord
    List<AbstractPMDRecord> additions = new ArrayList<AbstractPMDRecord>();
    List<AbstractPMDRecord> removals = new ArrayList<AbstractPMDRecord>();
    List<AbstractPMDRecord> changes = new ArrayList<AbstractPMDRecord>();
    IProject project = (IProject) projectRec.getResource();
    for (IResource resource : changedFiles) {
        // ... and first check, if the project is the right one
        if (project.equals(resource.getProject())) {
            AbstractPMDRecord rec = projectRec.findResource(resource);
            if (rec != null && rec.getResourceType() == IResource.FILE) {
                FileRecord fileRec = (FileRecord) rec;
                fileRec.updateChildren();
                if (fileRec.getResource().isAccessible() && fileRec.hasMarkers()) {
                    // LOG.debug("The file has changed");
                    changes.add(fileRec);
                } else {
                    // LOG.debug("The file has been removed");
                    projectRec.removeResource(fileRec.getResource());
                    removals.add(fileRec);
                    // remove parent if no more markers
                    if (!fileRec.getParent().hasMarkers()) {
                        projectRec.removeResource(fileRec.getParent().getResource());
                        removals.add(fileRec.getParent());
                    }
                }
            } else if (rec == null) {
                // LOG.debug("This is a new file.");
                AbstractPMDRecord fileRec = projectRec.addResource(resource);
                additions.add(fileRec);
            } else {
            // LOG.debug("The resource found is not a file! type found :
            // " + rec.getResourceType());
            }
        } else {
        // LOG.debug("The project resource is not the same! (" +
        // resource.getProject().getName() + ')');
        }
    }
    return new List[] { additions, removals, changes };
}
Also used : ArrayList(java.util.ArrayList) List(java.util.List) ArrayList(java.util.ArrayList) FileRecord(net.sourceforge.pmd.eclipse.ui.model.FileRecord) IProject(org.eclipse.core.resources.IProject) IResource(org.eclipse.core.resources.IResource) AbstractPMDRecord(net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord)

Example 5 with FileRecord

use of net.sourceforge.pmd.eclipse.ui.model.FileRecord in project pmd-eclipse-plugin by pmd.

the class ASTView method doCreatePage.

@Override
protected PageRec doCreatePage(IWorkbenchPart part) {
    FileRecord resourceRecord = getFileRecordFromWorkbenchPart(part);
    if (resourceRecord != null) {
        setupListener(resourceRecord);
        // creates a new ASTViewPage, when a Resource exists
        page = new ASTViewPage(part, resourceRecord);
        initPage(page);
        page.createControl(getPageBook());
        makeActions();
        addToolbarControls();
        return new PageRec(part, page);
    }
    return null;
}
Also used : FileRecord(net.sourceforge.pmd.eclipse.ui.model.FileRecord)

Aggregations

FileRecord (net.sourceforge.pmd.eclipse.ui.model.FileRecord)15 AbstractPMDRecord (net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord)8 PackageRecord (net.sourceforge.pmd.eclipse.ui.model.PackageRecord)8 MarkerRecord (net.sourceforge.pmd.eclipse.ui.model.MarkerRecord)7 FileToMarkerRecord (net.sourceforge.pmd.eclipse.ui.model.FileToMarkerRecord)5 IMarker (org.eclipse.core.resources.IMarker)2 IResource (org.eclipse.core.resources.IResource)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)1 ArrayList (java.util.ArrayList)1 HashSet (java.util.HashSet)1 List (java.util.List)1 Rule (net.sourceforge.pmd.Rule)1 IFile (org.eclipse.core.resources.IFile)1 IProject (org.eclipse.core.resources.IProject)1 CoreException (org.eclipse.core.runtime.CoreException)1 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)1 ProgressMonitorDialog (org.eclipse.jface.dialogs.ProgressMonitorDialog)1 IRunnableWithProgress (org.eclipse.jface.operation.IRunnableWithProgress)1 IStructuredSelection (org.eclipse.jface.viewers.IStructuredSelection)1 Image (org.eclipse.swt.graphics.Image)1