/*******************************************************************************
* Copyright (c) 2012 VMWare, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMWare, Inc. - initial API and implementation
*******************************************************************************/
package org.grails.ide.eclipse.refactoring.util;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IMember;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.ISourceRange;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.search.IJavaSearchScope;
import org.eclipse.jdt.core.search.SearchEngine;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.Region;
import org.eclipse.ltk.core.refactoring.FileStatusContext;
import org.eclipse.ltk.core.refactoring.RefactoringStatusContext;
import org.grails.ide.eclipse.core.GrailsCoreActivator;
import org.grails.ide.eclipse.core.internal.GrailsResourceUtil;
/**
* Utility class containing methods to create Search scopes.
*
* @author Kris De Volder
* @since 2.7
*/
public class RefactoringUtils {
/**
* Creates a default 'search scope' to search for references that need updating in a Grails project. The default scope includes all
* source folders in the Grails project that actually 'belong' to the project (i.e. all source folders, but excluding
* the linked plugin source folders.
*
* @throws JavaModelException
*/
public static IJavaSearchScope getSearchScope(IJavaProject javaProject) throws JavaModelException {
IPackageFragmentRoot[] roots = javaProject.getPackageFragmentRoots();
List<IPackageFragmentRoot> srcFolders = new ArrayList<IPackageFragmentRoot>();
for (IPackageFragmentRoot root : roots) {
if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
if (!GrailsResourceUtil.isGrailsDependencyPackageFragmentRoot(root)) {
srcFolders.add(root);
// System.out.println(root.getPath());
}
}
}
return SearchEngine.createJavaSearchScope(srcFolders.toArray(new IJavaElement[srcFolders.size()]));
}
public static RefactoringStatusContext statusContext(IMember member) {
try {
ICompilationUnit cu = member.getCompilationUnit();
if (cu!=null) {
IFile file = (IFile) cu.getCorrespondingResource();
if (file!=null) {
return new FileStatusContext(file, RefactoringUtils.textRegion(member.getNameRange()));
}
}
} catch (Exception e) {
GrailsCoreActivator.log(e);
}
return null;
}
public static IRegion textRegion(ISourceRange nameRange) {
if (nameRange!=null) {
return new Region(nameRange.getOffset(), nameRange.getLength());
}
return null;
}
}