Example usage for org.eclipse.jdt.core.compiler IScanner getLineStart

List of usage examples for org.eclipse.jdt.core.compiler IScanner getLineStart

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.compiler IScanner getLineStart.

Prototype

int getLineStart(int lineNumber);

Source Link

Document

Answers the starting position of a given line number.

Usage

From source file:org.jboss.tools.arquillian.core.internal.util.ArquillianSearchEngine.java

License:Open Source License

private static void createProblem(String message, IType type, IMethodBinding deploymentMethod, Integer severity,
        int line) throws CoreException {
    if (severity == null || type == null || type.getJavaProject() == null) {
        return;//ww  w . ja  v a  2  s  .  co m
    }
    boolean enable = ArquillianUtility.isValidatorEnabled(type.getJavaProject().getProject());
    if (!enable) {
        return;
    }
    ICompilationUnit cu = type.getCompilationUnit();
    if (cu == null) {
        return;
    }
    IResource resource = cu.getResource();
    if (resource == null) {
        return;
    }
    IMarker marker = resource.createMarker(ArquillianConstants.MARKER_RESOURCE_ID);

    String[] allNames = { IMarker.MESSAGE, IMarker.SEVERITY, IJavaModelMarker.ID, IMarker.CHAR_START,
            IMarker.CHAR_END, IMarker.LINE_NUMBER, IMarker.SOURCE_ID, };

    Object[] allValues = new Object[allNames.length];
    int index = 0;
    allValues[index++] = message;

    allValues[index++] = severity;

    allValues[index++] = ArquillianConstants.ARQUILLIAN_PROBLEM_ID;
    int start = -1;
    int end = -1;
    if (line != -1) {
        IJavaProject project = cu.getJavaProject();
        String sourceLevel = project.getOption(JavaCore.COMPILER_SOURCE, true);
        String complianceLevel = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
        IScanner scanner = ToolFactory.createScanner(false, false, true, sourceLevel, complianceLevel);
        scanner.setSource(cu.getBuffer().getCharacters());
        if (scan(scanner)) {
            start = scanner.getLineStart(line);
            end = scanner.getLineEnd(line);
        }
    }
    if (start == -1 || end == -1) {
        IJavaElement javaElement = deploymentMethod.getJavaElement();
        ISourceRange range = null;
        if (javaElement instanceof IMember) {
            IMember member = (IMember) javaElement;
            if (javaElement != null) {
                try {
                    range = member.getNameRange();
                } catch (JavaModelException e) {
                    if (e.getJavaModelStatus().getCode() != IJavaModelStatusConstants.ELEMENT_DOES_NOT_EXIST) {
                        throw e;
                    }
                    if (!CharOperation.equals(javaElement.getElementName().toCharArray(),
                            TypeConstants.PACKAGE_INFO_NAME)) {
                        throw e;
                    }

                }
            }
        }
        start = range == null ? 0 : range.getOffset();
        end = range == null ? 1 : start + range.getLength();
    }

    allValues[index++] = new Integer(start); // start
    allValues[index++] = new Integer(end > 0 ? end + 1 : end); // end
    allValues[index++] = new Integer(line); // line number

    allValues[index++] = ArquillianConstants.SOURCE_ID;

    marker.setAttributes(allNames, allValues);
}