package org.eclipse.dltk.tcl.internal.core.search.mixin;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.dltk.core.IModelElement;
import org.eclipse.dltk.core.IScriptProject;
import org.eclipse.dltk.core.RuntimePerformanceMonitor;
import org.eclipse.dltk.core.RuntimePerformanceMonitor.PerformanceNode;
import org.eclipse.dltk.core.mixin.IMixinElement;
import org.eclipse.dltk.tcl.internal.core.search.mixin.model.ITclMixinElement;
public class TclMixinUtils {
private static final boolean TRACE_COMPLETION_TIME = false;
/**
* @since 2.0
*/
public static IModelElement[] findModelElementsFromMixin(String pattern,
Class mixinClass, IScriptProject project, IProgressMonitor monitor) {
PerformanceNode p = RuntimePerformanceMonitor.begin();
long time = System.currentTimeMillis();
List<IModelElement> elements = new ArrayList<IModelElement>();
IMixinElement[] find = TclMixinModel.getInstance().getMixin(project)
.find(pattern, monitor);
if (find == null) {
return new IModelElement[0];
}
if (TRACE_COMPLETION_TIME) {
System.out.println("findMethod from mixin: request model:"
+ Long.toString(System.currentTimeMillis() - time) + ":"
+ pattern);
}
time = System.currentTimeMillis();
for (int i = 0; i < find.length; i++) {
Object[] allObjects = find[i].getAllObjects();
for (int j = 0; j < allObjects.length; j++) {
if (allObjects[j] != null
&& mixinClass.isInstance(allObjects[j])) {
ITclMixinElement field = (ITclMixinElement) allObjects[j];
IModelElement element = field.getModelElement();
if (element != null) {
elements.add(element);
}
}
}
}
p.done("Tcl", "Find elements in mixin", 0);
return elements.toArray(new IModelElement[elements.size()]);
}
}