Add log coverage for error response (#190)

* Add log coverage for error response

* Use factory method to warp a DebugException to CompletionException

* Move the factory method to utility

* Move variable exceptionMessage to the closest code block where it's used

* Log error message throwed by evaluatable breakpoint

* Keep the overload method with the consistent arguments order

* Restrict travis ci to jdk8

* latest osx uses jdk10 and the plugin build failed, so roll back to an old osx image
This commit is contained in:
Jinbo Wang 2018-08-01 14:32:06 +08:00 коммит произвёл GitHub
Родитель 17b5024dd4
Коммит 908089e5b2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
16 изменённых файлов: 110 добавлений и 80 удалений

Просмотреть файл

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>java-debug</name>
<name>java-debug-parent</name>
<comment></comment>
<projects>
</projects>

Просмотреть файл

@ -1,8 +1,10 @@
language: java
os:
- linux
- osx
matrix:
include:
- os: linux
- os: osx
osx_image: xcode9.2
script:
- ./mvnw clean verify

Просмотреть файл

@ -24,11 +24,13 @@ import java.nio.file.Paths;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
import com.microsoft.java.debug.core.DebugException;
import com.microsoft.java.debug.core.protocol.Messages.Response;
import com.microsoft.java.debug.core.protocol.Responses;
import com.microsoft.java.debug.core.protocol.Types;
@ -221,6 +223,14 @@ public class AdapterUtils {
return CompletableFuture.completedFuture(setErrorResponse(response, errorCode, e));
}
public static CompletionException createCompletionException(String message, ErrorCode errorCode, Throwable cause) {
return new CompletionException(new DebugException(message, cause, errorCode.getId()));
}
public static CompletionException createCompletionException(String message, ErrorCode errorCode) {
return new CompletionException(new DebugException(message, errorCode.getId()));
}
/**
* Calculate SHA-256 Digest of given string.
* @param content

Просмотреть файл

@ -83,7 +83,6 @@ public class ProtocolServer extends AbstractProtocolServer {
sendResponse(response);
future.complete(null);
} else {
logger.log(Level.SEVERE, "The request dispatcher should not return null response.");
future.completeExceptionally(new DebugException("The request dispatcher should not return null response.",
ErrorCode.UNKNOWN_FAILURE.getId()));
}
@ -98,14 +97,13 @@ public class ProtocolServer extends AbstractProtocolServer {
// mark it success to avoid reporting error on VSCode.
response.success = true;
sendResponse(response);
} else if (ex instanceof DebugException) {
sendResponse(AdapterUtils.setErrorResponse(response,
ErrorCode.parse(((DebugException) ex).getErrorCode()),
ex.getMessage() != null ? ex.getMessage() : ex.toString()));
} else {
String exceptionMessage = ex.getMessage() != null ? ex.getMessage() : ex.toString();
ErrorCode errorCode = ex instanceof DebugException ? ErrorCode.parse(((DebugException) ex).getErrorCode()) : ErrorCode.UNKNOWN_FAILURE;
logger.log(Level.SEVERE, String.format("[error response][%s]: %s", request.command, exceptionMessage), ex);
sendResponse(AdapterUtils.setErrorResponse(response,
ErrorCode.UNKNOWN_FAILURE,
ex.getMessage() != null ? ex.getMessage() : ex.toString()));
errorCode,
exceptionMessage));
}
return null;
}).join();

Просмотреть файл

@ -79,8 +79,10 @@ public class AttachRequestHandler implements IDebugRequestHandler {
}
}
} catch (IOException | IllegalConnectorArgumentsException e) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.ATTACH_FAILURE,
String.format("Failed to attach to remote debuggee VM. Reason: %s", e.toString()));
throw AdapterUtils.createCompletionException(
String.format("Failed to attach to remote debuggee VM. Reason: %s", e.toString()),
ErrorCode.ATTACH_FAILURE,
e);
}
Map<String, Object> options = new HashMap<>();

Просмотреть файл

@ -14,11 +14,7 @@ package com.microsoft.java.debug.core.adapter.handler;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.microsoft.java.debug.core.Configuration;
import com.microsoft.java.debug.core.adapter.AdapterUtils;
import com.microsoft.java.debug.core.adapter.ErrorCode;
import com.microsoft.java.debug.core.adapter.ICompletionsProvider;
@ -37,8 +33,6 @@ import com.sun.jdi.ThreadReference;
public class CompletionsHandler implements IDebugRequestHandler {
private static final Logger logger = Logger.getLogger(Configuration.LOGGER_NAME);
@Override
public List<Command> getTargetCommands() {
return Arrays.asList(Requests.Command.COMPLETIONS);
@ -50,8 +44,10 @@ public class CompletionsHandler implements IDebugRequestHandler {
StackFrameReference stackFrameReference = (StackFrameReference) context.getRecyclableIdPool().getObjectById(completionsArgs.frameId);
if (stackFrameReference == null) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.COMPLETIONS_FAILURE,
String.format("Completions: cannot find the stack frame with frameID %s", completionsArgs.frameId));
throw AdapterUtils.createCompletionException(
String.format("Completions: cannot find the stack frame with frameID %s", completionsArgs.frameId),
ErrorCode.COMPLETIONS_FAILURE
);
}
return CompletableFuture.supplyAsync(() -> {
@ -66,8 +62,11 @@ public class CompletionsHandler implements IDebugRequestHandler {
}
return response;
} catch (IncompatibleThreadStateException e) {
logger.log(Level.WARNING, String.format("Cannot provide code completions because of %s.", e.toString()), e);
throw new CompletionException(e);
throw AdapterUtils.createCompletionException(
String.format("Cannot provide code completions because of %s.", e.toString()),
ErrorCode.COMPLETIONS_FAILURE,
e
);
}
});
}

Просмотреть файл

@ -15,9 +15,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.StringUtils;
@ -60,14 +58,16 @@ public class EvaluateRequestHandler implements IDebugRequestHandler {
String expression = evalArguments.expression;
if (StringUtils.isBlank(expression)) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.EVALUATE_FAILURE,
"Failed to evaluate. Reason: Empty expression cannot be evaluated.");
throw AdapterUtils.createCompletionException(
"Failed to evaluate. Reason: Empty expression cannot be evaluated.",
ErrorCode.EVALUATE_FAILURE);
}
StackFrameReference stackFrameReference = (StackFrameReference) context.getRecyclableIdPool().getObjectById(evalArguments.frameId);
if (stackFrameReference == null) {
// stackFrameReference is null means the stackframe is continued by user manually,
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.EVALUATE_FAILURE,
"Failed to evaluate. Reason: Cannot evaluate because the thread is resumed.");
throw AdapterUtils.createCompletionException(
"Failed to evaluate. Reason: Cannot evaluate because the thread is resumed.",
ErrorCode.EVALUATE_FAILURE);
}
return CompletableFuture.supplyAsync(() -> {
@ -100,8 +100,10 @@ public class EvaluateRequestHandler implements IDebugRequestHandler {
cause = e.getCause();
}
// TODO: distinguish user error of wrong expression(eg: compilation error)
logger.log(Level.WARNING, String.format("Cannot evalution expression because of %s.", cause.toString()), cause);
throw new CompletionException(cause);
throw AdapterUtils.createCompletionException(
String.format("Cannot evalution expression because of %s.", cause.toString()),
ErrorCode.EVALUATE_FAILURE,
cause);
}
});
}

Просмотреть файл

@ -23,7 +23,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -79,8 +78,9 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
LaunchArguments launchArguments = (LaunchArguments) arguments;
if (StringUtils.isBlank(launchArguments.mainClass)
|| ArrayUtils.isEmpty(launchArguments.modulePaths) && ArrayUtils.isEmpty(launchArguments.classPaths)) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.ARGUMENT_MISSING,
String.format("Failed to launch debuggee VM. Missing mainClass or modulePaths/classPaths options in launch configuration"));
throw AdapterUtils.createCompletionException(
"Failed to launch debuggee VM. Missing mainClass or modulePaths/classPaths options in launch configuration.",
ErrorCode.ARGUMENT_MISSING);
}
context.setAttached(false);
@ -93,8 +93,9 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
context.setDebuggeeEncoding(StandardCharsets.UTF_8);
} else {
if (!Charset.isSupported(launchArguments.encoding)) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.INVALID_ENCODING,
String.format("Failed to launch debuggee VM. 'encoding' options in the launch configuration is not recognized."));
throw AdapterUtils.createCompletionException(
"Failed to launch debuggee VM. 'encoding' options in the launch configuration is not recognized.",
ErrorCode.INVALID_ENCODING);
}
context.setDebuggeeEncoding(Charset.forName(launchArguments.encoding));
@ -197,7 +198,6 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
logger.info("Launching debuggee in terminal console succeeded.");
resultFuture.complete(response);
} catch (IOException | IllegalConnectorArgumentsException e) {
logger.log(Level.SEVERE, String.format(launchInTerminalErrorFormat, e.toString()));
resultFuture.completeExceptionally(
new DebugException(
String.format(launchInTerminalErrorFormat, e.toString()),
@ -206,7 +206,6 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
);
}
} else {
logger.log(Level.SEVERE, String.format(launchInTerminalErrorFormat, runResponse.message));
resultFuture.completeExceptionally(
new DebugException(
String.format(launchInTerminalErrorFormat, runResponse.message),
@ -219,7 +218,6 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
ex = ex.getCause();
}
String errorMessage = String.format(launchInTerminalErrorFormat, ex != null ? ex.toString() : "Null response");
logger.log(Level.SEVERE, errorMessage);
resultFuture.completeExceptionally(
new DebugException(
String.format(launchInTerminalErrorFormat, errorMessage),
@ -229,7 +227,6 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
}
});
} catch (IOException | IllegalConnectorArgumentsException e) {
logger.log(Level.SEVERE, String.format(launchInTerminalErrorFormat, e.toString()));
resultFuture.completeExceptionally(
new DebugException(
String.format(launchInTerminalErrorFormat, e.toString()),
@ -298,7 +295,6 @@ public class LaunchRequestHandler implements IDebugRequestHandler {
resultFuture.complete(response);
} catch (IOException | IllegalConnectorArgumentsException | VMStartException e) {
logger.log(Level.SEVERE, String.format("Failed to launch debuggee VM. Reason: %s", e.toString()));
resultFuture.completeExceptionally(
new DebugException(
String.format("Failed to launch debuggee VM. Reason: %s", e.toString()),

Просмотреть файл

@ -51,8 +51,9 @@ public class RestartFrameHandler implements IDebugRequestHandler {
StackFrameReference stackFrameReference = (StackFrameReference) context.getRecyclableIdPool().getObjectById(restartFrameArgs.frameId);
if (stackFrameReference == null) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.RESTARTFRAME_FAILURE,
String.format("RestartFrame: cannot find the stack frame with frameID %s", restartFrameArgs.frameId));
throw AdapterUtils.createCompletionException(
String.format("RestartFrame: cannot find the stack frame with frameID %s", restartFrameArgs.frameId),
ErrorCode.RESTARTFRAME_FAILURE);
}
if (canRestartFrame(context, stackFrameReference)) {
@ -62,11 +63,15 @@ public class RestartFrameHandler implements IDebugRequestHandler {
stepInto(context, reference);
} catch (DebugException de) {
context.getProtocolServer().sendEvent(new Events.UserNotificationEvent(NotificationType.ERROR, de.getMessage()));
throw AdapterUtils.createCompletionException(
String.format("Failed to restart stack frame. Reason: %s", de.getMessage()),
ErrorCode.RESTARTFRAME_FAILURE,
de);
}
return CompletableFuture.completedFuture(response);
} else {
context.getProtocolServer().sendEvent(new Events.UserNotificationEvent(NotificationType.ERROR, "Current stack frame doesn't support restart."));
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.RESTARTFRAME_FAILURE, "Failed to restart the selected stack frame.");
throw AdapterUtils.createCompletionException("Current stack frame doesn't support restart.", ErrorCode.RESTARTFRAME_FAILURE);
}
}

Просмотреть файл

@ -117,8 +117,9 @@ public class SetBreakpointsRequestHandler implements IDebugRequestHandler {
// When breakpoint source path is null or an invalid file path, send an ErrorResponse back.
if (StringUtils.isBlank(sourcePath)) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.SET_BREAKPOINT_FAILURE,
String.format("Failed to setBreakpoint. Reason: '%s' is an invalid path.", bpArguments.source.path));
throw AdapterUtils.createCompletionException(
String.format("Failed to setBreakpoint. Reason: '%s' is an invalid path.", bpArguments.source.path),
ErrorCode.SET_BREAKPOINT_FAILURE);
}
try {
@ -154,9 +155,9 @@ public class SetBreakpointsRequestHandler implements IDebugRequestHandler {
response.body = new Responses.SetBreakpointsResponseBody(res);
return CompletableFuture.completedFuture(response);
} catch (DebugException e) {
return AdapterUtils.createAsyncErrorResponse(response,
ErrorCode.SET_BREAKPOINT_FAILURE,
String.format("Failed to setBreakpoint. Reason: '%s'", e.toString()));
throw AdapterUtils.createCompletionException(
String.format("Failed to setBreakpoint. Reason: '%s'", e.toString()),
ErrorCode.SET_BREAKPOINT_FAILURE);
}
}
@ -211,6 +212,7 @@ public class SetBreakpointsRequestHandler implements IDebugRequestHandler {
private boolean handleEvaluationResult(IDebugAdapterContext context, ThreadReference bpThread, IBreakpoint breakpoint, Value value, Throwable ex) {
if (StringUtils.isNotBlank(breakpoint.getLogMessage())) {
if (ex != null) {
logger.log(Level.SEVERE, String.format("[Logpoint]: %s", ex.getMessage() != null ? ex.getMessage() : ex.toString()), ex);
context.getProtocolServer().sendEvent(new Events.UserNotificationEvent(
Events.UserNotificationEvent.NotificationType.ERROR,
String.format("[Logpoint] Log message '%s' error: %s", breakpoint.getLogMessage(), ex.getMessage())));
@ -236,6 +238,7 @@ public class SetBreakpointsRequestHandler implements IDebugRequestHandler {
} else {
context.getProtocolServer().sendEvent(new Events.StoppedEvent("breakpoint", bpThread.uniqueID()));
if (ex != null) {
logger.log(Level.SEVERE, String.format("[ConditionalBreakpoint]: %s", ex.getMessage() != null ? ex.getMessage() : ex.toString()), ex);
context.getProtocolServer().sendEvent(new Events.UserNotificationEvent(
Events.UserNotificationEvent.NotificationType.ERROR,
String.format("Breakpoint condition '%s' error: %s", breakpoint.getCondition(), ex.getMessage())));

Просмотреть файл

@ -48,8 +48,10 @@ public class SetExceptionBreakpointsRequestHandler implements IDebugRequestHandl
context.getDebugSession().setExceptionBreakpoints(notifyCaught, notifyUncaught);
return CompletableFuture.completedFuture(response);
} catch (Exception ex) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.SET_EXCEPTIONBREAKPOINT_FAILURE,
String.format("Failed to setExceptionBreakpoints. Reason: '%s'", ex.toString()));
throw AdapterUtils.createCompletionException(
String.format("Failed to setExceptionBreakpoints. Reason: '%s'", ex.toString()),
ErrorCode.SET_EXCEPTIONBREAKPOINT_FAILURE,
ex);
}
}

Просмотреть файл

@ -64,11 +64,13 @@ public class SetVariableRequestHandler implements IDebugRequestHandler {
// Just exit out of editing if we're given an empty expression.
return CompletableFuture.completedFuture(response);
} else if (setVarArguments.variablesReference == -1) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.ARGUMENT_MISSING,
"SetVariablesRequest: property 'variablesReference' is missing, null, or empty");
throw AdapterUtils.createCompletionException(
"SetVariablesRequest: property 'variablesReference' is missing, null, or empty",
ErrorCode.ARGUMENT_MISSING);
} else if (StringUtils.isBlank(setVarArguments.name)) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.ARGUMENT_MISSING,
"SetVariablesRequest: property 'name' is missing, null, or empty");
throw AdapterUtils.createCompletionException(
"SetVariablesRequest: property 'name' is missing, null, or empty",
ErrorCode.ARGUMENT_MISSING);
}
this.context = context;
@ -80,8 +82,9 @@ public class SetVariableRequestHandler implements IDebugRequestHandler {
Object container = context.getRecyclableIdPool().getObjectById(setVarArguments.variablesReference);
// container is null means the stack frame is continued by user manually.
if (container == null) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.SET_VARIABLE_FAILURE,
"Failed to set variable. Reason: Cannot set value because the thread is resumed.");
throw AdapterUtils.createCompletionException(
"Failed to set variable. Reason: Cannot set value because the thread is resumed.",
ErrorCode.SET_VARIABLE_FAILURE);
}
String name = setVarArguments.name;
@ -103,13 +106,16 @@ public class SetVariableRequestHandler implements IDebugRequestHandler {
} else if (containerObj instanceof ObjectReference) {
newValue = handleSetValueForObject(name, belongToClass, setVarArguments.value, (ObjectReference) containerObj, options);
} else {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.SET_VARIABLE_FAILURE,
String.format("SetVariableRequest: Variable %s cannot be found.", setVarArguments.variablesReference));
throw AdapterUtils.createCompletionException(
String.format("SetVariableRequest: Variable %s cannot be found.", setVarArguments.variablesReference),
ErrorCode.SET_VARIABLE_FAILURE);
}
} catch (IllegalArgumentException | AbsentInformationException | InvalidTypeException
| UnsupportedOperationException | ClassNotLoadedException e) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.SET_VARIABLE_FAILURE,
String.format("Failed to set variable. Reason: %s", e.toString()));
throw AdapterUtils.createCompletionException(
String.format("Failed to set variable. Reason: %s", e.toString()),
ErrorCode.SET_VARIABLE_FAILURE,
e);
}
int referenceId = 0;
if (newValue instanceof ObjectReference && VariableUtils.hasChildren(newValue, showStaticVariables)) {

Просмотреть файл

@ -14,12 +14,9 @@ package com.microsoft.java.debug.core.adapter.handler;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.lang3.ArrayUtils;
import com.microsoft.java.debug.core.Configuration;
import com.microsoft.java.debug.core.DebugEvent;
import com.microsoft.java.debug.core.DebugUtility;
import com.microsoft.java.debug.core.IDebugSession;
@ -46,7 +43,6 @@ import com.sun.jdi.request.StepRequest;
import io.reactivex.disposables.Disposable;
public class StepRequestHandler implements IDebugRequestHandler {
private static final Logger logger = Logger.getLogger(Configuration.LOGGER_NAME);
@Override
public List<Command> getTargetCommands() {
@ -92,12 +88,16 @@ public class StepRequestHandler implements IDebugRequestHandler {
ThreadsRequestHandler.checkThreadRunningAndRecycleIds(thread, context);
} catch (IncompatibleThreadStateException ex) {
final String failureMessage = String.format("Failed to step because the thread '%s' is not suspended in the target VM.", thread.name());
logger.log(Level.SEVERE, failureMessage);
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.STEP_FAILURE, failureMessage);
throw AdapterUtils.createCompletionException(
failureMessage,
ErrorCode.STEP_FAILURE,
ex);
} catch (IndexOutOfBoundsException ex) {
final String failureMessage = String.format("Failed to step because the thread '%s' doesn't contain any stack frame", thread.name());
logger.log(Level.SEVERE, failureMessage);
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.STEP_FAILURE, failureMessage);
throw AdapterUtils.createCompletionException(
failureMessage,
ErrorCode.STEP_FAILURE,
ex);
}
}

Просмотреть файл

@ -75,8 +75,9 @@ public class VariablesRequestHandler implements IDebugRequestHandler {
}
if (!(container instanceof VariableProxy)) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.GET_VARIABLE_FAILURE,
String.format("VariablesRequest: Invalid variablesReference %d.", varArgs.variablesReference));
throw AdapterUtils.createCompletionException(
String.format("VariablesRequest: Invalid variablesReference %d.", varArgs.variablesReference),
ErrorCode.GET_VARIABLE_FAILURE);
}
VariableProxy containerNode = (VariableProxy) container;
@ -86,8 +87,9 @@ public class VariablesRequestHandler implements IDebugRequestHandler {
StackFrameReference stackFrameReference = (StackFrameReference) containerNode.getProxiedVariable();
StackFrame frame = stackFrameManager.getStackFrame(stackFrameReference);
if (frame == null) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.GET_VARIABLE_FAILURE,
String.format("Invalid stackframe id %d to get variables.", varArgs.variablesReference));
throw AdapterUtils.createCompletionException(
String.format("Invalid stackframe id %d to get variables.", varArgs.variablesReference),
ErrorCode.GET_VARIABLE_FAILURE);
}
try {
childrenList = VariableUtils.listLocalVariables(frame);
@ -99,8 +101,10 @@ public class VariablesRequestHandler implements IDebugRequestHandler {
childrenList.addAll(VariableUtils.listStaticVariables(frame));
}
} catch (AbsentInformationException | InternalException | InvalidStackFrameException e) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.GET_VARIABLE_FAILURE,
String.format("Failed to get variables. Reason: %s", e.toString()));
throw AdapterUtils.createCompletionException(
String.format("Failed to get variables. Reason: %s", e.toString()),
ErrorCode.GET_VARIABLE_FAILURE,
e);
}
} else {
try {
@ -111,8 +115,10 @@ public class VariablesRequestHandler implements IDebugRequestHandler {
childrenList = VariableUtils.listFieldVariables(containerObj, showStaticVariables);
}
} catch (AbsentInformationException e) {
return AdapterUtils.createAsyncErrorResponse(response, ErrorCode.GET_VARIABLE_FAILURE,
String.format("Failed to get variables. Reason: %s", e.toString()));
throw AdapterUtils.createCompletionException(
String.format("Failed to get variables. Reason: %s", e.toString()),
ErrorCode.GET_VARIABLE_FAILURE,
e);
}
}

Просмотреть файл

@ -80,7 +80,7 @@ public class CompletionsProvider implements ICompletionsProvider {
}
} catch (DebugException | CoreException e) {
logger.log(Level.WARNING, String.format("Failed to code complete because of %s", e.toString()), e);
logger.log(Level.SEVERE, String.format("Failed to code complete because of %s", e.toString()), e);
}
return res;

Просмотреть файл

@ -112,7 +112,6 @@ public class JdtEvaluationProvider implements IEvaluationProvider {
JDIThread jdiThread = getMockJDIThread(thread);
JDIStackFrame stackframe = createStackFrame(jdiThread, depth);
if (stackframe == null) {
logger.severe("Cannot evaluate because the stackframe is not available.");
throw new IllegalStateException("Cannot evaluate because the stackframe is not available.");
}
@ -295,7 +294,7 @@ public class JdtEvaluationProvider implements IEvaluationProvider {
try {
jdiThread.terminateEvaluation();
} catch (DebugException e) {
logger.warning(String.format("Error stopping evalutoin on thread %d: %s", thread.uniqueID(),
logger.warning(String.format("Error stopping evaluation on thread %d: %s", thread.uniqueID(),
e.toString()));
}
threadMap.remove(thread);