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

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

Introduction

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

Prototype

int getLineEnd(int lineNumber);

Source Link

Document

Answers the ending 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;//from www .  j  ava 2  s  .c o 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);
}