Author: dazarov
Date: 2011-07-15 15:51:02 -0400 (Fri, 15 Jul 2011)
New Revision: 32952
Modified:
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.java
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.properties
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlink.java
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java
Log:
https://issues.jboss.org/browse/JBIDE-9307
Modified:
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.java 2011-07-15
19:49:41 UTC (rev 32951)
+++
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.java 2011-07-15
19:51:02 UTC (rev 32952)
@@ -60,5 +60,6 @@
public static String Id;
public static String BrowseForBeanId;
public static String BeanId;
+ public static String OpenJsf2CCAttribute;
}
Modified:
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.properties
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.properties 2011-07-15
19:49:41 UTC (rev 32951)
+++
trunk/common/plugins/org.jboss.tools.common.text.ext/src/org/jboss/tools/common/text/ext/hyperlink/xpl/Messages.properties 2011-07-15
19:51:02 UTC (rev 32952)
@@ -47,3 +47,4 @@
Id=ID
BrowseForBeanId=Browse for Bean ID ''{0}''
BeanId=Bean ID
+OpenJsf2CCAttribute=Open a Custom Component Attribute definition
Modified:
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlink.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlink.java 2011-07-15
19:49:41 UTC (rev 32951)
+++
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlink.java 2011-07-15
19:51:02 UTC (rev 32952)
@@ -23,6 +23,7 @@
import org.eclipse.jdt.ui.JavaUI;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.Region;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PartInitException;
import org.jboss.tools.common.el.core.ELReference;
@@ -30,11 +31,14 @@
import org.jboss.tools.common.el.core.resolver.JavaMemberELSegment;
import org.jboss.tools.common.el.core.resolver.MessagePropertyELSegment;
import org.jboss.tools.common.model.XModel;
+import org.jboss.tools.common.model.XModelObject;
import org.jboss.tools.common.model.project.IPromptingProvider;
import org.jboss.tools.common.model.project.PromptingProviderFactory;
+import org.jboss.tools.common.model.util.PositionHolder;
import org.jboss.tools.common.text.ext.hyperlink.AbstractHyperlink;
import org.jboss.tools.common.text.ext.hyperlink.xpl.Messages;
import org.jboss.tools.common.text.ext.util.StructuredModelWrapper;
+import org.jboss.tools.common.text.ext.util.StructuredSelectionHelper;
import org.jboss.tools.common.text.ext.util.Utils;
import org.jboss.tools.jst.text.ext.JSTExtensionsPlugin;
import org.jboss.tools.jst.web.project.list.WebPromptingProvider;
@@ -50,10 +54,12 @@
private ELReference reference;
private ELSegment segment;
+ private XModelObject xObject;
- public ELHyperlink(IDocument document, ELReference reference, ELSegment segment){
+ public ELHyperlink(IDocument document, ELReference reference, ELSegment segment,
XModelObject xObject){
this.reference = reference;
this.segment = segment;
+ this.xObject = xObject;
setDocument(document);
}
@@ -74,14 +80,15 @@
protected void doHyperlink(IRegion region) {
if(segment instanceof JavaMemberELSegment){
try {
- IEditorPart part = JavaUI.openInEditor(((JavaMemberELSegment)
segment).getJavaElement());
- if(part == null)
+ if(JavaUI.openInEditor(((JavaMemberELSegment) segment).getJavaElement()) == null){
openFileFailed();
+ }
} catch (PartInitException e) {
JSTExtensionsPlugin.getDefault().logError(e);
} catch (JavaModelException e) {
JSTExtensionsPlugin.getDefault().logError(e);
}
+ return;
}else if(segment instanceof MessagePropertyELSegment){
IFile file = ((MessagePropertyELSegment)segment).getMessageBundleResource();
if(file == null)
@@ -97,6 +104,7 @@
String locale = getPageLocale(region);
Properties p = new Properties();
+
if (bundleBasename != null) {
p.put(WebPromptingProvider.BUNDLE, bundleBasename);
}
@@ -122,9 +130,26 @@
if ( error != null && error.length() > 0) {
openFileFailed();
}
- } else {
+ return;
+ }else if(xObject != null){
+ IRegion attrRegion = null;
+ PositionHolder h = PositionHolder.getPosition(xObject, null);
+ h.update();
+ if (h.getStart() == -1 || h.getEnd() == -1) {
openFileFailed();
+ return;
+ }
+ attrRegion = new Region(h.getStart(), h.getEnd() - h.getStart());
+ IFile file = (IFile)xObject.getAdapter(IFile.class);
+ if (file != null) {
+ if (openFileInEditor(file) != null) {
+ StructuredSelectionHelper.setSelectionAndRevealInActiveEditor(attrRegion);
+ return;
+ }
+ }
}
+
+ openFileFailed();
}
private String getPageLocale(IRegion region) {
@@ -209,7 +234,10 @@
return MessageFormat.format(Messages.Open, baseName);
return MessageFormat.format(Messages.OpenBundleProperty, propertyName, baseName);
+ }else if(xObject != null){
+ return Messages.OpenJsf2CCAttribute;
}
+
return ""; //$NON-NLS-1$
}
Modified:
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java 2011-07-15
19:49:41 UTC (rev 32951)
+++
trunk/jst/plugins/org.jboss.tools.jst.text.ext/src/org/jboss/tools/jst/text/ext/hyperlink/ELHyperlinkDetector.java 2011-07-15
19:51:02 UTC (rev 32952)
@@ -13,6 +13,7 @@
import java.util.List;
import org.eclipse.core.resources.IFile;
+import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
@@ -28,6 +29,10 @@
import org.jboss.tools.common.el.core.resolver.ELResolution;
import org.jboss.tools.common.el.core.resolver.ELResolver;
import org.jboss.tools.common.el.core.resolver.ELSegment;
+import org.jboss.tools.common.el.core.resolver.JavaMemberELSegment;
+import org.jboss.tools.common.el.core.resolver.MessagePropertyELSegment;
+import org.jboss.tools.common.model.XModelObject;
+import org.jboss.tools.common.model.util.EclipseResourceUtil;
import org.jboss.tools.jst.web.kb.PageContextFactory;
public class ELHyperlinkDetector extends AbstractHyperlinkDetector{
@@ -53,8 +58,27 @@
if(resolution != null){
ELSegment segment =
resolution.findSegmentByOffset(region.getOffset()-reference.getStartPosition());
- if(segment != null && segment.isResolved())
- return new IHyperlink[]{new ELHyperlink(textViewer.getDocument(), reference,
segment)};
+ if(segment != null && segment.isResolved()){
+ if(segment instanceof JavaMemberELSegment || segment instanceof
MessagePropertyELSegment){
+ return new IHyperlink[]{new ELHyperlink(textViewer.getDocument(), reference,
segment, null)};
+ }else{
+ StringBuffer sbBuffer = new StringBuffer();
+ for (ELSegment s : resolution.getSegments()) {
+ sbBuffer.append(s.getToken().getText());
+ if (s == segment) {
+ break;
+ }
+ sbBuffer.append('.'); // Use default separator for ELs here
+ }
+
+ String text = sbBuffer.toString();
+ XModelObject xObject = findJSF2CCAttributeXModelObject(text, file);
+ if (xObject != null) {
+ return new IHyperlink[]{new ELHyperlink(textViewer.getDocument(), reference,
segment, xObject)};
+ }
+ }
+
+ }
}
}
@@ -94,4 +118,30 @@
}
return null;
}
+
+ static String[] vs = {"cc.attrs", "compositeComponent.attrs"};
//$NON-NLS-1$ //$NON-NLS-2$
+
+ public static XModelObject findJSF2CCAttributeXModelObject(String varName, IFile file)
{
+ XModelObject xModelObject = EclipseResourceUtil.createObjectForResource(file);
+ if(xModelObject == null) return null;
+ if(!"FileJSF2Component".equals(xModelObject.getModelEntity().getName()))
return null;
+
+ IJavaProject javaProject = EclipseResourceUtil.getJavaProject(file.getProject());
+ XModelObject is = xModelObject.getChildByPath("Interface");
+ if(is != null && javaProject != null) {
+ for (int i = 0; i < vs.length; i++) {
+ if (vs[i].equals(varName)) return is;
+ }
+ XModelObject[] cs = is.getChildren("JSF2ComponentAttribute");
+
+ for (int i = 0; i < cs.length; i++) {
+ String name = cs[i].getAttributeValue("name");
+ String[] names = {vs[0] + "." + name, vs[1] + "." + name};
+ for (String n: names) {
+ if (n.equals(varName)) return cs[i];
+ }
+ }
+ }
+ return null;
+ }
}