List of usage examples for org.eclipse.jdt.core ISourceReference getSource
String getSource() throws JavaModelException;
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(); } }