package org.eclipse.dltk.ruby.internal.debug; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IStackFrame; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.debug.core.ISmartStepEvaluator; import org.eclipse.dltk.debug.core.model.IScriptStackFrame; import org.eclipse.dltk.debug.core.model.IScriptThread; public class RubySmartStepEvaluator implements ISmartStepEvaluator { public RubySmartStepEvaluator() { } @Override public boolean isFiltered(String[] filters, IScriptThread thread) { try { final IStackFrame topFrame = thread.getTopStackFrame(); if (topFrame instanceof IScriptStackFrame) { final String where = ((IScriptStackFrame) topFrame).getWhere(); final int colonPos = where.lastIndexOf("::"); //$NON-NLS-1$ if (colonPos > 0) { final String className = where.substring(0, colonPos); if (filter(className, filters)) { return true; } } else { if (filter(where, filters)) { return true; } } } } catch (DebugException e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } } return false; } private boolean filter(String typeQualifiedName, String[] filters) { typeQualifiedName = typeQualifiedName.replaceAll("::", "."); //$NON-NLS-1$ //$NON-NLS-2$ for (int i = 0; i < filters.length; i++) { if (filters[i].equals(typeQualifiedName)) { return true; } } return false; } }