From a3575ef86d42c397468f0018178cabbae95d9e4a Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 28 Apr 2009 16:37:05 +0400 Subject: [PATCH] avoid anonymous classes --- .../openapi/vcs/changes/PsiChangeTracker.java | 44 +++++++++++++--------- .../openapi/vcs/changes/PsiElementFilter.java | 22 +++++++++++ 2 files changed, 49 insertions(+), 17 deletions(-) create mode 100644 lang-impl/src/com/intellij/openapi/vcs/changes/PsiElementFilter.java diff --git a/lang-impl/src/com/intellij/openapi/vcs/changes/PsiChangeTracker.java b/lang-impl/src/com/intellij/openapi/vcs/changes/PsiChangeTracker.java index a416bbc113..9679c61814 100644 --- a/lang-impl/src/com/intellij/openapi/vcs/changes/PsiChangeTracker.java +++ b/lang-impl/src/com/intellij/openapi/vcs/changes/PsiChangeTracker.java @@ -29,7 +29,7 @@ public class PsiChangeTracker { private PsiChangeTracker() { } - public static Map getElementsChanged(PsiFile file, final Class filter) { + public static Map getElementsChanged(PsiFile file, final PsiElementFilter filter) { final Project project = file.getProject(); FileStatus status = FileStatusManager.getInstance(project).getStatus(file.getVirtualFile()); final String oldText = getUnmodifiedDocument(file.getVirtualFile(), project); @@ -38,14 +38,18 @@ public class PsiChangeTracker { //TODO: for some languages (eg XML) isEquivalentTo works ugly. Think about pluggable matchers for different languages/elements final List elements = new ArrayList(); final List oldElements = new ArrayList(); - final PsiFile oldFile = oldText == null ? null : PsiFileFactory.getInstance(project) - .createFileFromText(file.getName(), file.getLanguage(), oldText, false, true); + final PsiFile oldFile = oldText == null + ? null + : PsiFileFactory.getInstance(project) + .createFileFromText(file.getName(), file.getLanguage(), oldText, false, true); file.accept(new MyVisitor(filter, elements)); final HashMap result = new HashMap(); - if (status == FileStatus.ADDED || status == FileStatus.DELETED - || status == FileStatus.DELETED_FROM_FS || status == FileStatus.UNKNOWN) { + if (status == FileStatus.ADDED || + status == FileStatus.DELETED || + status == FileStatus.DELETED_FROM_FS || + status == FileStatus.UNKNOWN) { for (T element : elements) { result.put(element, status); } @@ -59,7 +63,9 @@ public class PsiChangeTracker { return result; } - private static Map calculateStatuses(List elements, List oldElements, Map result) { + private static Map calculateStatuses(List elements, + List oldElements, + Map result) { for (T element : elements) { T e = null; for (T oldElement : oldElements) { @@ -70,16 +76,17 @@ public class PsiChangeTracker { } if (e != null) { oldElements.remove(e); - if (! element.getText().equals(e.getText())) { + if (!element.getText().equals(e.getText())) { result.put(element, FileStatus.MODIFIED); } - } else { - result.put(element, FileStatus.ADDED); + } + else { + result.put(element, FileStatus.ADDED); } } for (T oldElement : oldElements) { - result.put(oldElement, FileStatus.DELETED); + result.put(oldElement, FileStatus.DELETED); } return result; @@ -98,7 +105,7 @@ public class PsiChangeTracker { try { content = beforeRevision.getContent(); } - catch(VcsException ex) { + catch (VcsException ex) { content = null; } return content == null ? null : StringUtil.convertLineSeparators(content); @@ -119,20 +126,23 @@ public class PsiChangeTracker { } static class MyVisitor extends PsiRecursiveElementVisitor { - private final Class filter; + private final PsiElementFilter filter; private final List elements; - protected MyVisitor(final Class filter, final List elements) { + protected MyVisitor(final PsiElementFilter filter, final List elements) { this.filter = filter; this.elements = elements; } @Override - public void visitElement(PsiElement element) { - if (filter.isAssignableFrom(element.getClass())) { - elements.add((T)element); + public void visitElement(PsiElement element) { + if (filter.getClassFilter().isAssignableFrom(element.getClass())) { + final T e = (T)element; + if (filter.accept(e)) { + elements.add(e); } - super.visitElement(element); } + super.visitElement(element); } + } } diff --git a/lang-impl/src/com/intellij/openapi/vcs/changes/PsiElementFilter.java b/lang-impl/src/com/intellij/openapi/vcs/changes/PsiElementFilter.java new file mode 100644 index 0000000000..8058b83855 --- /dev/null +++ b/lang-impl/src/com/intellij/openapi/vcs/changes/PsiElementFilter.java @@ -0,0 +1,22 @@ +package com.intellij.openapi.vcs.changes; + +import com.intellij.psi.PsiElement; + +/** + * @author Konstantin Bulenkov + */ +public class PsiElementFilter { + private final Class filter; + + public PsiElementFilter(Class filter) { + this.filter = filter; + } + + public boolean accept(T element) { + return true; + } + + public final Class getClassFilter() { + return filter; + } +} -- 2.11.4.GIT