org.jboss.tools.jst.web.kb.refactoring.ELReferencesQueryParticipant.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.jst.web.kb.refactoring.ELReferencesQueryParticipant.java

Source

/*******************************************************************************
 * Copyright (c) 2009 Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *     Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.jst.web.kb.refactoring;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.search.IJavaSearchConstants;
import org.eclipse.jdt.ui.search.ElementQuerySpecification;
import org.eclipse.jdt.ui.search.IMatchPresentation;
import org.eclipse.jdt.ui.search.IQueryParticipant;
import org.eclipse.jdt.ui.search.ISearchRequestor;
import org.eclipse.jdt.ui.search.QuerySpecification;
import org.eclipse.search.ui.text.Match;

public class ELReferencesQueryParticipant implements IQueryParticipant {
    private ELSearcher searcher;

    public int estimateTicks(QuerySpecification specification) {
        return 10;
    }

    public IMatchPresentation getUIParticipant() {
        return null;
    }

    public void search(ISearchRequestor requestor, QuerySpecification querySpecification, IProgressMonitor monitor)
            throws CoreException {

        if (querySpecification instanceof ElementQuerySpecification
                && isSearchForReferences(querySpecification.getLimitTo())) {

            IJavaElement element = ((ElementQuerySpecification) querySpecification).getElement();
            if (element instanceof IField || element instanceof IMethod || element instanceof IType) {
                IFile file = (IFile) element.getResource();
                if (file != null) {
                    String name = element.getElementName();
                    searcher = new ELSearcher(requestor, element, file, name);
                    searcher.setSearchScope(querySpecification.getScope());
                    searcher.findELReferences(monitor);
                }
            }
        }
    }

    public boolean isSearchForReferences(int limitTo) {
        int maskedLimitTo = limitTo
                & ~(IJavaSearchConstants.IGNORE_DECLARING_TYPE + IJavaSearchConstants.IGNORE_RETURN_TYPE);
        return maskedLimitTo == IJavaSearchConstants.REFERENCES
                || maskedLimitTo == IJavaSearchConstants.ALL_OCCURRENCES;
    }

    class ELSearcher extends RefactorSearcher {
        ISearchRequestor requestor;
        IProjectsSet projectSet = null;

        public ELSearcher(ISearchRequestor requestor, IJavaElement element, IFile file, String name) {
            super(file, name, element);
            this.requestor = requestor;
            ELProjectSetExtension[] extensions = ELProjectSetExtension.getInstances();
            if (extensions.length > 0) {
                projectSet = extensions[0].getProjectSet();
                if (projectSet != null)
                    projectSet.init(file.getProject());
            }
        }

        protected void outOfSynch(IResource resource) {
            // do nothing
        }

        @Override
        protected void match(IFile file, int offset, int length) {
            Match match = new Match(file, offset, length);
            requestor.reportMatch(match);
        }

        protected IProject[] getProjects() {
            if (projectSet != null) {
                return projectSet.getLinkedProjects();
            }
            return new IProject[] { baseFile.getProject() };
        }

        protected IContainer getViewFolder(IProject project) {
            if (projectSet != null) {
                return projectSet.getViewFolder(project);
            }

            return super.getViewFolder(project);
        }
    }
}