Example usage for org.eclipse.jdt.core ISourceReference getSource

List of usage examples for org.eclipse.jdt.core ISourceReference getSource

Introduction

In this page you can find the example usage for org.eclipse.jdt.core ISourceReference getSource.

Prototype

String getSource() throws JavaModelException;

Source Link

Document

Returns the source code associated with this element.

Usage

From source file:com.cb.eclipse.folding.java.calculation.JavaProjectionCalculator.java

License:Open Source License

/**
 * The core logic of this class.// w  ww.  j ava 2  s  .  c  o  m
 * 
 * Computes using the strategy objects what regions are available as
 * projections for this particular element.
 * 
 * @param elem
 * @return @throws
 *         JavaModelException
 * @throws InvalidInputException
 */
private Set computeProjections(IJavaElement elem) throws JavaModelException, InvalidInputException {
    if (!(elem instanceof ISourceReference))
        return null;

    RegionCalculationStrategy strategy = StrategyFactory.instance(this, elem);
    strategy.initialize();
    Set regionSet;
    if (!strategy.shouldScan(elem)) {
        regionSet = strategy.result(); // call immediately...
    } else {
        ISourceReference reference = (ISourceReference) elem;
        ISourceRange range = reference.getSourceRange();

        // All other element types require some parsing...
        String contents = reference.getSource();

        if (contents == null)
            return null;

        IScanner scanner = ToolFactory.createScanner(true, false, false, false);
        scanner.setSource(contents.toCharArray());

        int shift = range.getOffset();
        int start = shift;

        while (true) {
            int token = scanner.getNextToken();

            start = shift + scanner.getCurrentTokenStartPosition();
            int end = shift + scanner.getCurrentTokenEndPosition() + 1;

            if (!strategy.keepProcessing(token) || token == ITerminalSymbols.TokenNameEOF) {
                break; // end case.
            }

            strategy.handle(token, start, end, elem);

        }

        strategy.postScan(start, elem);

        regionSet = strategy.result();

    }

    if (regionSet == null) {
        regionSet = Collections.EMPTY_SET;
    }

    strategy.dispose();

    return regionSet;

}

From source file:com.cb.eclipse.folding.java.JavaProjectionAnnotation.java

License:Open Source License

private String computeSource() {
    StringBuffer result = new StringBuffer();
    try {//w w  w  . ja  va  2s  . c  o  m
        ISourceReference ref = (ISourceReference) owner;
        ISourceRange range = ref.getSourceRange();
        int sourceOffset = range.getOffset();
        int sourceLen = range.getLength();
        int offset = position.getOffset();
        int len = position.getLength();

        offset -= sourceOffset;
        if (offset < 0) {
            offset = 0;
            result.append("Position precedes element!\n");
        }
        if (len > sourceLen) {
            len = sourceLen;
            result.append("Position extends past element!\n");
        }
        if (len < 0) {
            len = 0;
            result.append("Length was less than 0!\n");
        }
        result.append(ref.getSource().substring(offset, offset + len));

    } catch (Exception e) {
        e.printStackTrace();
    }
    return result.toString();

}

From source file:com.github.elucash.lambda4jdt.FoldingStructureProvider.java

License:Open Source License

/**
 * Computes the projection ranges for a given <code>ISourceReference</code>. More than one range
 * or none at all may be returned. If there are no foldable regions, an empty array is returned.
 * <p>/*from   w  w w .  jav a  2 s. c  om*/
 * The last region in the returned array (if not empty) describes the region for the java element
 * that implements the source reference. Any preceding regions describe javadoc comments of that
 * java element.
 * </p>
 * @param reference a java element that is a source reference
 * @param ctx the folding context
 * @return the regions to be folded
 */
protected final IRegion[] computeProjectionRanges(ISourceReference reference,
        FoldingStructureComputationContext ctx) {
    try {
        ISourceRange range = reference.getSourceRange();
        if (!SourceRange.isAvailable(range))
            return new IRegion[0];

        String contents = reference.getSource();
        if (contents == null)
            return new IRegion[0];

        List<IRegion> regions = new ArrayList<IRegion>();
        if (!ctx.hasFirstType() && reference instanceof IType) {
            ctx.setFirstType((IType) reference);
            IRegion headerComment = computeHeaderComment(ctx);
            if (headerComment != null) {
                regions.add(headerComment);
                ctx.setHasHeaderComment();
            }
        }

        final int shift = range.getOffset();
        IScanner scanner = ctx.getScanner();
        scanner.resetTo(shift, shift + range.getLength());

        int start = shift;
        while (true) {

            int token = scanner.getNextToken();
            start = scanner.getCurrentTokenStartPosition();

            switch (token) {
            case ITerminalSymbols.TokenNameCOMMENT_JAVADOC:
            case ITerminalSymbols.TokenNameCOMMENT_BLOCK: {
                int end = scanner.getCurrentTokenEndPosition() + 1;
                regions.add(new Region(start, end - start));
                continue;
            }
            case ITerminalSymbols.TokenNameCOMMENT_LINE:
                continue;
            }

            break;
        }

        regions.add(new Region(start, shift + range.getLength() - start));

        return regions.toArray(new IRegion[regions.size()]);
    } catch (JavaModelException e) {
    } catch (InvalidInputException e) {
    }

    return new IRegion[0];
}

