Skip to content

Commit

Permalink
Embiggen the v8 debugger protocol support to support node-inspector.
Browse files Browse the repository at this point in the history
Miles to go.
  • Loading branch information
bobmcwhirter committed Nov 17, 2014
1 parent d9ebfd3 commit 42156fe
Show file tree
Hide file tree
Showing 9 changed files with 153 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,7 @@ public void serialize(EvaluateResponse value, JsonGenerator jgen, SerializerProv
Object result = value.getResult();

jgen.writeStartObject();
//provider.defaultSerializeField("command", value.getCommand(), jgen);
//provider.defaultSerializeField("running", value.isRunning(), jgen);
//provider.defaultSerializeField("success", value.isSuccess(), jgen);
//provider.defaultSerializeField("request_seq", value.getRequest().getSeq(), jgen );

this.handleSerializer.serializeBody(result, jgen, provider);

jgen.writeEndObject();
}

Expand Down
1 change: 1 addition & 0 deletions src/main/java/org/dynjs/debugger/agent/JSONEncoder.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public JSONEncoder(Debugger debugger) {
HandleSerializer handleSerializer = new HandleSerializer( this.debugger );

this.module = new SimpleModule();
this.module.addSerializer( new ResponseWrapperSerializer( handleSerializer ) );
this.module.addSerializer( new EvaluateResponseSerializer( handleSerializer ) );
this.module.addSerializer( new LookupResponseSerializer( handleSerializer ) );
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.dynjs.debugger.agent;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import org.dynjs.debugger.requests.EvaluateResponse;
import org.dynjs.debugger.requests.ResponseWrapper;

import java.io.IOException;
import java.util.List;

/**
* @author Bob McWhirter
*/
public class ResponseWrapperSerializer extends StdSerializer<ResponseWrapper> {

private final HandleSerializer handleSerializer;

ResponseWrapperSerializer(HandleSerializer handleSerializer) {
super(ResponseWrapper.class);
this.handleSerializer = handleSerializer;
}

@Override
public void serialize(ResponseWrapper value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException {

jgen.writeStartObject();

provider.defaultSerializeField( "type", value.getType(), jgen );
provider.defaultSerializeField( "command", value.getCommand(), jgen );
provider.defaultSerializeField( "running", value.isRunning(), jgen );
provider.defaultSerializeField( "success", value.isSuccess(), jgen );
provider.defaultSerializeField( "seq", value.getSeq(), jgen );
provider.defaultSerializeField( "request_seq", value.getRequestSeq(), jgen );
provider.defaultSerializeField( "body", value.getBody(), jgen );


jgen.writeFieldName( "refs" );

jgen.writeStartArray();
List<Object> refs = value.getRefs();
for ( Object each : refs ) {
this.handleSerializer.serialize(each, jgen, provider );
}
jgen.writeEndArray();
jgen.writeEndObject();
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,9 @@
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import java.util.Collections;
import java.util.List;

/**
* @author Bob McWhirter
*/
Expand Down Expand Up @@ -41,6 +44,12 @@ public boolean isSuccess() {
public boolean isRunning() {
return this.running;
}

@Override
@JsonIgnore
public List<Object> getRefs() {
return Collections.emptyList();
}
}


Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
package org.dynjs.debugger.requests;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

/**
* @author Bob McWhirter
*/
public class ClearBreakpointRequest extends AbstractRequest<ClearBreakpointResponse> {

@JsonIgnoreProperties("maxStringLength")
public static class Arguments {
private long breakpoint;

Expand Down
44 changes: 42 additions & 2 deletions src/main/java/org/dynjs/debugger/requests/EvaluateResponse.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
package org.dynjs.debugger.requests;

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import org.dynjs.debugger.agent.HandleSerializer;
import org.dynjs.runtime.JSObject;
import org.dynjs.runtime.NameEnumerator;
import org.dynjs.runtime.PropertyDescriptor;
import org.dynjs.runtime.Types;

import java.util.ArrayList;
import java.util.List;

/**
* @author Bob McWhirter
Expand All @@ -18,4 +23,39 @@ public EvaluateResponse(EvaluateRequest request, Object result, boolean success,
public Object getResult() {
return this.result;
}

@Override
public List<Object> getRefs() {
List<Object> refs = new ArrayList<>();

getRefs( this.result, refs );

return refs;
}

private void getRefs(Object value, List<Object> refs) {
if ( refs.contains( value ) ) {
return;
}

refs.add( value );

if (value instanceof JSObject) {
NameEnumerator enumerator = ((JSObject)value).getAllEnumerablePropertyNames();

while (enumerator.hasNext()) {
String name = enumerator.next();
Object propResult = ((JSObject)value).getProperty(null, name);

if (propResult != Types.UNDEFINED) {
PropertyDescriptor prop = (PropertyDescriptor) propResult;

if (prop.hasValue()) {
Object v = prop.getValue();
refs.add( v );
}
}
}
}
}
}
6 changes: 6 additions & 0 deletions src/main/java/org/dynjs/debugger/requests/Response.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package org.dynjs.debugger.requests;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.dynjs.debugger.Message;

import java.util.List;

/**
* @author Bob McWhirter
*/
Expand All @@ -11,4 +14,7 @@ public interface Response extends Message {
String getCommand();
boolean isSuccess();
boolean isRunning();

@JsonIgnore
List<Object> getRefs();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@

import com.fasterxml.jackson.annotation.JsonProperty;
import org.dynjs.debugger.agent.handlers.WrappingHandler;
import org.dynjs.debugger.events.Event;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.List;

/**
* @author Bob McWhirter
Expand Down Expand Up @@ -43,6 +42,10 @@ public int getSeq() {
return this.seq;
}

public List<Object> getRefs() {
return this.body.getRefs();
}

@JsonProperty("request_seq")
public int getRequestSeq() {
return this.body.getRequest().getSeq();
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/org/dynjs/debugger/requests/ScriptsRequest.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,49 @@
package org.dynjs.debugger.requests;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

/**
* @author Bob McWhirter
*/
public class ScriptsRequest extends AbstractRequest<ScriptsResponse> {

@JsonIgnoreProperties("maxStringLength")
public static class Arguments {

private boolean includeSource;
private int types;

public void setIncludeSource(boolean includeSource) {
this.includeSource = includeSource;
}

public boolean isIncludeSource() {
return this.includeSource;
}

public void setTypes(int type) {
this.types = types;
}

public int getTypes() {
return this.types;
}

}

private Arguments arguments;

public ScriptsRequest() {
super("scripts");
}

public void setArguments(Arguments arguments) {
this.arguments = arguments;
}

public Arguments getArguments() {
return this.arguments;
}

}

0 comments on commit 42156fe

Please sign in to comment.