use of boa.types.Diff.ChangedFile in project compiler by boalang.
the class BoaAstIntrinsics method getast.
/**
* Given a ChangedFile, return the AST for that file at that revision.
*
* @param f the ChangedFile to get a snapshot of the AST for
* @return the AST, or an empty AST on any sort of error
*/
@SuppressWarnings("unchecked")
@FunctionSpec(name = "getast", returnType = "ASTRoot", formalParameters = { "ChangedFile" })
public static ASTRoot getast(final ChangedFile f) {
// since we know only certain kinds have ASTs, filter before looking up
final ChangedFile.FileKind kind = f.getKind();
if (kind != ChangedFile.FileKind.SOURCE_JAVA_ERROR && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS2 && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS3 && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS4 && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS8)
return emptyAst;
context.getCounter(AST_COUNTER.GETS_ATTEMPTED).increment(1);
final String rowName = f.getKey() + "!!" + f.getName();
if (map == null)
openMap();
try {
final BytesWritable value = new BytesWritable();
if (map.get(new Text(rowName), value) == null) {
context.getCounter(AST_COUNTER.GETS_FAIL_MISSING).increment(1);
} else {
final CodedInputStream _stream = CodedInputStream.newInstance(value.getBytes(), 0, value.getLength());
// defaults to 64, really big ASTs require more
_stream.setRecursionLimit(Integer.MAX_VALUE);
final ASTRoot root = ASTRoot.parseFrom(_stream);
context.getCounter(AST_COUNTER.GETS_SUCCEED).increment(1);
return root;
}
} catch (final InvalidProtocolBufferException e) {
e.printStackTrace();
context.getCounter(AST_COUNTER.GETS_FAIL_BADPROTOBUF).increment(1);
} catch (final IOException e) {
e.printStackTrace();
context.getCounter(AST_COUNTER.GETS_FAIL_MISSING).increment(1);
} catch (final RuntimeException e) {
e.printStackTrace();
context.getCounter(AST_COUNTER.GETS_FAIL_MISSING).increment(1);
} catch (final Error e) {
e.printStackTrace();
context.getCounter(AST_COUNTER.GETS_FAIL_BADPROTOBUF).increment(1);
}
System.err.println("error with ast: " + rowName);
context.getCounter(AST_COUNTER.GETS_FAILED).increment(1);
return emptyAst;
}
use of boa.types.Diff.ChangedFile in project compiler by boalang.
the class BoaAstIntrinsics method getcomments.
/**
* Given a ChangedFile, return the comments for that file at that revision.
*
* @param f the ChangedFile to get a snapshot of the comments for
* @return the comments list, or an empty list on any sort of error
*/
@FunctionSpec(name = "getcomments", returnType = "CommentsRoot", formalParameters = { "ChangedFile" })
public static CommentsRoot getcomments(final ChangedFile f) {
// since we know only certain kinds have comments, filter before looking up
final ChangedFile.FileKind kind = f.getKind();
if (kind != ChangedFile.FileKind.SOURCE_JAVA_ERROR && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS2 && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS3 && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS4 && kind != ChangedFile.FileKind.SOURCE_JAVA_JLS8)
return emptyComments;
final String rowName = f.getKey() + "!!" + f.getName();
if (commentsMap == null)
openCommentMap();
try {
final BytesWritable value = new BytesWritable();
if (commentsMap.get(new Text(rowName), value) != null) {
final CodedInputStream _stream = CodedInputStream.newInstance(value.getBytes(), 0, value.getLength());
final CommentsRoot root = CommentsRoot.parseFrom(_stream);
return root;
}
} catch (final InvalidProtocolBufferException e) {
e.printStackTrace();
} catch (final IOException e) {
e.printStackTrace();
} catch (final RuntimeException e) {
e.printStackTrace();
} catch (final Error e) {
e.printStackTrace();
}
System.err.println("error with comments: " + rowName);
return emptyComments;
}
Aggregations