package no.uio.ifi.refaktor.analyze.collectors; import no.uio.ifi.refaktor.prefix.Prefix; import no.uio.ifi.refaktor.utils.CompilationUnitTextSelection; import org.eclipse.jdt.core.dom.IVariableBinding; import org.eclipse.jdt.core.dom.QualifiedName; import org.eclipse.jdt.core.dom.SimpleName; /** * An abstract property collector responsible for finding * prefixes within a selection. * * Subclasses are responsible for implementing the * {@link #registerPrefix(Prefix)} method. I.e. they * decide how to handle the encountered prefixes. */ public abstract class AbstractPrefixCollector extends PropertyCollector { public AbstractPrefixCollector(CompilationUnitTextSelection selection) { super(selection); } /** * Register a prefix encountered by the collector. * @param prefix The prefix to register. */ protected abstract void registerPrefix(Prefix prefix); @Override public boolean visit(QualifiedName node) { if (!nodeInSelection(node)) return false; Prefix prefix = new Prefix(node); if (prefix.firstExpressionIsBoundToVariable()) registerPrefix(prefix); // Must be false. Important to prevent double count for simple names. return false; } @Override public boolean visit(SimpleName node) { if (!nodeInSelection(node)) return false; if (nodeIsUsageOfVariable(node)) registerPrefix(new Prefix(node)); return false; } private boolean nodeIsUsageOfVariable(SimpleName node) { return !node.isDeclaration() && node.resolveBinding() instanceof IVariableBinding; } }