fixed NPE in read only mode

This commit is contained in:
Egor Ushakov
2018-10-04 17:06:04 +03:00
parent 22b1622213
commit 6c461490bc
3 changed files with 21 additions and 7 deletions
@@ -291,10 +291,7 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque
public void callbackOnPrepareClasses(final ClassPrepareRequestor requestor, final SourcePosition classPosition) {
DebuggerManagerThreadImpl.assertIsManagerThread();
if (!myDebugProcess.getVirtualMachineProxy().canBeModified()) {
setInvalid(requestor, "Not available in read only mode");
return;
}
if (checkReadOnly(requestor)) return;
List<ClassPrepareRequest> prepareRequests = myDebugProcess.getPositionManager().createPrepareRequests(requestor, classPosition);
if(prepareRequests.isEmpty()) {
@@ -313,6 +310,9 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque
@Override
public void callbackOnPrepareClasses(ClassPrepareRequestor requestor, String classOrPatternToBeLoaded) {
DebuggerManagerThreadImpl.assertIsManagerThread();
if (checkReadOnly(requestor)) return;
ClassPrepareRequest classPrepareRequest = createClassPrepareRequest(requestor, classOrPatternToBeLoaded);
if (classPrepareRequest != null) {
@@ -415,4 +415,12 @@ public class RequestManagerImpl extends DebugProcessAdapterImpl implements Reque
public void clearWarnings() {
myRequestWarnings.clear();
}
public boolean checkReadOnly(Requestor requestor) {
if (!myDebugProcess.getVirtualMachineProxy().canBeModified()) {
setInvalid(requestor, "Not available in read only mode");
return true;
}
return false;
}
}
@@ -17,6 +17,7 @@ import com.intellij.debugger.engine.events.SuspendContextCommandImpl;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.jdi.StackFrameProxyImpl;
import com.intellij.debugger.jdi.ThreadReferenceProxyImpl;
import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
import com.intellij.debugger.requests.ClassPrepareRequestor;
import com.intellij.debugger.requests.Requestor;
import com.intellij.debugger.settings.DebuggerSettings;
@@ -208,12 +209,17 @@ public abstract class Breakpoint<P extends JavaBreakpointProperties> implements
*/
protected void createOrWaitPrepare(DebugProcessImpl debugProcess, String classToBeLoaded) {
debugProcess.getRequestsManager().callbackOnPrepareClasses(this, classToBeLoaded);
processClassesPrepare(debugProcess, debugProcess.getVirtualMachineProxy().classesByName(classToBeLoaded).stream());
VirtualMachineProxyImpl virtualMachineProxy = debugProcess.getVirtualMachineProxy();
if (virtualMachineProxy.canBeModified()) {
processClassesPrepare(debugProcess, virtualMachineProxy.classesByName(classToBeLoaded).stream());
}
}
protected void createOrWaitPrepare(final DebugProcessImpl debugProcess, @NotNull final SourcePosition classPosition) {
debugProcess.getRequestsManager().callbackOnPrepareClasses(this, classPosition);
processClassesPrepare(debugProcess, debugProcess.getPositionManager().getAllClasses(classPosition).stream().distinct());
if (debugProcess.getVirtualMachineProxy().canBeModified()) {
processClassesPrepare(debugProcess, debugProcess.getPositionManager().getAllClasses(classPosition).stream().distinct());
}
}
private void processClassesPrepare(DebugProcessImpl debugProcess, Stream<ReferenceType> classes) {
@@ -125,7 +125,7 @@ public class ExceptionBreakpoint extends Breakpoint<JavaExceptionBreakpointPrope
@Override
public void processClassPrepare(DebugProcess process, ReferenceType refType) {
DebugProcessImpl debugProcess = (DebugProcessImpl)process;
if (shouldCreateRequest(debugProcess, true)) {
if (shouldCreateRequest(debugProcess, true) && !debugProcess.getRequestsManager().checkReadOnly(this)) {
// trying to create a request
RequestManagerImpl manager = debugProcess.getRequestsManager();
manager.enableRequest(manager.createExceptionRequest(this, refType, isNotifyCaught(), isNotifyUncaught()));