Example usage for org.eclipse.jdt.core.compiler IProblem getSourceEnd

List of usage examples for org.eclipse.jdt.core.compiler IProblem getSourceEnd

Introduction

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

Prototype

int getSourceEnd();

Source Link

Document

Answer the end position of the problem (inclusive), or -1 if unknown.

Usage

From source file:at.bestsolution.javafx.ide.jdt.internal.JavaEditor.java

License:Open Source License

@Inject
public JavaEditor(BorderPane pane, IEditorInput input) {
    editor = new SourceEditor();
    pane.setCenter(editor);//from w w  w  .  j  av a  2  s . c o  m

    IResourceFileInput fsInput = (IResourceFileInput) input;
    try {
        unit = ((ICompilationUnit) JavaCore.create(fsInput.getFile()))
                .getWorkingCopy(new FXWorkingCopyOwner(new IProblemRequestor() {
                    private List<ProblemMarker> l = new ArrayList<>();

                    @Override
                    public boolean isActive() {
                        // TODO Auto-generated method stub
                        return true;
                    }

                    @Override
                    public void endReporting() {
                        setMarkers(l);
                    }

                    @Override
                    public void beginReporting() {
                        l.clear();
                    }

                    @Override
                    public void acceptProblem(IProblem problem) {
                        int linenumber = problem.getSourceLineNumber();
                        int startCol = problem.getSourceStart();
                        int endCol = problem.getSourceEnd();

                        if (endCol == startCol) {
                            endCol++;
                        }

                        String description = problem.getMessage();
                        ProblemMarker marker = new ProblemMarker(
                                problem.isError() ? at.bestsolution.javafx.ide.editor.ProblemMarker.Type.ERROR
                                        : at.bestsolution.javafx.ide.editor.ProblemMarker.Type.WARNING,
                                linenumber, startCol, endCol, description);
                        l.add(marker);
                    }
                }), new NullProgressMonitor());
    } catch (JavaModelException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    final Document doc = createDocument(unit);
    editor.setDocument(doc);
    editor.setContentProposalComputer(new ContentProposalComputer() {

        @Override
        public List<Proposal> computeProposals(String line, String prefix, int offset) {
            final List<Proposal> l = new ArrayList<ContentProposalComputer.Proposal>();

            try {
                unit.codeComplete(offset, new CompletionRequestor() {

                    @Override
                    public void accept(CompletionProposal proposal) {
                        String completion = new String(proposal.getCompletion());

                        if (!Flags.isPublic(proposal.getFlags())) {
                            return;
                        }

                        if (proposal.getKind() == CompletionProposal.METHOD_REF) {
                            String sig = Signature.toString(new String(proposal.getSignature()),
                                    new String(proposal.getName()), null, false, false);
                            StyledString s = new StyledString(sig + " : " + Signature.getSimpleName(Signature
                                    .toString(Signature.getReturnType(new String(proposal.getSignature())))));
                            s.appendString(
                                    " - " + Signature.getSignatureSimpleName(
                                            new String(proposal.getDeclarationSignature())),
                                    Style.colored("#AAAAAA"));

                            l.add(new Proposal(Type.METHOD, completion, s));
                        } else if (proposal.getKind() == CompletionProposal.FIELD_REF) {
                            StyledString s = new StyledString(
                                    completion + " : "
                                            + (proposal.getSignature() != null
                                                    ? Signature.getSignatureSimpleName(
                                                            new String(proposal.getSignature()))
                                                    : "<unknown>"));
                            s.appendString(
                                    " - " + (proposal.getDeclarationSignature() != null
                                            ? Signature.getSignatureSimpleName(
                                                    new String(proposal.getDeclarationSignature()))
                                            : "<unknown>"),
                                    Style.colored("#AAAAAA"));
                            l.add(new Proposal(Type.FIELD, completion, s));
                        } else if (proposal.getKind() == CompletionProposal.TYPE_REF) {
                            if (proposal.getAccessibility() == IAccessRule.K_NON_ACCESSIBLE) {
                                return;
                            }

                            StyledString s = new StyledString(
                                    Signature.getSignatureSimpleName(new String(proposal.getSignature())));
                            s.appendString(" - " + new String(proposal.getDeclarationSignature()),
                                    Style.colored("#AAAAAA"));
                            l.add(new Proposal(Type.TYPE, new String(proposal.getCompletion()), s));
                        } else {
                            System.err.println(proposal);
                        }
                    }
                });
            } catch (JavaModelException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return l;
        }

    });
    editor.setSaveCallback(new Runnable() {

        @Override
        public void run() {
            try {
                unit.commitWorkingCopy(true, null);
            } catch (JavaModelException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });

    try {
        unit.reconcile(ICompilationUnit.NO_AST, true, null, null);
    } catch (JavaModelException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

From source file:com.google.gdt.eclipse.appengine.rpc.util.CompilationUnitCreator.java

License:Open Source License

@SuppressWarnings("unchecked")
private void removeUnusedImports(ICompilationUnit cu, Set<String> existingImports, boolean needsSave)
        throws CoreException {
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(cu);/*from   w  ww .  ja  va  2 s.c  o m*/
    parser.setResolveBindings(true);

    CompilationUnit root = (CompilationUnit) parser.createAST(null);
    if (root.getProblems().length == 0) {
        return;
    }

    List<ImportDeclaration> importsDecls = root.imports();
    if (importsDecls.isEmpty()) {
        return;
    }
    ImportsManager imports = new ImportsManager(root);

    int importsEnd = ASTNodes.getExclusiveEnd((ASTNode) importsDecls.get(importsDecls.size() - 1));
    IProblem[] problems = root.getProblems();
    for (int i = 0; i < problems.length; i++) {
        IProblem curr = problems[i];
        if (curr.getSourceEnd() < importsEnd) {
            int id = curr.getID();
            if (id == IProblem.UnusedImport || id == IProblem.NotVisibleType) {
                int pos = curr.getSourceStart();
                for (int k = 0; k < importsDecls.size(); k++) {
                    ImportDeclaration decl = importsDecls.get(k);
                    if (decl.getStartPosition() <= pos && pos < decl.getStartPosition() + decl.getLength()) {
                        if (existingImports.isEmpty() || !existingImports.contains(ASTNodes.asString(decl))) {
                            String name = decl.getName().getFullyQualifiedName();
                            if (decl.isOnDemand()) {
                                name += ".*"; //$NON-NLS-1$
                            }
                            if (decl.isStatic()) {
                                imports.removeStaticImport(name);
                            } else {
                                imports.removeImport(name);
                            }
                        }
                        break;
                    }
                }
            }
        }
    }
    imports.create(needsSave, null);
}

From source file:com.google.gdt.eclipse.appengine.rpc.wizards.helpers.RpcServiceLayerCreator.java

License:Open Source License

@SuppressWarnings("unchecked")
private void removeUnusedImports(ICompilationUnit cu, Set<String> existingImports, boolean needsSave)
        throws CoreException {
    ASTParser parser = ASTParser.newParser(AST.JLS3);
    parser.setSource(cu);/*from  www.  j  av a  2 s . c o m*/
    parser.setResolveBindings(true);

    CompilationUnit root = (CompilationUnit) parser.createAST(null);
    if (root.getProblems().length == 0) {
        return;
    }

    List<ImportDeclaration> importsDecls = root.imports();
    if (importsDecls.isEmpty()) {
        return;
    }
    ImportsManager imports = new ImportsManager(root);

    int importsEnd = ASTNodes.getExclusiveEnd(importsDecls.get(importsDecls.size() - 1));
    IProblem[] problems = root.getProblems();
    for (int i = 0; i < problems.length; i++) {
        IProblem curr = problems[i];
        if (curr.getSourceEnd() < importsEnd) {
            int id = curr.getID();
            if (id == IProblem.UnusedImport || id == IProblem.NotVisibleType) {
                int pos = curr.getSourceStart();
                for (int k = 0; k < importsDecls.size(); k++) {
                    ImportDeclaration decl = importsDecls.get(k);
                    if (decl.getStartPosition() <= pos && pos < decl.getStartPosition() + decl.getLength()) {
                        if (existingImports.isEmpty() || !existingImports.contains(ASTNodes.asString(decl))) {
                            String name = decl.getName().getFullyQualifiedName();
                            if (decl.isOnDemand()) {
                                name += ".*"; //$NON-NLS-1$
                            }
                            if (decl.isStatic()) {
                                imports.removeStaticImport(name);
                            } else {
                                imports.removeImport(name);
                            }
                        }
                        break;
                    }
                }
            }
        }
    }
    imports.create(needsSave, null);
}

From source file:com.google.gdt.eclipse.core.JavaASTUtils.java

License:Open Source License

/**
 * Returns <code>true</code> if any of the problems fall within the
 * {@link ASTNode}'s source range./*from  ww  w  .j av  a 2 s .  c  o  m*/
 */
public static boolean hasErrors(ASTNode node, IProblem[] problems) {
    int startPosition = node.getStartPosition();
    int endPosition = startPosition + node.getLength() - 1;

    for (IProblem problem : problems) {
        if (!problem.isError()) {
            // Skip any problem that is not an error
            continue;
        }
        if (problem.getSourceStart() >= startPosition && problem.getSourceEnd() <= endPosition) {
            return true;
        }
    }

    return false;
}

From source file:com.microsoft.javapkgsrv.JavaParser.java

License:MIT License

public List<Problem> ProcessFileParseMessagesRequest(Integer fileId) {
    List<FileParseMessagesResponse.Problem> ret = new ArrayList<FileParseMessagesResponse.Problem>();
    if (ActiveUnits.containsKey(fileId)) {
        CompilationUnit cu = ActiveUnits.get(fileId);
        IProblem[] problems = cu.getProblems();

        for (IProblem problem : problems) {
            System.out.println(problem.toString());
            FileParseMessagesResponse.Problem.Builder retProblem = FileParseMessagesResponse.Problem
                    .newBuilder().setId(problem.getID()).setMessage(problem.getMessage())
                    .setFileName(new String(problem.getOriginatingFileName()))
                    .setScopeStart(problem.getSourceStart()).setScopeEnd(problem.getSourceEnd() + 1)
                    .setLineNumber(problem.getSourceLineNumber()).setProblemType(GetProblemType(problem));
            for (String arg : problem.getArguments())
                retProblem.addArguments(arg);
            ret.add(retProblem.build());
        }//from   w  w w. j  a  v a  2 s  .  com
    }
    return ret;
}

From source file:com.tsc9526.monalisa.plugin.eclipse.jdt.ProblemDetail.java

License:Open Source License

private String getDetail(IProblem problem) {
    StringBuilder sb = new StringBuilder();

    String className = new String(problem.getOriginatingFileName()).replace("/", ".");
    className = className.substring(0, className.length() - 5);
    String message = problem.getMessage();
    if (problem.getID() == IProblem.CannotImportPackage) {
        message = problem.getArguments()[0] + " cannot be resolved";
    }//  ww  w . j  a  va 2  s  .c  om

    sb.append(className + ":" + message + ", Source: ");
    sb.append("\r\n==============================================\r\n");

    int start = problem.getSourceStart();
    int end = problem.getSourceEnd();
    char[] contents = result.getCompilationUnit().getContents();

    if (end > start && start >= 0 && end < contents.length) {
        int lineOffset = -1;
        for (int i = 0; i <= start; i++) {
            if (contents[i] == '\n') {
                lineOffset = -1;
            } else {
                lineOffset++;
            }
        }

        int lineStart = 0;
        for (int i = start; i < contents.length; i++) {
            if (contents[i] == '\n') {
                lineStart = i + 1;
                break;
            }
        }

        int minEnd = end;
        for (int i = start; i <= end; i++) {
            if (contents[i] == '\n') {
                minEnd = i;
                break;
            }
        }

        sb.append(new String(contents, 0, lineStart));

        for (int i = 0; i < lineOffset; i++) {
            sb.append(" ");
        }

        for (int i = 0; i <= (minEnd - start); i++) {
            sb.append("^");
        }

        sb.append(" <--- " + message + "\r\n");

        sb.append(new String(contents, lineStart, contents.length - lineStart));
    } else {
        sb.append(new String(contents));
    }

    sb.append("\r\n=====================================================\r\n");

    return sb.toString();
}

From source file:com.xqbase.compiler.eclipse.EclipseJavaCompiler.java

License:Open Source License

private CompilerMessage handleWarning(String fileName, IProblem warning) {
    return new CompilerMessage(fileName, CompilerMessage.Kind.WARNING, warning.getSourceLineNumber(),
            warning.getSourceStart(), warning.getSourceLineNumber(), warning.getSourceEnd(),
            warning.getMessage());//  www  .  j a va2  s  .c o  m
}

From source file:edu.brown.cs.bubbles.bedrock.BedrockUtil.java

License:Open Source License

/********************************************************************************/

static void outputProblem(IProject proj, IProblem ip, IvyXmlWriter xw) {
    xw.begin("PROBLEM");

    if (ip instanceof IMarker) {
        IMarker xmk = (IMarker) ip;/*  w w w .  j  a  v a2 s  .c o m*/
        xw.field("ID", xmk.getId());
    }

    xw.field("MSGID", ip.getID());
    xw.field("MESSAGE", ip.getMessage());
    char[] filc = ip.getOriginatingFileName();
    if (filc != null) {
        File fnm = new File(new String(filc));
        fnm = getFileForPath(fnm, proj);
        xw.field("FILE", fnm.getAbsolutePath());
    }
    xw.field("LINE", ip.getSourceLineNumber());
    xw.field("START", ip.getSourceStart());
    xw.field("END", ip.getSourceEnd());
    if (proj != null)
        xw.field("PROJECT", proj.getName());
    if (ip.isError())
        xw.field("ERROR", true);
    else {
        switch (ip.getID()) {
        case IProblem.Task:
            break;
        default:
            xw.field("WARNING", true);
            break;
        }
    }

    for (String s : ip.getArguments()) {
        xw.textElement("ARG", s);
    }

    BedrockPlugin.getPlugin().addFixes(ip, xw);

    xw.end("PROBLEM");
}

From source file:jetbrick.template.compiler.JdtCompiler.java

License:Open Source License

@Override
protected void generateJavaClass(JavaSource source) throws IOException {
    INameEnvironment env = new NameEnvironment(source);
    IErrorHandlingPolicy policy = DefaultErrorHandlingPolicies.proceedWithAllProblems();
    CompilerOptions options = getCompilerOptions();
    CompilerRequestor requestor = new CompilerRequestor();
    IProblemFactory problemFactory = new DefaultProblemFactory(Locale.getDefault());

    Compiler compiler = new Compiler(env, policy, options, requestor, problemFactory);
    compiler.compile(new ICompilationUnit[] { new CompilationUnit(source) });

    if (requestor.hasErrors()) {
        String sourceCode = source.getSourceCode();
        String[] sourceCodeLines = sourceCode.split("(\r\n|\r|\n)", -1);
        StringBuilder sb = new StringBuilder();
        sb.append("Compilation failed.");
        sb.append('\n');
        for (IProblem p : requestor.getErrors()) {
            sb.append(p.getMessage()).append('\n');
            int start = p.getSourceStart();
            int column = start; // default
            for (int i = start; i >= 0; i--) {
                char c = sourceCode.charAt(i);
                if (c == '\n' || c == '\r') {
                    column = start - i;/*from   w w  w  .j  a v  a 2s  . c o m*/
                    break;
                }
            }
            sb.append(StringUtils.getPrettyError(sourceCodeLines, p.getSourceLineNumber(), column,
                    p.getSourceStart(), p.getSourceEnd(), 3));
        }
        sb.append(requestor.getErrors().length);
        sb.append(" error(s)\n");
        throw new CompileErrorException(sb.toString());
    }

    requestor.save(source.getOutputdir());
}

From source file:net.sf.jasperreports.engine.design.JRJdtCompiler.java

License:LGPL

protected ICompilerRequestor getCompilerRequestor(final JRCompilationUnit[] units,
        final StringBuffer problemBuffer) {
    final ICompilerRequestor requestor = new ICompilerRequestor() {
        public void acceptResult(CompilationResult result) {
            String className = ((CompilationUnit) result.getCompilationUnit()).className;

            int classIdx;
            for (classIdx = 0; classIdx < units.length; ++classIdx) {
                if (className.equals(units[classIdx].getName())) {
                    break;
                }/*  ww  w .  j  av a2  s .co  m*/
            }

            if (result.hasErrors()) {
                String sourceCode = units[classIdx].getSourceCode();

                IProblem[] problems = getJavaCompilationErrors(result);
                for (int i = 0; i < problems.length; i++) {
                    IProblem problem = problems[i];
                    //if (problem.isError()) 
                    {
                        problemBuffer.append(i + 1);
                        problemBuffer.append(". ");
                        problemBuffer.append(problem.getMessage());

                        if (problem.getSourceStart() >= 0 && problem.getSourceEnd() >= 0) {
                            int problemStartIndex = sourceCode.lastIndexOf("\n", problem.getSourceStart()) + 1;
                            int problemEndIndex = sourceCode.indexOf("\n", problem.getSourceEnd());
                            if (problemEndIndex < 0) {
                                problemEndIndex = sourceCode.length();
                            }

                            problemBuffer.append("\n");
                            problemBuffer.append(sourceCode.substring(problemStartIndex, problemEndIndex));
                            problemBuffer.append("\n");
                            for (int j = problemStartIndex; j < problem.getSourceStart(); j++) {
                                problemBuffer.append(" ");
                            }
                            if (problem.getSourceStart() == problem.getSourceEnd()) {
                                problemBuffer.append("^");
                            } else {
                                problemBuffer.append("<");
                                for (int j = problem.getSourceStart() + 1; j < problem.getSourceEnd(); j++) {
                                    problemBuffer.append("-");
                                }
                                problemBuffer.append(">");
                            }
                        }

                        problemBuffer.append("\n");
                    }
                }
                problemBuffer.append(problems.length);
                problemBuffer.append(" errors\n");
            }
            if (problemBuffer.length() == 0) {
                ClassFile[] resultClassFiles = result.getClassFiles();
                for (int i = 0; i < resultClassFiles.length; i++) {
                    units[classIdx].setCompileData(resultClassFiles[i].getBytes());
                }
            }
        }
    };

    return requestor;
}