List of usage examples for org.eclipse.jdt.core ISourceRange getOffset
int getOffset();
From source file:at.bestsolution.fxide.jdt.editor.JDTJavaDocSupport.java
License:Open Source License
private static HtmlString getMemberJavaDoc(IMember member) throws JavaModelException { IBuffer buf = member.getOpenable().getBuffer(); if (buf != null) { ISourceRange javadocRange = member.getJavadocRange(); if (javadocRange != null) { String rawJavadoc = buf.getText(javadocRange.getOffset(), javadocRange.getLength()); return JDTJavaDocSupport.toHtml(member, rawJavadoc); }/*from ww w. ja v a2 s .co m*/ } return null; }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess.java
License:Open Source License
/** * Gets a reader for an IMember's Javadoc comment content from the source attachment. * The content does contain only the text from the comment without the Javadoc leading star characters. * Returns <code>null</code> if the member does not contain a Javadoc comment or if no source is available. * @param member The member to get the Javadoc of. * @return Returns a reader for the Javadoc comment content or <code>null</code> if the member * does not contain a Javadoc comment or if no source is available * @throws JavaModelException is thrown when the elements javadoc can not be accessed * @since 3.4//from w ww .j ava 2s. co m */ private static Reader internalGetContentReader(IMember member) throws JavaModelException { IBuffer buf = member.getOpenable().getBuffer(); if (buf == null) { return null; // no source attachment found } ISourceRange javadocRange = member.getJavadocRange(); if (javadocRange != null) { JavaDocCommentReader reader = new JavaDocCommentReader(buf, javadocRange.getOffset(), javadocRange.getOffset() + javadocRange.getLength() - 1); if (!containsOnlyInheritDoc(reader, javadocRange.getLength())) { reader.reset(); return reader; } } return null; }
From source file:at.bestsolution.fxide.jdt.text.javadoc.JavadocContentAccess2.java
License:Open Source License
private static String getHTMLContentFromSource(IJavaElement element) throws JavaModelException { IMember member;// w w w. j a va 2s . c om if (element instanceof ILocalVariable) { member = ((ILocalVariable) element).getDeclaringMember(); } else if (element instanceof ITypeParameter) { member = ((ITypeParameter) element).getDeclaringMember(); } else if (element instanceof IMember) { member = (IMember) element; } else { return null; } IBuffer buf = member.getOpenable().getBuffer(); if (buf == null) { return null; // no source attachment found } ISourceRange javadocRange = member.getJavadocRange(); if (javadocRange == null) { if (canInheritJavadoc(member)) { // Try to use the inheritDoc algorithm. String inheritedJavadoc = javadoc2HTML(member, element, "/***/"); //$NON-NLS-1$ if (inheritedJavadoc != null && inheritedJavadoc.length() > 0) { return inheritedJavadoc; } } return getJavaFxPropertyDoc(member); } String rawJavadoc = buf.getText(javadocRange.getOffset(), javadocRange.getLength()); return javadoc2HTML(member, element, rawJavadoc); }
From source file:at.bestsolution.fxide.jdt.text.viewersupport.JavaElementLabelComposer.java
License:Open Source License
/** * Appends the label for a type. Considers the T_* flags. * * @param type the element to render//from www .j a va 2 s. c om * @param flags the rendering flags. Flags with names starting with 'T_' are considered. */ public void appendTypeLabel(IType type, long flags) { if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED)) { IPackageFragment pack = type.getPackageFragment(); if (!pack.isDefaultPackage()) { appendPackageFragmentLabel(pack, (flags & QUALIFIER_FLAGS)); fBuffer.append('.'); } } IJavaElement parent = type.getParent(); if (getFlag(flags, JavaElementLabels.T_FULLY_QUALIFIED | JavaElementLabels.T_CONTAINER_QUALIFIED)) { IType declaringType = type.getDeclaringType(); if (declaringType != null) { appendTypeLabel(declaringType, JavaElementLabels.T_CONTAINER_QUALIFIED | (flags & QUALIFIER_FLAGS)); fBuffer.append('.'); } int parentType = parent.getElementType(); if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) { // anonymous or local appendElementLabel(parent, 0); fBuffer.append('.'); } } String typeName; boolean isAnonymous = false; if (type.isLambda()) { typeName = "() -> {...}"; //$NON-NLS-1$ try { String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures(); if (superInterfaceSignatures.length > 0) { typeName = typeName + ' ' + getSimpleTypeName(type, superInterfaceSignatures[0]); } } catch (JavaModelException e) { //ignore } } else { typeName = getElementName(type); try { isAnonymous = type.isAnonymous(); } catch (JavaModelException e1) { // should not happen, but let's play safe: isAnonymous = typeName.length() == 0; } if (isAnonymous) { try { if (parent instanceof IField && type.isEnum()) { typeName = '{' + JavaElementLabels.ELLIPSIS_STRING + '}'; } else { String supertypeName = null; String[] superInterfaceSignatures = type.getSuperInterfaceTypeSignatures(); if (superInterfaceSignatures.length > 0) { supertypeName = getSimpleTypeName(type, superInterfaceSignatures[0]); } else { String supertypeSignature = type.getSuperclassTypeSignature(); if (supertypeSignature != null) { supertypeName = getSimpleTypeName(type, supertypeSignature); } } if (supertypeName == null) { typeName = JavaUIMessages.JavaElementLabels_anonym; } else { typeName = Messages.format(JavaUIMessages.JavaElementLabels_anonym_type, supertypeName); } } } catch (JavaModelException e) { //ignore typeName = JavaUIMessages.JavaElementLabels_anonym; } } } fBuffer.append(typeName); if (getFlag(flags, JavaElementLabels.T_TYPE_PARAMETERS)) { if (getFlag(flags, JavaElementLabels.USE_RESOLVED) && type.isResolved()) { BindingKey key = new BindingKey(type.getKey()); if (key.isParameterizedType()) { String[] typeArguments = key.getTypeArguments(); appendTypeArgumentSignaturesLabel(type, typeArguments, flags); } else { String[] typeParameters = Signature.getTypeParameters(key.toSignature()); appendTypeParameterSignaturesLabel(typeParameters, flags); } } else if (type.exists()) { try { appendTypeParametersLabels(type.getTypeParameters(), flags); } catch (JavaModelException e) { // ignore } } } // category if (getFlag(flags, JavaElementLabels.T_CATEGORY) && type.exists()) { try { appendCategoryLabel(type, flags); } catch (JavaModelException e) { // ignore } } // post qualification if (getFlag(flags, JavaElementLabels.T_POST_QUALIFIED)) { int offset = fBuffer.length(); fBuffer.append(JavaElementLabels.CONCAT_STRING); IType declaringType = type.getDeclaringType(); if (declaringType == null && type.isBinary() && isAnonymous) { // workaround for Bug 87165: [model] IType#getDeclaringType() does not work for anonymous binary type String tqn = type.getTypeQualifiedName(); int lastDollar = tqn.lastIndexOf('$'); if (lastDollar != 1) { String declaringTypeCF = tqn.substring(0, lastDollar) + ".class"; //$NON-NLS-1$ declaringType = type.getPackageFragment().getClassFile(declaringTypeCF).getType(); try { ISourceRange typeSourceRange = type.getSourceRange(); if (declaringType.exists() && SourceRange.isAvailable(typeSourceRange)) { IJavaElement realParent = declaringType.getTypeRoot() .getElementAt(typeSourceRange.getOffset() - 1); if (realParent != null) { parent = realParent; } } } catch (JavaModelException e) { // ignore } } } if (declaringType != null) { appendTypeLabel(declaringType, JavaElementLabels.T_FULLY_QUALIFIED | (flags & QUALIFIER_FLAGS)); int parentType = parent.getElementType(); if (parentType == IJavaElement.METHOD || parentType == IJavaElement.FIELD || parentType == IJavaElement.INITIALIZER) { // anonymous or local fBuffer.append('.'); appendElementLabel(parent, 0); } } else { appendPackageFragmentLabel(type.getPackageFragment(), flags & QUALIFIER_FLAGS); } // if (getFlag(flags, JavaElementLabels.COLORIZE)) { // fBuffer.setStyle(offset, fBuffer.length() - offset, QUALIFIER_STYLE); // } } }
From source file:ca.uvic.chisel.diver.sequencediagrams.sc.java.model.ASTUTils.java
License:Open Source License
public static MethodDeclaration findMethodDeclaration(ASTNode rootNode, IMethod method) { if (rootNode != null) { ISourceRange range; try {/*from ww w.j a va2 s .c o m*/ range = method.getSourceRange(); NodeFinder finder = new NodeFinder(range.getOffset(), range.getLength()); rootNode.accept(finder); return (MethodDeclaration) finder.getCoveredNode(); } catch (JavaModelException e) { } } return null; }
From source file:ca.uvic.chisel.diver.sequencediagrams.sc.java.model.NodeFinder.java
License:Open Source License
public static ASTNode perform(ASTNode root, ISourceRange range) { return perform(root, range.getOffset(), range.getLength()); }
From source file:ca.uvic.chisel.javasketch.internal.ast.ASTUTils.java
License:Open Source License
public static MethodDeclaration findMethodDeclaration(ASTNode rootNode, IMethod method) { if (rootNode != null) { ISourceRange range; try {/* ww w.j a v a2s. c o m*/ if (!method.getOpenable().isOpen()) { method.getOpenable().open(new NullProgressMonitor()); } range = method.getSourceRange(); NodeFinder finder = new NodeFinder(rootNode, range.getOffset(), range.getLength()); ASTNode node = finder.getCoveredNode(); if (node instanceof MethodDeclaration) { return (MethodDeclaration) node; } else { return null; } } catch (JavaModelException e) { SketchPlugin.getDefault().log(e); } } return null; }
From source file:ca.uvic.chisel.javasketch.internal.ast.NodeFinder.java
License:Open Source License
/** * Maps a selection to a given ASTNode, where the selection is defined using a source range. * It calls <code>perform(root, range.getOffset(), range.getLength())</code>. * // w w w . ja v a2s .c o m * @return the result node * @see #perform(ASTNode, int, int) */ public static ASTNode perform(ASTNode root, ISourceRange range) { return perform(root, range.getOffset(), range.getLength()); }
From source file:ca.uvic.cs.tagsea.extraction.TagExtractor.java
License:Open Source License
/** * Gets the tag regions associated with this document, restricted to the given source referece, if no tag regions * are found an empty array is returned//from w w w . ja va 2 s. c o m * @param document * @param source reference * @return Array of tag regions */ public static IRegion[] getTagRegions(IDocument document, ISourceReference reference) { ISourceRange range; try { range = reference.getSourceRange(); } catch (JavaModelException e) { TagSEAPlugin.log("", e); return new IRegion[0]; } if (range.getOffset() < 0 || range.getOffset() + range.getLength() > document.getLength()) return new IRegion[0]; return getTagRegions(document, range.getOffset(), range.getLength()); }
From source file:ch.mlutz.plugins.t4e.tapestry.editor.OgnlHyperlinkDetector.java
License:Open Source License
@Override public IHyperlink[] detectHyperlinks(ITextViewer viewer, IRegion region, boolean canHandleMultipleLinks) { IDocument document = viewer.getDocument(); String contentBefore;/*from w w w. java 2s . co m*/ ITypedRegion partition; try { partition = document.getPartition(region.getOffset()); if (!partition.getType().equals(TapestryPartitionScanner.XML_TAG)) { return null; } contentBefore = document.get(partition.getOffset(), partition.getLength()); } catch (BadLocationException e) { log.warn("Could not detect hyperlinks: ", e); return null; } List<IHyperlink> result = new ArrayList<IHyperlink>(); // go back until whitespace is found and int charIndex = region.getOffset() - partition.getOffset(); while (charIndex >= 0 && contentBefore.charAt(charIndex) != '"') { charIndex--; } // charIndex might be -1, but that's ok String prefix = contentBefore.substring(charIndex + 1); final String expectedPrefix = "ognl:"; if (!prefix.startsWith(expectedPrefix)) { return null; } int ognlExpressionStart = charIndex + 1 + expectedPrefix.length(); charIndex = region.getOffset() - partition.getOffset(); while (charIndex < contentBefore.length() && contentBefore.charAt(charIndex) != '"' && contentBefore.charAt(charIndex) != '.') { charIndex++; } final int hyperLinkOffset = partition.getOffset() + ognlExpressionStart; final int hyperLinkLength = partition.getOffset() + charIndex - hyperLinkOffset; if (hyperLinkLength < 0) { // caret might rest on the first quote log.warn( "OGNL hyperLinkLength: " + hyperLinkLength + "; partition.getOffset(): " + partition.getOffset() + "; charIndex: " + charIndex + "; hyperLinkOffset: " + hyperLinkOffset); return null; } final String hyperlinkText = contentBefore.substring(ognlExpressionStart, ognlExpressionStart + hyperLinkLength); TapestryIndex tapestryIndex = Activator.getDefault().getTapestryIndex(); IFile documentFile = tapestryIndex.getDocumentToFileMapping(document); if (documentFile == null) { return null; } ICompilationUnit javaCompilationUnit = tapestryIndex.getRelatedCompilationUnit(documentFile); if (javaCompilationUnit == null) { return null; } /* TapestryModule module= tapestryIndex.getModuleForResource(documentFile); TapestryHtmlElement linkedComponent= null; for (TapestryHtmlElement component: module.getComponents()) { if (hyperlinkText.equals(component.getPath())) { linkedComponent= component; } } final TapestryHtmlElement finalLinkedComponent= linkedComponent; */ IType[] types = new IType[0]; try { types = javaCompilationUnit.getTypes(); } catch (JavaModelException e) { log.warn("Could not get types of compilation unit " + javaCompilationUnit.getElementName(), e); } IMethod methodMatch = null; outer: for (IType type : types) { try { if (type.isClass() && Flags.isPublic(type.getFlags())) { IMethod[] methods = type.getMethods(); for (IMethod method : methods) { String ognlMethodName = method.getElementName() + "()"; if (ognlMethodName.equals(hyperlinkText)) { methodMatch = method; break outer; } ognlMethodName = ognlMethodName.replaceAll("^(?:get|is)(.+)\\(\\)$", "$1"); // TODO: check this match! if (ognlMethodName.equalsIgnoreCase(hyperlinkText)) { methodMatch = method; break outer; } } } } catch (JavaModelException e) { log.warn("Could not get information for type " + type.getElementName(), e); } } IFile javaFile = null; try { javaFile = (IFile) javaCompilationUnit.getCorrespondingResource().getAdapter(IFile.class); } catch (JavaModelException e) { log.warn("Could not get corresponding resource for " + javaCompilationUnit.getElementName(), e); } final IFile finalJavaFile = javaFile; ISourceRange sourceRange = null; if (methodMatch != null) { try { sourceRange = methodMatch.getSourceRange(); } catch (JavaModelException e) { log.warn("Could not get source range for method " + methodMatch.getElementName(), e); } } final ISourceRange finalSourceRange = sourceRange; if (finalJavaFile != null) { result.add(new IHyperlink() { @Override public void open() { IWorkbench wb = PlatformUI.getWorkbench(); IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); IWorkbenchPage page = win.getActivePage(); IEditorPart editorPart = EclipseTools.openFileInEditor(finalJavaFile, page); if (!(editorPart instanceof ITextEditor)) { log.info("editorPart !instanceof ITextEditor"); } if (finalSourceRange == null) { log.info("finalSourceRange == null"); } if (editorPart instanceof ITextEditor && finalSourceRange != null) { log.info("Opening source range: " + finalSourceRange); ((ITextEditor) editorPart).selectAndReveal(finalSourceRange.getOffset(), finalSourceRange.getLength()); } } @Override public String getTypeLabel() { return null; } @Override public String getHyperlinkText() { return "Open method"; } @Override public IRegion getHyperlinkRegion() { return new Region(hyperLinkOffset, hyperLinkLength); } }); } /* log.info("detectHyperlinks called: " + hyperLinkOffset + " / " + hyperLinkLength + ", size: " + result.size()); */ if (result.size() > 0) { return result.toArray(new IHyperlink[result.size()]); } else { return null; } }