From source file:org.codehaus.groovy.eclipse.editor.GroovyEditor.java

License:Apache License

@Override
protected void setSelection(ISourceReference reference, boolean moveCursor) {
    super.setSelection(reference, moveCursor);
    // must override functionality because JavaEditor expects that there is a ';' at end of declaration
    try {/*from   w w  w .ja v  a  2s .c o  m*/
        if (reference instanceof IImportDeclaration && moveCursor) {
            int offset;
            int length;
            ISourceRange range = ((ISourceReference) reference).getSourceRange();
            String content = reference.getSource();
            if (content != null) {
                int start = Math.max(content.indexOf("import") + 6, 7); //$NON-NLS-1$
                while (start < content.length() && content.charAt(start) == ' ')
                    start++;

                int end = content.trim().length();
                do {
                    end--;
                } while (end >= 0 && (content.charAt(end) == ' ' || content.charAt(end) == ';'));

                offset = range.getOffset() + start;
                length = end - start + 1; // Note, original JDT code has 8 here

                // just in case...
                int docLength = ((IImportDeclaration) reference).getOpenable().getBuffer().getLength();
                if (docLength < offset + length) {
                    offset = docLength;
                }
            } else {
                // fallback
                offset = range.getOffset() + 1;
                length = range.getLength() - 2;
            }

            if (offset > -1 && length > 0) {

                try {
                    getSourceViewer().getTextWidget().setRedraw(false);
                    getSourceViewer().revealRange(offset, length);
                    getSourceViewer().setSelectedRange(offset, length);
                } finally {
                    getSourceViewer().getTextWidget().setRedraw(true);
                }

                markInNavigationHistory();
            }

        }
    } catch (JavaModelException e) {
        GroovyCore.logException("Error selecting import statement", e);
    }
}

From source file:org.eclipse.mylyn.java.ui.editor.AutoFoldingStructureProvider.java

License:Open Source License

/**
 * Computes the projection ranges for a given <code>IJavaElement</code>.
 * More than one range may be returned if the element has a leading comment
 * which gets folded separately. If there are no foldable regions,
 * <code>null</code> is returned.
 *
 * @param element the java element that can be folded
 * @return the regions to be folded, or <code>null</code> if there are
 *         none/*  www.  ja  v a2  s.  c  om*/
 */
private IRegion[] computeProjectionRanges(IJavaElement element) {

    try {
        if (element instanceof ISourceReference) {
            ISourceReference reference = (ISourceReference) element;
            ISourceRange range = reference.getSourceRange();

            String contents = reference.getSource();
            if (contents == null)
                return null;

            List regions = new ArrayList();
            if (fFirstType == null && element instanceof IType) {
                fFirstType = (IType) element;
                IRegion headerComment = computeHeaderComment(fFirstType);
                if (headerComment != null) {
                    regions.add(headerComment);
                    fHasHeaderComment = true;
                }
            }

            IScanner scanner = ToolFactory.createScanner(true, false, false, false);
            scanner.setSource(contents.toCharArray());
            final int shift = range.getOffset();
            int start = shift;
            while (true) {

                int token = scanner.getNextToken();
                start = shift + scanner.getCurrentTokenStartPosition();

                switch (token) {
                case ITerminalSymbols.TokenNameCOMMENT_JAVADOC:
                case ITerminalSymbols.TokenNameCOMMENT_BLOCK: {
                    int end = shift + scanner.getCurrentTokenEndPosition() + 1;
                    regions.add(new Region(start, end - start));
                }
                case ITerminalSymbols.TokenNameCOMMENT_LINE:
                    continue;
                }

                break;
            }

            regions.add(new Region(start, shift + range.getLength() - start));

            if (regions.size() > 0) {
                IRegion[] result = new IRegion[regions.size()];
                regions.toArray(result);
                return result;
            }
        }
    } catch (JavaModelException e) {
        MylarStatusHandler.log(e, "");
    } catch (InvalidInputException e) {
        MylarStatusHandler.log(e, "");
    }

    return null;
}

