use of org.eclipse.wst.jsdt.core.IJavaScriptElement in project webtools.sourceediting by eclipse.
the class ShowInNavigatorAction method selectionChanged.
public void selectionChanged(IAction action, ISelection selection) {
setSelection(selection);
IJavaScriptElement[] elements = JsElementActionProxy.getJsElementsFromSelection(getCurrentSelection());
for (int i = 0; i < elements.length; i++) {
if (elements[i].isVirtual()) {
IResource resource = getHostResource(elements[i]);
if (resource == null || !resource.exists()) {
action.setEnabled(false);
}
}
}
}
use of org.eclipse.wst.jsdt.core.IJavaScriptElement in project webtools.sourceediting by eclipse.
the class JSDTHoverProcessor method getHoverInfo.
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.ITextHover#getHoverInfo(org.eclipse.jface.text.ITextViewer,
* org.eclipse.jface.text.IRegion)
*/
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
// get JSP translation object for this viewer's document
IDOMModel xmlModel = null;
try {
xmlModel = (IDOMModel) StructuredModelManager.getModelManager().getExistingModelForRead(textViewer.getDocument());
if (xmlModel != null) {
IDOMDocument xmlDoc = xmlModel.getDocument();
JsTranslationAdapter adapter = (JsTranslationAdapter) xmlDoc.getAdapterFor(IJsTranslation.class);
if (adapter != null) {
try {
boolean proceed = false;
ITypedRegion[] partitions = xmlDoc.getStructuredDocument().computePartitioning(hoverRegion.getOffset(), hoverRegion.getLength());
for (int i = 0; i < partitions.length; i++) {
for (int j = 0; j < PARTITION_TYPES.length; j++) {
if (PARTITION_TYPES[j].equals(partitions[i].getType())) {
proceed = true;
break;
}
}
}
if (proceed) {
IJsTranslation translation = adapter.getJsTranslation(true);
IJavaScriptElement[] result = translation.getElementsFromJsRange(translation.getJavaScriptOffset(hoverRegion.getOffset()), translation.getJavaScriptOffset(hoverRegion.getOffset() + hoverRegion.getLength()));
return translation.fixupMangledName(getHoverInfo(result));
}
} catch (BadLocationException e) {
// do nothing
}
}
}
} finally {
if (xmlModel != null) {
xmlModel.releaseFromRead();
}
}
return null;
}
use of org.eclipse.wst.jsdt.core.IJavaScriptElement in project webtools.sourceediting by eclipse.
the class JFaceNodeAdapterForJs method getJSElementsFromNode.
private synchronized Object[] getJSElementsFromNode(Node node) {
if (node == null) {
return new Object[0];
}
int startOffset = 0;
int endOffset = 0;
IJavaScriptElement[] result = new IJavaScriptElement[0];
IJsTranslation translation = null;
if (node.getNodeType() == Node.TEXT_NODE && (node instanceof NodeImpl)) {
translation = getTranslation(node);
startOffset = translation.getJavaScriptOffset(((NodeImpl) node).getStartOffset());
endOffset = translation.getJavaScriptOffset(((NodeImpl) node).getEndOffset() - 1);
if (startOffset >= 0 && endOffset >= 0)
result = translation.getAllElementsInJsRange(startOffset, endOffset);
}
return result;
//
// if (result == null) return null;
// Object[] newResults = new Object[result.length];
// for (int i = 0; i < result.length; i++) {
// int htmllength = 0;
// int htmloffset = 0;
// Position position = null;
// try {
// htmllength = ((SourceRefElement) (result[i])).getSourceRange().getLength();
// htmloffset = translation.getJspOffset(((SourceRefElement)
// (result[i])).getSourceRange().getOffset());
// position = new Position(htmloffset, htmllength);
// } catch (JavaScriptModelException e) {
// e.printStackTrace();
// }
// newResults[i] = getJsNode(node.getParentNode(), (IJavaScriptElement) result[i],
// position);
// }
// return newResults;
}
use of org.eclipse.wst.jsdt.core.IJavaScriptElement in project webtools.sourceediting by eclipse.
the class JSDTHyperlinkDetector method detectHyperlinks.
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.text.hyperlink.IHyperlinkDetector#detectHyperlinks(org.eclipse.jface.text.ITextViewer,
* org.eclipse.jface.text.IRegion, boolean)
*/
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
List hyperlinks = new ArrayList(0);
if (region != null && textViewer != null) {
IDocument document = textViewer.getDocument();
try {
boolean proceed = false;
ITypedRegion[] partitions = document.computePartitioning(region.getOffset(), region.getLength());
for (int i = 0; i < partitions.length; i++) {
for (int j = 0; j < PARTITION_TYPES.length; j++) {
if (PARTITION_TYPES[j].equals(partitions[i].getType())) {
proceed = true;
}
}
}
if (proceed) {
IJsTranslation jsTranslation = getJsTranslation(document);
if (jsTranslation != null) {
// find hyperlink range for JavaScript elements
IRegion hyperlinkRegion = selectWord(document, region.getOffset());
IJavaScriptElement[] elements = jsTranslation.getElementsFromJsRange(jsTranslation.getJavaScriptOffset(region.getOffset()), jsTranslation.getJavaScriptOffset(region.getOffset() + region.getLength()));
if (elements != null && elements.length > 0) {
// create a hyperlink for each JavaScript element
for (int i = 0; i < elements.length; ++i) {
IJavaScriptElement element = elements[i];
IHyperlink link = createHyperlink(jsTranslation, element, hyperlinkRegion, document);
if (link != null) {
hyperlinks.add(link);
}
}
}
}
}
} catch (BadLocationException e) {
}
}
if (hyperlinks.size() == 0) {
return null;
}
return (IHyperlink[]) hyperlinks.toArray(new IHyperlink[0]);
}
use of org.eclipse.wst.jsdt.core.IJavaScriptElement in project webtools.sourceediting by eclipse.
the class JFaceNodeAdapterForJs method getChildren.
public Object[] getChildren(Object object) {
if (object instanceof IJavaScriptElement) {
return getJavaElementProvider().getChildren(object);
}
if (object instanceof IJavaWebNode) {
JavaElement enclosedElement = (JavaElement) ((IJavaWebNode) object).getJavaElement();
if (enclosedElement != null) {
try {
IJavaScriptElement[] children = enclosedElement.getChildren();
if (children == null) {
return new IJavaScriptElement[0];
}
Object[] nodes = new Object[children.length];
Node parent = ((IJavaWebNode) object).getParentNode();
for (int i = 0; i < children.length; i++) {
// int htmllength = ((SourceRefElement) (children[i])).getSourceRange().getLength();
// int htmloffset = ((SourceRefElement) (children[i])).getSourceRange().getOffset();
IJavaScriptElement javaElement = children[i];
ISourceRange range = null;
if (javaElement instanceof Member) {
range = ((IMember) javaElement).getNameRange();
} else {
range = ((ISourceReference) javaElement).getSourceRange();
}
int htmllength = range.getLength();
int htmloffset = range.getOffset();
Position position = new Position(htmloffset, htmllength);
nodes[i] = getJsNode(parent, javaElement, position);
}
return nodes;
} catch (JavaScriptModelException ex) {
}
}
}
Node node = (Node) object;
if (isJSElementParent(node)) {
Object[] results = getJSElementsFromNode(node.getFirstChild(), true);
return filter(results);
}
return super.getChildren(object);
}
Aggregations