/*******************************************************************************
* Copyright (c) 2007, 2015, 2017 Zend Technologies 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:
* Zend Technologies - initial API and implementation
*******************************************************************************/
package org.eclipse.php.refactoring.core.organizeIncludes;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.php.internal.core.documentModel.partitioner.PHPPartitionTypes;
import org.eclipse.php.internal.core.util.collections.BucketMap;
import org.eclipse.php.internal.core.util.text.PHPTextSequenceUtilities;
import org.eclipse.php.internal.core.util.text.TextSequence;
import org.eclipse.php.internal.core.util.text.TextSequenceUtilities;
import org.eclipse.php.refactoring.core.PhpRefactoringCoreMessages;
import org.eclipse.php.refactoring.core.RefactoringPlugin;
import org.eclipse.wst.sse.core.internal.provisional.IStructuredModel;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocument;
import org.eclipse.wst.sse.core.internal.provisional.text.IStructuredDocumentRegion;
/**
* @author seva
*/
public class CodeDataSearchEngine {
public static final int ELEMENT_CALLBACK = 1 << 8;
public static final int ELEMENT_CLASS_CALLBACK = 1 << 9;
public static final int ELEMENT_CLASS_FUNCTION_PARAMETER = 1 << 3;
public static final int ELEMENT_CLASS_INSTANCE = 1 << 6;
public static final int ELEMENT_CLASS_INTERFACE = 1 << 1;
public static final int ELEMENT_CLASS_MEMBER = 1 << 5;
public static final int ELEMENT_CLASS_METHOD_PARAMETER = 1 << 2;
public static final int ELEMENT_CLASS_NEW = 1 << 4;
public static final int ELEMENT_CLASS_SUPER = 1 << 0;
public static final int ELEMENT_FUNCTION_CALL = 1 << 7;
public static final int ELEMENT_FUNCTION_CALLBACK = 1 << 10;
public static final int ELEMENT_CONSTANT_READ = 1 << 11;
public static final String REGEX_ELEMENT_NAME = "[a-zA-Z_][\\w]*"; //$NON-NLS-1$
public static final Pattern PATTERN_CLASS_INSTANCE = Pattern
.compile(MessageFormat.format("instanceof[ \\t\\n\\r]+(\\$?{0})", new Object[] { REGEX_ELEMENT_NAME })); //$NON-NLS-1$
public static final Pattern PATTERN_CLASS_MEMBER = Pattern
.compile(MessageFormat.format("(\\$?{0})[ \\t\\n\\r]*::", new Object[] { REGEX_ELEMENT_NAME })); //$NON-NLS-1$
public static final Pattern PATTERN_CONSTANT_READ = Pattern.compile(MessageFormat.format(
"(((new|function|instanceof|class|interface)[ \\t\\n\\r]+|\\$)?{0})(?![ \\t\\n\\r]*\\()", //$NON-NLS-1$
new Object[] { REGEX_ELEMENT_NAME }));
public static final String REGEX_ELEMENT_CALLBACK_DOUBLE = MessageFormat.format("\"({0})\"", //$NON-NLS-1$
new Object[] { REGEX_ELEMENT_NAME });
public static final String REGEX_ELEMENT_CALLBACK_SINGLE = MessageFormat.format("''({0})''", //$NON-NLS-1$
new Object[] { REGEX_ELEMENT_NAME });
public static final Pattern PATTERN_ELEMENT_CALLBACK_DOUBLE = Pattern.compile(REGEX_ELEMENT_CALLBACK_DOUBLE);
public static final Pattern PATTERN_ELEMENT_CALLBACK_SINGLE = Pattern.compile(REGEX_ELEMENT_CALLBACK_SINGLE);
public static final Pattern PATTERN_FUNCTION_CALL = Pattern
.compile(MessageFormat.format("(((new|function)[ \\t\\n\\r]+|\\$)?{0})[ \\t\\n\\r]*\\(", //$NON-NLS-1$
new Object[] { REGEX_ELEMENT_NAME }));
private static final Pattern PATTERN_CLASS_NEW = Pattern
.compile(MessageFormat.format("new[ \\t\\n\\r]+(\\$?{0})", new Object[] { REGEX_ELEMENT_NAME })); //$NON-NLS-1$
// public static DoubleBucketMap<String, CodeDataMatch, CodeData>
// searchCallbacks(IStructuredModel model, IProgressMonitor monitor) {
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.0"),
// 2); //$NON-NLS-1$
// BucketMap<String, CodeDataMatch> searchResults = new BucketMap<String,
// CodeDataMatch>(new LinkedHashSet<CodeDataMatch>(1));
// collectCallbacks(model, searchResults, new SubProgressMonitor(monitor,
// 1));
// return validateCallbacks(model, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
//
// public static DoubleBucketMap<String, CodeDataMatch, CodeData>
// searchClasses(IStructuredModel model, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> searchResults = new BucketMap<String,
// CodeDataMatch>(new LinkedHashSet<CodeDataMatch>(1));
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.1"),
// 2); //$NON-NLS-1$
// collectClasses(model, searchResults, new SubProgressMonitor(monitor, 1));
// return validateClasses(model, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
//
// public static DoubleBucketMap<String, CodeDataMatch, CodeData>
// searchConstants(IStructuredModel model, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> searchResults = new BucketMap<String,
// CodeDataMatch>(new LinkedHashSet<CodeDataMatch>(1));
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.2"),
// 2); //$NON-NLS-1$
// collectConstants(model, searchResults, new SubProgressMonitor(monitor,
// 1));
// return validateConstants(model, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
//
// public static DoubleBucketMap<String, CodeDataMatch, CodeData>
// searchFunctions(IStructuredModel model, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> searchResults = new BucketMap<String,
// CodeDataMatch>(new LinkedHashSet<CodeDataMatch>(1));
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.3"),
// 2); //$NON-NLS-1$
// collectFunctions(model, searchResults, new SubProgressMonitor(monitor,
// 1));
// return validateFunctions(model, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
//
// public static DoubleBucketMap<String, CodeDataMatch, CodeData>
// searchInterfaces(IStructuredModel model, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> searchResults = new BucketMap<String,
// CodeDataMatch>(new LinkedHashSet<CodeDataMatch>(1));
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.4"),
// 2); //$NON-NLS-1$
// collectInterfaces(model, searchResults, new SubProgressMonitor(monitor,
// 1));
// return validateInterfaces(model, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
//
// private static boolean classIsInterface(PHPClassData classData) {
// return PHPModifier.isInterface(classData.getModifiers());
// }
private static void collectCallbacks(IStructuredModel model, BucketMap<String, CodeDataMatch> searchResults,
IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.5"), 4); //$NON-NLS-1$
if (monitor.isCanceled())
return;
Set<String> set = searchElementNames(model, PATTERN_ELEMENT_CALLBACK_DOUBLE, 1,
new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CALLBACK, true, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
set = searchElementNames(model, PATTERN_ELEMENT_CALLBACK_SINGLE, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CALLBACK, true, new SubProgressMonitor(monitor, 1));
}
/**
* @param model
* @param searchResults
* @param monitor
*/
private static void collectClasses(IStructuredModel model, BucketMap<String, CodeDataMatch> searchResults,
IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.6"), 2); //$NON-NLS-1$
if (monitor.isCanceled())
return;
// collectClassesFromModel(model.getFileData(), searchResults, new
// SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
collectClassesFromText(model, searchResults, new SubProgressMonitor(monitor, 1));
}
/**
* @param model
* @param searchResults
*/
// private static void collectClassesFromFunctionParameters(PHPFileData
// fileData, BucketMap<String, CodeDataMatch> searchResults,
// IProgressMonitor monitor) {
// PHPFunctionData[] functionDatas = fileData.getFunctions();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.7"),
// functionDatas.length); //$NON-NLS-1$
// for (PHPFunctionData functionData : functionDatas) {
// PHPFunctionParameter[] parameters = functionData.getParameters();
// if (parameters == null)
// continue;
// for (PHPFunctionParameter parameter : parameters) {
// String parameterClassName = parameter.getClassType();
// if (parameterClassName == null)
// continue;
// parameterClassName = parameterClassName.trim();
// // may include extra spaces
// searchResults.add(parameterClassName.toLowerCase(), new
// CodeDataMatch(parameterClassName, ELEMENT_CLASS_FUNCTION_PARAMETER));
// }
// if (monitor.isCanceled())
// return;
// monitor.worked(1);
// }
// }
//
// private static void collectClassesFromModel(PHPFileData fileData,
// BucketMap<String, CodeDataMatch> searchResults, IProgressMonitor monitor)
// {
// PHPClassData[] classDatas = fileData.getClasses();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.8"),
// classDatas.length + 1); //$NON-NLS-1$
// for (PHPClassData classData : classDatas) {
// if (!classIsInterface(classData))
// collectExtendedClass(classData, searchResults);
// collectMethodParameterClasses(classData, searchResults);
// if (monitor.isCanceled())
// return;
// monitor.worked(1);
// }
// if (monitor.isCanceled())
// return;
// collectClassesFromFunctionParameters(fileData, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
/**
* @param model
* @param searchResults
* @param monitor
*/
private static void collectClassesFromText(IStructuredModel model, BucketMap<String, CodeDataMatch> searchResults,
IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.9"), 6); //$NON-NLS-1$
if (monitor.isCanceled())
return;
Set<String> set = searchElementNames(model, PATTERN_CLASS_NEW, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CLASS_NEW, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
set = searchElementNames(model, PATTERN_CLASS_MEMBER, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CLASS_MEMBER, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
set = searchElementNames(model, PATTERN_CLASS_INSTANCE, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CLASS_INSTANCE, new SubProgressMonitor(monitor, 1));
}
/**
* @param model
* @param searchResults
* @param monitor
*/
private static void collectConstants(IStructuredModel model, BucketMap<String, CodeDataMatch> searchResults,
IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.10"), 2); //$NON-NLS-1$
if (monitor.isCanceled())
return;
Set<String> set = searchElementNames(model, PATTERN_CONSTANT_READ, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CONSTANT_READ, true, new SubProgressMonitor(monitor, 1));
}
/**
* @param model
* @param classData
* @param searchResults
*/
// private static void collectExtendedClass(PHPClassData classData,
// BucketMap<String, CodeDataMatch> searchResults) {
// PHPSuperClassNameData superClassNameData = classData.getSuperClassData();
// if (superClassNameData == null)
// return;
// String superClassName = superClassNameData.getName();
// if (superClassName == null)
// return;
// searchResults.add(superClassName.toLowerCase(), new
// CodeDataMatch(superClassName, ELEMENT_CLASS_SUPER));
// }
/**
* @param model
* @param searchResults
*/
private static void collectFunctions(IStructuredModel model, BucketMap<String, CodeDataMatch> searchResults,
IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.11"), 2); //$NON-NLS-1$
if (monitor.isCanceled())
return;
Set<String> set = searchElementNames(model, PATTERN_FUNCTION_CALL, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_FUNCTION_CALL, new SubProgressMonitor(monitor, 1));
}
private static void collectInterfaces(IStructuredModel model, BucketMap<String, CodeDataMatch> searchResults,
IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.12"), 2); //$NON-NLS-1$
if (monitor.isCanceled())
return;
// collectInterfacesFromModel(model.getFileData(), searchResults, new
// SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
collectInterfacesFromText(model, searchResults, new SubProgressMonitor(monitor, 1));
}
/**
* @param model
* @param classData
* @param searchResults
*/
// private static void collectInterfacesFromImplementor(PHPClassData
// classData, BucketMap<String, CodeDataMatch> searchResults) {
// PHPInterfaceNameData[] interfaceNameDatas =
// classData.getInterfacesNamesData();
// if (interfaceNameDatas == null)
// return;
// for (PHPInterfaceNameData interfaceNameData : interfaceNameDatas) {
// String interfaceName = interfaceNameData.getName();
// searchResults.add(interfaceName, new CodeDataMatch(interfaceName,
// ELEMENT_CLASS_INTERFACE));
// }
// }
//
// private static void collectInterfacesFromModel(PHPFileData fileData,
// BucketMap<String, CodeDataMatch> searchResults, IProgressMonitor monitor)
// {
// PHPClassData[] classDatas = fileData.getClasses();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.13"),
// classDatas.length + 1); //$NON-NLS-1$
// for (int i = 0; i < classDatas.length; ++i) {
// PHPClassData classData = classDatas[i];
// if (classIsInterface(classData))
// collectExtendedClass(classData, searchResults);
// collectInterfacesFromImplementor(classData, searchResults);
// collectMethodParameterClasses(classData, searchResults);
// if (monitor.isCanceled())
// return;
// monitor.worked(1);
// }
// if (monitor.isCanceled())
// return;
// collectClassesFromFunctionParameters(fileData, searchResults, new
// SubProgressMonitor(monitor, 1));
// }
private static void collectInterfacesFromText(IStructuredModel model,
BucketMap<String, CodeDataMatch> searchResults, IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.14"), 4); //$NON-NLS-1$
if (monitor.isCanceled())
return;
Set<String> set = searchElementNames(model, PATTERN_CLASS_MEMBER, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CLASS_MEMBER, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
set = searchElementNames(model, PATTERN_CLASS_INSTANCE, 1, new SubProgressMonitor(monitor, 1));
if (monitor.isCanceled())
return;
fillSearchResults(searchResults, set, ELEMENT_CLASS_INSTANCE, new SubProgressMonitor(monitor, 1));
}
/**
* @param model
* @param classData
* @param searchResults
*/
// private static void collectMethodParameterClasses(PHPClassData classData,
// BucketMap<String, CodeDataMatch> searchResults) {
// PHPFunctionData[] functionDatas = classData.getFunctions();
// for (PHPFunctionData functionData : functionDatas) {
// PHPFunctionParameter[] parameters = functionData.getParameters();
// if (parameters == null)
// continue;
// for (PHPFunctionParameter element2 : parameters) {
// String parameterClassName = element2.getClassType();
// if (parameterClassName == null)
// continue;
// parameterClassName = parameterClassName.trim();
// // parameterClassLength may includes extra spaces!
// searchResults.add(parameterClassName.toLowerCase(), new
// CodeDataMatch(parameterClassName, ELEMENT_CLASS_METHOD_PARAMETER));
// }
// }
// }
private static void fillSearchResults(BucketMap<String, CodeDataMatch> searchResults, Collection<String> collection,
int elementType, IProgressMonitor monitor) {
fillSearchResults(searchResults, collection, elementType, false, monitor);
}
private static void fillSearchResults(BucketMap<String, CodeDataMatch> searchResults, Collection<String> collection,
int elementType, boolean caseSensitive, IProgressMonitor monitor) {
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.15"), collection.size()); //$NON-NLS-1$
for (String elementName : collection) {
searchResults.add(caseSensitive ? elementName : elementName.toLowerCase(),
new CodeDataMatch(elementName, elementType));
if (monitor.isCanceled())
return;
monitor.worked(1);
}
}
private static String getPartitionType(IStructuredDocument document, int offset) {
IStructuredDocumentRegion region = document.getRegionAtCharacterOffset(offset);
TextSequence statement = PHPTextSequenceUtilities.getStatement(offset, region, false);
if (statement.length() == 0)
return null;
String partitionType = TextSequenceUtilities.getTypeByAbsoluteOffset(statement, offset);
return partitionType;
}
private static boolean isCode(IStructuredDocument document, int offset) {
String partitionType = getPartitionType(document, offset);
return PHPPartitionTypes.isPHPRegularState(partitionType);
}
private static Set<String> searchElementNames(IStructuredModel model, Pattern pattern, int elementPatternPosition,
IProgressMonitor monitor) {
IStructuredDocument document = model.getStructuredDocument();
String documentContents = null;
try {
documentContents = document.get(0, document.getLength());
} catch (BadLocationException e) {
RefactoringPlugin.logException(e);
}
Set<String> elements = new HashSet<String>();
if (documentContents == null)
return elements;
monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.16"), 2); //$NON-NLS-1$
Matcher matcher = pattern.matcher(documentContents);
while (matcher.find()) {
int end = matcher.end();
if (!isCode(document, end))
continue;
String elementName = matcher.group(elementPatternPosition);
elements.add(elementName);
}
return elements;
}
// private static DoubleBucketMap<String, CodeDataMatch, CodeData>
// validateCallbacks(IStructuredModel model, BucketMap<String,
// CodeDataMatch>
// searchResults, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> validSearchResults = new
// BucketMap<String, CodeDataMatch>();
// BucketMap<String, CodeData> callbackDataResults = new BucketMap<String,
// CodeData>();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.18"),
// searchResults.getKeys().size()); //$NON-NLS-1$
// for (String elementName : searchResults.getKeys()) {
// CodeData codeDatas[] = model.getProjectModel().getClass(elementName);
// if (codeDatas.length > 0) {
// validSearchResults.add(elementName, new CodeDataMatch(elementName,
// ELEMENT_CLASS_CALLBACK));
// callbackDataResults.addAll(elementName, Arrays.asList(codeDatas));
// }
// codeDatas = model.getProjectModel().getFunction(elementName);
// if (codeDatas.length > 0) {
// validSearchResults.add(elementName, new CodeDataMatch(elementName,
// ELEMENT_FUNCTION_CALLBACK));
// callbackDataResults.addAll(elementName, Arrays.asList(codeDatas));
// }
// if (monitor.isCanceled())
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, callbackDataResults);
// monitor.worked(1);
// }
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, callbackDataResults);
// }
//
// private static DoubleBucketMap<String, CodeDataMatch, CodeData>
// validateClasses(IStructuredModel model, BucketMap<String, CodeDataMatch>
// searchResults, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> validSearchResults = new
// BucketMap<String, CodeDataMatch>();
// BucketMap<String, CodeData> classDataResults = new BucketMap<String,
// CodeData>();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.19"),
// searchResults.getKeys().size()); //$NON-NLS-1$
// for (String className : searchResults.getKeys()) {
// CodeData classDatas[] = model.getProjectModel().getClass(className);
// for (int j = 0; j < classDatas.length; j++)
// if (!classIsInterface((PHPClassData) classDatas[j]))
// classDataResults.add(className, classDatas[j]);
// if (classDataResults.get(className).size() == 0)
// continue;
// validSearchResults.addAll(className, searchResults.get(className));
// if (monitor.isCanceled())
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, classDataResults);
// monitor.worked(1);
// }
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, classDataResults);
// }
//
// private static DoubleBucketMap<String, CodeDataMatch, CodeData>
// validateConstants(IStructuredModel model, BucketMap<String,
// CodeDataMatch>
// searchResults, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> validSearchResults = new
// BucketMap<String, CodeDataMatch>();
// BucketMap<String, CodeData> constantDataResults = new BucketMap<String,
// CodeData>();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.20"),
// searchResults.getKeys().size()); //$NON-NLS-1$
// for (String constantName : searchResults.getKeys()) {
// CodeData constantDatas[] =
// model.getProjectModel().getConstant(constantName);
// for (CodeData constantData : constantDatas) {
// if (constantData.getName().equals(constantName)) {
// validSearchResults.addAll(constantName, searchResults.get(constantName));
// constantDataResults.add(constantName, constantData);
// }
// }
// if (monitor.isCanceled())
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, constantDataResults);
// monitor.worked(1);
// }
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, constantDataResults);
// }
//
// private static DoubleBucketMap<String, CodeDataMatch, CodeData>
// validateFunctions(IStructuredModel model, BucketMap<String,
// CodeDataMatch>
// searchResults, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> validSearchResults = new
// BucketMap<String, CodeDataMatch>();
// BucketMap<String, CodeData> functionDataResults = new BucketMap<String,
// CodeData>();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.21"),
// searchResults.getKeys().size()); //$NON-NLS-1$
// for (String functionName : searchResults.getKeys()) {
// CodeData functionDatas[] =
// model.getProjectModel().getFunction(functionName);
// if (functionDatas.length > 0) {
// validSearchResults.addAll(functionName, searchResults.get(functionName));
// functionDataResults.addAll(functionName, Arrays.asList(functionDatas));
// }
// if (monitor.isCanceled())
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, functionDataResults);
// monitor.worked(1);
// }
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, functionDataResults);
// }
//
// private static DoubleBucketMap<String, CodeDataMatch, CodeData>
// validateInterfaces(IStructuredModel model, BucketMap<String,
// CodeDataMatch>
// searchResults, IProgressMonitor monitor) {
// BucketMap<String, CodeDataMatch> validSearchResults = new
// BucketMap<String, CodeDataMatch>();
// BucketMap<String, CodeData> interfaceCodeDatas = new BucketMap<String,
// CodeData>();
// monitor.beginTask(PhpRefactoringCoreMessages.getString("CodeDataSearchEngine.22"),
// searchResults.getKeys().size()); //$NON-NLS-1$
// for (String interfaceName : searchResults.getKeys()) {
// CodeData interfaceDatas[] =
// model.getProjectModel().getClass(interfaceName);
// for (CodeData element : interfaceDatas)
// if (classIsInterface((PHPClassData) element))
// interfaceCodeDatas.add(interfaceName, element);
// if (interfaceCodeDatas.get(interfaceName).size() == 0)
// continue;
// validSearchResults.addAll(interfaceName,
// searchResults.get(interfaceName));
// if (monitor.isCanceled())
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, interfaceCodeDatas);
// monitor.worked(1);
// }
// return new DoubleBucketMap<String, CodeDataMatch,
// CodeData>(validSearchResults, interfaceCodeDatas);
// }
public static boolean elementIsOptional(int elementType) {
// TODO think about it... Still no usage.
return false;
}
}