content: /*******************************************************************************
   * Copyright (c) 2000, 2009 IBM Corporation and others.
   * 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:
   *     IBM Corporation - initial API and implementation
   *******************************************************************************/
  package org.eclipse.wst.jsdt.internal.corext.util;
  
  import org.eclipse.wst.jsdt.core.IJavaScriptUnit;
  import org.eclipse.wst.jsdt.core.IJavaScriptElement;
  import org.eclipse.wst.jsdt.core.JavaScriptCore;
  import org.eclipse.wst.jsdt.core.search.SearchEngine;
  import org.eclipse.wst.jsdt.core.search.SearchMatch;
  import org.eclipse.wst.jsdt.core.search.SearchParticipant;
  import org.eclipse.wst.jsdt.core.search.SearchPattern;
  
  public class SearchUtils {
  
  	/**
  	 * @param match
  	 * @return the enclosing {@link IJavaScriptElement}, or null iff none
  	 */
  	public static IJavaScriptElement getEnclosingJavaElement(SearchMatch match) {
  		Object element = match.getElement();
  		if (element instanceof IJavaScriptElement)
  			return (IJavaScriptElement) element;
  		else
  			return null;
  	}
  	
  	/**
  	 * @param match
  	 * @return the enclosing {@link IJavaScriptUnit} of the given match, or null iff none
  	 */
  	public static IJavaScriptUnit getCompilationUnit(SearchMatch match) {
  		IJavaScriptElement enclosingElement = getEnclosingJavaElement(match);
  		if (enclosingElement != null){
  			if (enclosingElement instanceof IJavaScriptUnit)
  				return (IJavaScriptUnit) enclosingElement;
  			IJavaScriptUnit cu= (IJavaScriptUnit) enclosingElement.getAncestor(IJavaScriptElement.JAVASCRIPT_UNIT);
  			if (cu != null)
  				return cu;
  		}
  		
  		IJavaScriptElement jElement= JavaScriptCore.create(match.getResource());
  		if (jElement != null && jElement.exists() && jElement.getElementType() == IJavaScriptElement.JAVASCRIPT_UNIT)
  			return (IJavaScriptUnit) jElement;
  		return null;
  	}
  	
  	public static SearchParticipant[] getDefaultSearchParticipants() {
  		return new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
  	}
  	
      /**
       * Constant for use as matchRule in {@link SearchPattern#createPattern(IJavaScriptElement, int, int)}
       * to get search behavior as of 3.1M3 (all generic instantiations are found).
       */
      public final static int GENERICS_AGNOSTIC_MATCH_RULE= SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE | SearchPattern.R_ERASURE_MATCH;
  
      /**
       * Returns whether the given pattern is a camel case pattern or not.
       * 
       * @param pattern the pattern to inspect
       * @return whether it is a camel case pattern or not
       */
  	public static boolean isCamelCasePattern(String pattern) {
  		return SearchPattern.validateMatchRule(
  			pattern, 
  			SearchPattern.R_CAMELCASE_MATCH) == SearchPattern.R_CAMELCASE_MATCH;
  	}
  }
  