import com.intellij.psi.search.FilenameIndex;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.util.PsiTreeUtil;
+import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.EmptyIterable;
import com.intellij.xdebugger.impl.ui.ExecutionPointHighlighter;
SourcePosition sourcePosition = SourcePosition.createFromLine(psiFile, lineNumber);
int lambdaOrdinal = -1;
if (LambdaMethodFilter.isLambdaName(method.name())) {
- List<Location> lambdas = ContainerUtil.filter(locationsOfLine(location.declaringType(), sourcePosition), new Condition<Location>() {
- @Override
- public boolean value(Location location) {
- return LambdaMethodFilter.isLambdaName(location.method().name());
- }
- });
- if (lambdas.size() > 1) {
- Collections.sort(lambdas, new Comparator<Location>() {
+ Set<Method> lambdas =
+ ContainerUtil.map2SetNotNull(locationsOfLine(location.declaringType(), sourcePosition), new Function<Location, Method>() {
@Override
- public int compare(Location o1, Location o2) {
- return LambdaMethodFilter.getLambdaOrdinal(o1.method().name()) - LambdaMethodFilter.getLambdaOrdinal(o2.method().name());
- }
- });
- lambdaOrdinal = ContainerUtil.indexOf(lambdas, new Condition<Location>() {
- @Override
- public boolean value(Location location) {
- return location.method().equals(method);
+ public Method fun(Location location) {
+ Method method = location.method();
+ if (LambdaMethodFilter.isLambdaName(method.name())) {
+ return method;
+ }
+ return null;
}
});
+ if (lambdas.size() > 1) {
+ ArrayList<Method> lambdasList = new ArrayList<Method>(lambdas);
+ Collections.sort(lambdasList, DebuggerUtilsEx.LAMBDA_ORDINAL_COMPARATOR);
+ lambdaOrdinal = lambdasList.indexOf(method);
}
}
return new JavaSourcePosition(sourcePosition, location.declaringType(), method, lambdaOrdinal);
import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
import com.intellij.debugger.engine.DebuggerUtils;
+import com.intellij.debugger.engine.LambdaMethodFilter;
import com.intellij.debugger.engine.SuspendContextImpl;
import com.intellij.debugger.engine.evaluation.*;
import com.intellij.debugger.engine.evaluation.expression.EvaluatorBuilder;
}
return false;
}
+
+ public static final Comparator<Method> LAMBDA_ORDINAL_COMPARATOR = new Comparator<Method>() {
+ @Override
+ public int compare(Method m1, Method m2) {
+ return LambdaMethodFilter.getLambdaOrdinal(m1.name()) - LambdaMethodFilter.getLambdaOrdinal(m2.name());
+ }
+ };
}
import com.intellij.debugger.engine.LambdaMethodFilter;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.engine.requests.RequestManagerImpl;
+import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.sun.jdi.*;
final LambdaMethodFilter lambdaFilter = (LambdaMethodFilter)myFilter;
if (lambdaFilter.getLambdaOrdinal() < methodsFound) {
final Method[] candidates = methods.toArray(new Method[methodsFound]);
- Arrays.sort(candidates, new Comparator<Method>() {
- public int compare(Method m1, Method m2) {
- return LambdaMethodFilter.getLambdaOrdinal(m1.name()) - LambdaMethodFilter.getLambdaOrdinal(m2.name());
- }
- });
+ Arrays.sort(candidates, DebuggerUtilsEx.LAMBDA_ORDINAL_COMPARATOR);
location = candidates[lambdaFilter.getLambdaOrdinal()].location();
}
}