use of org.eclipse.core.filebuffers.ITextFileBufferManager in project evosuite by EvoSuite.
the class ResolutionMarkerEvoIgnoreForClass method run.
@Override
public void run(IMarker marker) {
IResource res = marker.getResource();
try {
CompilationUnit compunit = CompilationUnitManager.getCompilationUnit(res);
int position = marker.getAttribute(IMarker.CHAR_START, 0) + 1;
if (position == 0) {
int line = marker.getAttribute(IMarker.LINE_NUMBER, 0);
position = compunit.getPosition(line, 0);
}
AST ast = compunit.getAST();
ASTRewrite rewriter = ASTRewrite.create(ast);
Annotation annotation = ast.newNormalAnnotation();
annotation.setTypeName(ast.newName("EvoIgnore"));
ImportDeclaration id = ast.newImportDeclaration();
id.setName(ast.newName("org.evosuite.quickfixes.annotations.EvoIgnore"));
ListRewrite lr = rewriter.getListRewrite(compunit, CompilationUnit.TYPES_PROPERTY);
// lr.insertFirst(annotation, null);
lr.insertAt(annotation, 0, null);
lr.insertAt(id, 0, null);
ITextFileBufferManager bm = FileBuffers.getTextFileBufferManager();
IPath path = compunit.getJavaElement().getPath();
try {
bm.connect(path, null, null);
ITextFileBuffer textFileBuffer = bm.getTextFileBuffer(path, null);
IDocument document = textFileBuffer.getDocument();
TextEdit edits = rewriter.rewriteAST(document, null);
edits.apply(document);
textFileBuffer.commit(null, false);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedTreeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bm.disconnect(path, null, null);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// (4)
}
System.out.println(lr.getRewrittenList() + "\nPosition: " + position + "\nEdits: " + rewriter.toString());
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
marker.delete();
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
use of org.eclipse.core.filebuffers.ITextFileBufferManager in project evosuite by EvoSuite.
the class ResolutionMarkerEvoIgnoreForMethod method run.
@Override
public void run(IMarker marker) {
// TODO Auto-generated method stub
IResource res = marker.getResource();
try {
ICompilationUnit icomp = CompilationUnitManager.getICompilationUnit(res);
CompilationUnit compunit = CompilationUnitManager.getCompilationUnit(res);
int position = marker.getAttribute(IMarker.CHAR_START, 0) + 1;
if (position == 1) {
int line = marker.getAttribute(IMarker.LINE_NUMBER, 0);
position = compunit.getPosition(line, 0);
}
AST ast = compunit.getAST();
ASTRewrite rewriter = ASTRewrite.create(ast);
IJavaElement element = icomp.getElementAt(position);
IJavaElement method = getMethod(element);
// TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);
TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);
MethodDeclaration md = td.getMethods()[0];
int counter = 1;
while (!md.getName().getFullyQualifiedName().equals(method.getElementName()) && counter < td.getMethods().length) {
md = td.getMethods()[counter];
System.out.println(md.getName().getFullyQualifiedName() + " " + method.getElementName());
counter++;
}
Annotation annotation = ast.newNormalAnnotation();
annotation.setTypeName(ast.newName("EvoIgnore"));
ImportDeclaration id = ast.newImportDeclaration();
id.setName(ast.newName("org.evosuite.quickfixes.annotations.EvoIgnore"));
ListRewrite lr = rewriter.getListRewrite(md.getParent(), TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
ListRewrite lr2 = rewriter.getListRewrite(compunit, CompilationUnit.TYPES_PROPERTY);
// lr.insertFirst(annotation, null);
lr.insertBefore(annotation, md, null);
lr2.insertAt(id, 0, null);
ITextFileBufferManager bm = FileBuffers.getTextFileBufferManager();
IPath path = compunit.getJavaElement().getPath();
try {
bm.connect(path, null, null);
ITextFileBuffer textFileBuffer = bm.getTextFileBuffer(path, null);
IDocument document = textFileBuffer.getDocument();
TextEdit edits = rewriter.rewriteAST(document, null);
edits.apply(document);
textFileBuffer.commit(null, false);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedTreeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bm.disconnect(path, null, null);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// (4)
}
System.out.println(lr.getRewrittenList() + "\nPosition: " + position + "\nEdits: " + rewriter.toString());
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
marker.delete();
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
use of org.eclipse.core.filebuffers.ITextFileBufferManager in project evosuite by EvoSuite.
the class ResolutionMarkerTryBlock method run.
@Override
public void run(IMarker marker) {
// TODO Auto-generated method stub
IResource res = marker.getResource();
try {
String markerMessage = (String) marker.getAttribute(IMarker.MESSAGE);
String exception = markerMessage.split(" ")[0];
String[] exceptionPackageArray = exception.split("\\.");
String exceptionPackage = "";
for (int i = 0; i < exceptionPackageArray.length - 1; i++) {
exceptionPackage += exceptionPackageArray[i] + ".";
}
exception = exception.substring(exceptionPackage.length());
System.out.println("Package: " + exceptionPackage + ", Exception: " + exception);
ICompilationUnit icomp = CompilationUnitManager.getICompilationUnit(res);
CompilationUnit compunit = CompilationUnitManager.getCompilationUnit(res);
int position = marker.getAttribute(IMarker.CHAR_START, 0) + 1;
int line = marker.getAttribute(IMarker.LINE_NUMBER, 0);
if (position == 1) {
position = compunit.getPosition(line, 0);
}
AST ast = compunit.getAST();
ASTRewrite rewriter = ASTRewrite.create(ast);
IJavaElement element = icomp.getElementAt(position);
IJavaElement method = getMethod(element);
// TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);
TypeDeclaration td = (TypeDeclaration) compunit.types().get(0);
MethodDeclaration md = td.getMethods()[0];
int counter = 1;
while (!md.getName().getFullyQualifiedName().equals(method.getElementName()) && counter < td.getMethods().length) {
md = td.getMethods()[counter];
System.out.println(md.getName().getFullyQualifiedName() + " " + method.getElementName());
counter++;
}
Block block = md.getBody();
ListRewrite lr = rewriter.getListRewrite(block, Block.STATEMENTS_PROPERTY);
ImportDeclaration id = ast.newImportDeclaration();
id.setName(ast.newName(exceptionPackage + exception));
ListRewrite lrClass = rewriter.getListRewrite(compunit, CompilationUnit.TYPES_PROPERTY);
lrClass.insertAt(id, 0, null);
ASTNode currentNode = null;
List<ASTNode> list = new ArrayList<ASTNode>();
for (Object o : lr.getOriginalList()) {
if (o instanceof ASTNode) {
list.add((ASTNode) o);
}
}
for (int i = 0; i < list.size(); i++) {
ASTNode node = list.get(i);
int nodeLine = compunit.getLineNumber(node.getStartPosition());
System.out.println(line + " " + nodeLine);
if (line == nodeLine) {
currentNode = node;
break;
}
List childrenList = node.structuralPropertiesForType();
for (int j = 0; j < childrenList.size(); j++) {
StructuralPropertyDescriptor curr = (StructuralPropertyDescriptor) childrenList.get(j);
Object child = node.getStructuralProperty(curr);
if (child instanceof List) {
for (Object ob : (List) child) {
if (ob instanceof ASTNode) {
list.add((ASTNode) ob);
}
}
} else if (child instanceof ASTNode) {
list.add((ASTNode) child);
}
}
}
TryStatement ts = ast.newTryStatement();
Statement emptyStatement = (Statement) rewriter.createStringPlaceholder("\n", ASTNode.EMPTY_STATEMENT);
Statement emptyStatement2 = (Statement) rewriter.createStringPlaceholder("\n\t", ASTNode.EMPTY_STATEMENT);
Block b2 = ast.newBlock();
b2.statements().add(0, ASTNode.copySubtree(b2.getAST(), currentNode));
b2.statements().add(1, emptyStatement);
b2.statements().add(0, emptyStatement2);
ts.setBody(b2);
CatchClause cc = ast.newCatchClause();
SingleVariableDeclaration svd = ast.newSingleVariableDeclaration();
svd.setName(ast.newSimpleName("e"));
Type type = ast.newSimpleType(ast.newName(exception));
svd.setType(type);
cc.setException(svd);
Block b3 = ast.newBlock();
Statement printStatement = (Statement) rewriter.createStringPlaceholder("e.printStackTrace();", ASTNode.EMPTY_STATEMENT);
b3.statements().add(0, printStatement);
cc.setBody(b3);
ListRewrite parentList = rewriter.getListRewrite(currentNode.getParent(), Block.STATEMENTS_PROPERTY);
parentList.replace(currentNode, ts, null);
parentList.insertAfter(cc, ts, null);
ITextFileBufferManager bm = FileBuffers.getTextFileBufferManager();
IPath path = compunit.getJavaElement().getPath();
try {
bm.connect(path, null, null);
ITextFileBuffer textFileBuffer = bm.getTextFileBuffer(path, null);
IDocument document = textFileBuffer.getDocument();
TextEdit edits = rewriter.rewriteAST(document, null);
edits.apply(document);
textFileBuffer.commit(null, false);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedTreeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (BadLocationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
bm.disconnect(path, null, null);
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// (4)
}
marker.delete();
} catch (JavaModelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CoreException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
use of org.eclipse.core.filebuffers.ITextFileBufferManager in project titan.EclipsePlug-ins by eclipse.
the class OutputAnalyzer method addTITANMarker.
/**
* Places a Marker on the right place.
* <p>
* how it works:
* <ul>
* <li>first it searches in the files map to find the right resource to
* a file name.
* <li>if no such resource can be found, but the project is available,
* then the marker will be placed on the project.
* <li>tries to put the marker on the right place. With errors coming
* from pre-processed files, it can happen that their column number
* point to full wrong, or not even existing positions.
*
* </ul>
*
* Please note that the textFileBufferManagers are created only once for
* every file resource, their disconnection is done in the dispose()
* method.
*
* @see #dispose()
*
* @param fileName
* the file name
* @param startLineNumber
* the line number of the beginning of the error or
* <code>0</code>
* @param startOffset
* the offset of the beginning of the error in line given
* by startLineNumber or <code>-1</code>
* @param endLineNumber
* the line number of of the ending of the error or
* equals startLineNumber
* @param endOffset
* the offset of the end of the error in line given by
* endLineNumber or <code>-1</code>
* @param type
* the type of the message: can be error / warning / note
* @param message
* the text of the error.
*
* @return whether it was successful or not
*/
private boolean addTITANMarker(final String fileName, final int startLineNumber, final int startOffset, final int endLineNumber, final int endOffset, final String type, final String message) {
IResource resource = null;
if (files.containsKey(fileName)) {
resource = files.get(fileName);
} else {
boolean found = false;
final IPath filePath = new Path(fileName);
final String lastSegment = filePath.lastSegment();
if (files.containsKey(lastSegment)) {
resource = files.get(lastSegment);
found = true;
}
if (!found) {
for (IFile file2 : files.values()) {
final IPath path2 = file2.getProject().getLocation().append(fileName);
final String temp = path2.toOSString();
if (files.containsKey(temp)) {
resource = files.get(temp);
found = true;
break;
}
}
}
if (!found) {
for (IFile file2 : files.values()) {
final IPath workingDir = ProjectBasedBuilder.getProjectBasedBuilder(file2.getProject()).getWorkingDirectoryPath(true);
if (workingDir != null) {
final IPath path2 = workingDir.append(fileName);
final String temp = path2.toOSString();
if (files.containsKey(temp)) {
resource = files.get(temp);
found = true;
break;
}
}
}
}
if (!found) {
final URI workingDirUri = ProjectBasedBuilder.getProjectBasedBuilder(project).getWorkingDirectoryURI(true);
if (workingDirUri != null) {
final URI uri2 = URIUtil.append(workingDirUri, fileName);
final IWorkspaceRoot wroot = ResourcesPlugin.getWorkspace().getRoot();
final IFile[] results = wroot.findFilesForLocationURI(uri2);
if (results != null && results.length > 0) {
resource = results[0];
found = true;
}
}
}
}
Location location = null;
if (resource == null || !resource.isAccessible()) {
if (project != null && project.isAccessible()) {
location = new Location(project);
if (ERROR.equals(type)) {
location.reportExternalProblem(message.trim(), IMarker.SEVERITY_ERROR, GeneralConstants.COMPILER_ERRORMARKER);
} else {
location.reportExternalProblem(message.trim(), IMarker.SEVERITY_WARNING, GeneralConstants.COMPILER_WARNINGMARKER);
}
processedErrorMessages = true;
return true;
}
return false;
}
try {
if (startLineNumber > 0 && startOffset != -1 && endOffset != -1) {
IDocument document = null;
if (documentMap.containsKey(resource)) {
document = documentMap.get(resource);
} else {
final ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
final IPath fullPath = resource.getFullPath();
if (manager != null) {
manager.connect(fullPath, LocationKind.IFILE, null);
final ITextFileBuffer buffer = manager.getTextFileBuffer(fullPath, LocationKind.IFILE);
document = buffer.getDocument();
documentMap.put(resource, document);
filesOpened.add(fullPath);
}
}
try {
if (document != null && endLineNumber < document.getNumberOfLines() && document.getLineLength(startLineNumber - 1) > startOffset && document.getLineLength(endLineNumber - 1) >= endOffset) {
location = new Location(resource, startLineNumber, document.getLineOffset(startLineNumber - 1) + startOffset - 1, document.getLineOffset(endLineNumber - 1) + endOffset);
}
} catch (BadLocationException e) {
ErrorReporter.logExceptionStackTrace(e);
}
}
if (location == null) {
location = new Location(resource, startLineNumber);
}
if (ERROR.equals(type)) {
location.reportExternalProblem(message, IMarker.SEVERITY_ERROR, GeneralConstants.COMPILER_ERRORMARKER);
} else {
location.reportExternalProblem(message, IMarker.SEVERITY_WARNING, GeneralConstants.COMPILER_WARNINGMARKER);
}
processedErrorMessages = true;
} catch (CoreException e) {
ErrorReporter.logExceptionStackTrace(e);
}
return true;
}
use of org.eclipse.core.filebuffers.ITextFileBufferManager in project titan.EclipsePlug-ins by eclipse.
the class OutputAnalyzer method dispose.
/**
* Disposes the objects that were buffered to speed up marker creation.
* <p>
* Please note that the textFileBufferManagers are disconnected from the
* file system at this point.
*
* @see #addTITANMarker(String, int, int, int, int, String, String,
* String)
*/
public void dispose() {
documentMap.clear();
final ITextFileBufferManager manager = FileBuffers.getTextFileBufferManager();
for (IPath path : filesOpened) {
try {
manager.disconnect(path, LocationKind.IFILE, null);
} catch (CoreException e) {
ErrorReporter.logExceptionStackTrace(e);
}
}
filesOpened.clear();
files = null;
project = null;
}
Aggregations