mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
avoid UnsupportedOperation exceptions
This commit is contained in:
@@ -17,6 +17,7 @@ package com.intellij.debugger.engine;
|
||||
|
||||
import com.intellij.debugger.SourcePosition;
|
||||
import com.intellij.debugger.engine.evaluation.EvaluateException;
|
||||
import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
|
||||
import com.intellij.psi.PsiCodeBlock;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiLambdaExpression;
|
||||
@@ -76,7 +77,8 @@ public class LambdaMethodFilter implements BreakpointStepMethodFilter{
|
||||
}
|
||||
|
||||
public boolean locationMatches(DebugProcessImpl process, Location location) throws EvaluateException {
|
||||
final VirtualMachineProxyImpl vm = process.getVirtualMachineProxy();
|
||||
final Method method = location.method();
|
||||
return method.name().startsWith(LAMBDA_METHOD_PREFIX) && method.isSynthetic();
|
||||
return method.name().startsWith(LAMBDA_METHOD_PREFIX) && (!vm.canGetSyntheticAttribute() || method.isSynthetic());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -286,6 +286,8 @@ public class PositionManagerImpl implements PositionManager {
|
||||
return null;
|
||||
}
|
||||
|
||||
final boolean canGetSynthetic = vmProxy.canGetSyntheticAttribute();
|
||||
final boolean canReloadClasses = vmProxy.canRedefineClasses();
|
||||
int rangeBegin = Integer.MAX_VALUE;
|
||||
int rangeEnd = Integer.MIN_VALUE;
|
||||
for (Location location : fromClass.allLineLocations()) {
|
||||
@@ -294,8 +296,14 @@ public class PositionManagerImpl implements PositionManager {
|
||||
continue; // should be a native method, skipping
|
||||
}
|
||||
final Method method = location.method();
|
||||
if (method == null || method.isSynthetic() || method.isBridge() || method.isObsolete()) {
|
||||
continue; // do not take into account synthetic stuff
|
||||
try {
|
||||
if (method == null || (canGetSynthetic && method.isSynthetic()) || method.isBridge() || (canReloadClasses && method.isObsolete())) {
|
||||
// do not take into account synthetic stuff
|
||||
continue;
|
||||
}
|
||||
}
|
||||
catch (Throwable ignored) {
|
||||
LOG.info(ignored);
|
||||
}
|
||||
final int locationLine = lnumber - 1;
|
||||
rangeBegin = Math.min(rangeBegin, locationLine);
|
||||
|
||||
@@ -32,10 +32,7 @@ import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
|
||||
import com.intellij.debugger.impl.DebuggerContextImpl;
|
||||
import com.intellij.debugger.impl.DebuggerSession;
|
||||
import com.intellij.debugger.impl.DebuggerUtilsEx;
|
||||
import com.intellij.debugger.jdi.LocalVariableProxyImpl;
|
||||
import com.intellij.debugger.jdi.StackFrameProxyImpl;
|
||||
import com.intellij.debugger.jdi.ThreadGroupReferenceProxyImpl;
|
||||
import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
|
||||
import com.intellij.debugger.jdi.*;
|
||||
import com.intellij.debugger.settings.NodeRendererSettings;
|
||||
import com.intellij.debugger.settings.ThreadsViewSettings;
|
||||
import com.intellij.debugger.ui.breakpoints.Breakpoint;
|
||||
@@ -462,8 +459,10 @@ public abstract class DebuggerTree extends DebuggerTreeBase implements DataProvi
|
||||
final ReferenceType thisRefType = thisObjectReference.referenceType();
|
||||
if (thisRefType instanceof ClassType && thisRefType.equals(location.declaringType()) && thisRefType.name().contains("$")) { // makes sense for nested classes only
|
||||
final ClassType clsType = (ClassType)thisRefType;
|
||||
final DebugProcessImpl debugProcess = getDebuggerContext().getDebugProcess();
|
||||
final VirtualMachineProxyImpl vm = debugProcess.getVirtualMachineProxy();
|
||||
for (Field field : clsType.fields()) {
|
||||
if (field.isSynthetic() && StringUtil.startsWith(field.name(), FieldDescriptorImpl.OUTER_LOCAL_VAR_FIELD_PREFIX)) {
|
||||
if ((!vm.canGetSyntheticAttribute() || field.isSynthetic()) && StringUtil.startsWith(field.name(), FieldDescriptorImpl.OUTER_LOCAL_VAR_FIELD_PREFIX)) {
|
||||
final FieldDescriptorImpl fieldDescriptor = myNodeManager.getFieldDescriptor(stackDescriptor, thisObjectReference, field);
|
||||
myChildren.add(myNodeManager.createNode(fieldDescriptor, evaluationContext));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user