/*
* Copyright (C) 2007, 2008 Martin Kempf, Reto Kleeb, Michael Klenk
*
* IFS Institute for Software, HSR Rapperswil, Switzerland
* http://ifs.hsr.ch/
*
*/
package org.codehaus.groovy.eclipse.refactoring.core.rename;
import org.codehaus.groovy.eclipse.core.GroovyCore;
import org.codehaus.jdt.groovy.model.GroovyCompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.ISourceReference;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jface.text.ITextSelection;
/**
* Collects Groovy and Java Candidates
* @author Stefan Reinhard
*
*/
public class CandidateCollector {
protected ITextSelection selection;
protected GroovyCompilationUnit unit;
protected ISourceReference refactoringTarget;
private boolean isValid = true;
public CandidateCollector(GroovyCompilationUnit unit, ITextSelection selection) {
this.unit = unit;
this.selection = selection;
}
/**
* The selected node. May be null if the selection is not a valid
* refactoring target
* @return
*/
public ISourceReference getRefactoringTarget() {
if (isValid && refactoringTarget == null) {
try {
IJavaElement[] element = unit.codeSelect(selection.getOffset(), selection.getLength());
if (element != null && element.length > 0 && element[0] instanceof ISourceReference) {
refactoringTarget = (ISourceReference) element[0];
} else {
isValid = false;
}
} catch (JavaModelException e) {
GroovyCore.logException("Exception finding element at offset " +
selection.getOffset() + " in compilation unit " + unit.getElementName(), e);
}
}
return refactoringTarget;
}
}