diff options
author | Tom Schindl | 2013-06-05 17:01:08 +0000 |
---|---|---|
committer | Tom Schindl | 2013-06-05 17:01:08 +0000 |
commit | 0c2583e19093184c2275cbe1d2018b1f9989546c (patch) | |
tree | b2c559be3ddbc19503efdc832e9dae9e8175eb31 /bundles | |
parent | 143ccfc71ecea5d5f6723ef4200c619422fc114e (diff) | |
download | org.eclipse.efxclipse-0c2583e19093184c2275cbe1d2018b1f9989546c.tar.gz org.eclipse.efxclipse-0c2583e19093184c2275cbe1d2018b1f9989546c.tar.xz org.eclipse.efxclipse-0c2583e19093184c2275cbe1d2018b1f9989546c.zip |
NEW - bug 409979: [FXML] no completion proposal shown for fx:id values
Diffstat (limited to 'bundles')
3 files changed, 74 insertions, 1 deletions
diff --git a/bundles/tooling/org.eclipse.fx.ide.fxml/src/org/eclipse/fx/ide/fxml/editors/FXMLCompletionProposalComputer.java b/bundles/tooling/org.eclipse.fx.ide.fxml/src/org/eclipse/fx/ide/fxml/editors/FXMLCompletionProposalComputer.java index 0340c7a46..af2cb3771 100755 --- a/bundles/tooling/org.eclipse.fx.ide.fxml/src/org/eclipse/fx/ide/fxml/editors/FXMLCompletionProposalComputer.java +++ b/bundles/tooling/org.eclipse.fx.ide.fxml/src/org/eclipse/fx/ide/fxml/editors/FXMLCompletionProposalComputer.java @@ -13,6 +13,7 @@ package org.eclipse.fx.ide.fxml.editors; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
+import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;
@@ -67,12 +68,12 @@ import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-
import org.eclipse.fx.ide.model.FXPlugin;
import org.eclipse.fx.ide.model.IFXClass;
import org.eclipse.fx.ide.model.IFXCollectionProperty;
import org.eclipse.fx.ide.model.IFXCtrlClass;
import org.eclipse.fx.ide.model.IFXCtrlEventMethod;
+import org.eclipse.fx.ide.model.IFXCtrlField;
import org.eclipse.fx.ide.model.IFXEnumProperty;
import org.eclipse.fx.ide.model.IFXEventHandlerProperty;
import org.eclipse.fx.ide.model.IFXObjectProperty;
@@ -837,6 +838,53 @@ public class FXMLCompletionProposalComputer extends AbstractXMLCompletionProposa e.printStackTrace();
}
+ } else if("id".equals(attribute.getLocalName())) {
+ Document d = contentAssistRequest.getNode().getOwnerDocument();
+ Element e = d.getDocumentElement();
+ Attr a = e.getAttributeNodeNS("http://javafx.com/fxml", "controller");
+ if (a != null) {
+ IType t = Util.findType(a.getValue(), d);
+ if (t != null) {
+ IFXCtrlClass ctrlClass = FXPlugin.getClassmodel().findCtrlClass(t.getJavaProject(), t);
+ if (ctrlClass != null) {
+ IType fromType = findType(n.getNodeName(), contentAssistRequest, context);
+ if( fromType != null ) {
+ for( Entry<String,IFXCtrlField> ef : ctrlClass.getAllFields().entrySet() ) {
+ IFXCtrlField f = ef.getValue();
+ if( org.eclipse.fx.ide.model.Util.assignable(fromType, f.getType()) ) {
+ StyledString s = new StyledString(f.getName());
+ s.append(" - " + ctrlClass.getSimpleName(), StyledString.QUALIFIER_STYLER);
+ Image img;
+ switch (f.getVisibility()) {
+ case PUBLIC:
+ img = IconKeys.getIcon(IconKeys.METHOD_PUBLIC_KEY);
+ break;
+ case PACKAGE:
+ img = IconKeys.getIcon(IconKeys.METHOD_DEFAULT_KEY);
+ break;
+ case PROTECTED:
+ img = IconKeys.getIcon(IconKeys.METHOD_PROTECTED_KEY);
+ break;
+ default:
+ img = IconKeys.getIcon(IconKeys.METHOD_PRIVATE_KEY);
+ break;
+ }
+
+ FXMLCompletionProposal cp = createProposal(
+ contentAssistRequest,
+ context,
+ "\""+f.getName(),
+ s, img, CLASS_ATTRIBUTE_MATCHER);
+
+ if( cp != null ) {
+ contentAssistRequest.addProposal(cp);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
}
} else if (attribute.getNodeName().contains(".")) {
String[] parts = attribute.getNodeName().split("\\.");
diff --git a/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/IFXCtrlField.java b/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/IFXCtrlField.java index 196fb3bd6..dc6ba70b7 100755 --- a/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/IFXCtrlField.java +++ b/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/IFXCtrlField.java @@ -17,4 +17,5 @@ public interface IFXCtrlField { public IJavaElement getJavaElement();
public String getName();
public IType getType();
+ public Visibility getVisibility();
}
diff --git a/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/internal/FXCtrlField.java b/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/internal/FXCtrlField.java index 08376e1b9..8c9a66b1a 100755 --- a/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/internal/FXCtrlField.java +++ b/bundles/tooling/org.eclipse.fx.ide.model/src/org/eclipse/fx/ide/model/internal/FXCtrlField.java @@ -10,11 +10,15 @@ *******************************************************************************/ package org.eclipse.fx.ide.model.internal; +import org.eclipse.fx.ide.model.FXPlugin; import org.eclipse.fx.ide.model.IFXCtrlField; +import org.eclipse.fx.ide.model.Visibility; +import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaModelException; +import org.osgi.service.log.LogService; public class FXCtrlField implements IFXCtrlField { @@ -47,4 +51,24 @@ public class FXCtrlField implements IFXCtrlField { } return null; } + + public Visibility getVisibility() { + try { + int flags = field.getFlags(); + + if( Flags.isPublic(flags) ) { + return Visibility.PUBLIC; + } else if( Flags.isPackageDefault(flags) ) { + return Visibility.PACKAGE; + } else if( Flags.isProtected(flags) ) { + return Visibility.PROTECTED; + } else { + return Visibility.PRIVATE; + } + } catch(JavaModelException e ) { + FXPlugin.getLogger().log(LogService.LOG_ERROR, "Unable to retrieve visibility for field '"+field+"'", e); + } + + return Visibility.PRIVATE; + } } |