org.grails.ide.eclipse.refactoring.util.RefactoringUtils.java Source code

Java tutorial

Introduction

Here is the source code for org.grails.ide.eclipse.refactoring.util.RefactoringUtils.java

Source

/*******************************************************************************
 * 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
 * https://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;
    }

}