From source file:org.eclipse.objectteams.otdt.internal.ui.compare.BaseMethodCompareElement.java

License:Open Source License

private String getExtendedSource(IMethod method) throws JavaModelException {
    // get parent
    IJavaElement parent = method.getParent();
    if (parent instanceof ISourceReference) {
        ISourceReference sr = (ISourceReference) parent;
        String parentContent = sr.getSource();
        if (parentContent != null) {
            ISourceRange parentRange = sr.getSourceRange();
            ISourceRange childRange = method.getSourceRange();

            int start = childRange.getOffset() - parentRange.getOffset();
            int end = start + childRange.getLength();

            // search backwards for beginning of line
            while (start > 0) {
                char c = parentContent.charAt(start - 1);
                if (c == '\n' || c == '\r')
                    break;
                start--;/*  w  w w .j av a 2 s . c om*/
            }

            return parentContent.substring(start, end);
        }
    }

    return method.getSource();
}

From source file:org.eclipse.objectteams.otdt.tests.AbstractJavaModelTests.java

License:Open Source License

protected IJavaElement[] codeSelect(ISourceReference sourceReference, String selectAt, String selection)
        throws JavaModelException {
    String str = sourceReference.getSource();
    int start = str.indexOf(selectAt);
    int length = selection.length();
    return ((ICodeAssist) sourceReference).codeSelect(start, length);
}

From source file:org.eclipse.objectteams.otdt.tests.AbstractJavaModelTests.java

License:Open Source License

protected IJavaElement[] codeSelectAt(ISourceReference sourceReference, String selectAt)
        throws JavaModelException {
    String str = sourceReference.getSource();
    int start = str.indexOf(selectAt) + selectAt.length();
    int length = 0;
    return ((ICodeAssist) sourceReference).codeSelect(start, length);
}

From source file:test0501.JavaEditor.java

License:Open Source License

protected void setSelection(ISourceReference reference, boolean moveCursor) {

    ISelection selection = getSelectionProvider().getSelection();
    if (selection instanceof TextSelection) {
        TextSelection textSelection = (TextSelection) selection;
        // PR 39995: [navigation] Forward history cleared after going back in navigation history:
        // mark only in navigation history if the cursor is being moved (which it isn't if
        // this is called from a PostSelectionEvent that should only update the magnet)
        if (moveCursor && (textSelection.getOffset() != 0 || textSelection.getLength() != 0))
            markInNavigationHistory();/*from  w ww  .j a v a 2s  .  c  o  m*/
    }

    if (reference != null) {

        StyledText textWidget = null;

        ISourceViewer sourceViewer = getSourceViewer();
        if (sourceViewer != null)
            textWidget = sourceViewer.getTextWidget();

        if (textWidget == null)
            return;

        try {

            ISourceRange range = reference.getSourceRange();
            if (range == null)
                return;

            int offset = range.getOffset();
            int length = range.getLength();

            if (offset < 0 || length < 0)
                return;

            setHighlightRange(offset, length, moveCursor);

            if (!moveCursor)
                return;

            offset = -1;
            length = -1;

            if (reference instanceof IMember) {
                range = ((IMember) reference).getNameRange();
                if (range != null) {
                    offset = range.getOffset();
                    length = range.getLength();
                }
            } else if (reference instanceof IImportDeclaration) {
                String name = ((IImportDeclaration) reference).getElementName();
                if (name != null && name.length() > 0) {
                    String content = reference.getSource();
                    if (content != null) {
                        offset = range.getOffset() + content.indexOf(name);
                        length = name.length();
                    }
                }
            } else if (reference instanceof IPackageDeclaration) {
                String name = ((IPackageDeclaration) reference).getElementName();
                if (name != null && name.length() > 0) {
                    String content = reference.getSource();
                    if (content != null) {
                        offset = range.getOffset() + content.indexOf(name);
                        length = name.length();
                    }
                }
            }

            if (offset > -1 && length > 0) {

                try {
                    textWidget.setRedraw(false);
                    sourceViewer.revealRange(offset, length);
                    sourceViewer.setSelectedRange(offset, length);
                } finally {
                    textWidget.setRedraw(true);
                }

                markInNavigationHistory();
            }

        } catch (JavaModelException x) {
        } catch (IllegalArgumentException x) {
        }

    } else if (moveCursor) {
        resetHighlightRange();
        markInNavigationHistory();
    }
}