use of org.apache.flex.compiler.tree.mxml.IMXMLNode in project vscode-nextgenas by BowlerHatLLC.
the class ActionScriptTextDocumentService method getEmbeddedActionScriptNodeInMXMLTag.
private IASNode getEmbeddedActionScriptNodeInMXMLTag(IMXMLTagData tag, int offset, TextDocumentPositionParams position) {
IMXMLTagAttributeData attributeData = getMXMLTagAttributeWithValueAtOffset(tag, currentOffset);
if (attributeData != null) {
//some attributes can have ActionScript completion, such as
//events and properties with data binding
IClassDefinition tagDefinition = (IClassDefinition) currentProject.resolveXMLNameToDefinition(tag.getXMLName(), tag.getMXMLDialect());
IDefinition attributeDefinition = currentProject.resolveSpecifier(tagDefinition, attributeData.getShortName());
if (attributeDefinition instanceof IEventDefinition) {
IMXMLInstanceNode mxmlNode = (IMXMLInstanceNode) getOffsetNode(position);
IMXMLEventSpecifierNode eventNode = mxmlNode.getEventSpecifierNode(attributeData.getShortName());
for (IASNode asNode : eventNode.getASNodes()) {
IASNode containingNode = getContainingNodeIncludingStart(asNode, currentOffset);
if (containingNode != null) {
return containingNode;
}
}
return eventNode;
} else {
IASNode offsetNode = getOffsetNode(position);
if (offsetNode instanceof IMXMLInstanceNode) {
IMXMLInstanceNode instanceNode = (IMXMLInstanceNode) offsetNode;
IMXMLPropertySpecifierNode propertyNode = instanceNode.getPropertySpecifierNode(attributeData.getShortName());
if (propertyNode != null) {
for (int i = 0, count = propertyNode.getChildCount(); i < count; i++) {
IMXMLNode propertyChild = (IMXMLNode) propertyNode.getChild(i);
if (propertyChild instanceof IMXMLConcatenatedDataBindingNode) {
IMXMLConcatenatedDataBindingNode dataBinding = (IMXMLConcatenatedDataBindingNode) propertyChild;
for (int j = 0, childCount = dataBinding.getChildCount(); j < childCount; j++) {
IASNode dataBindingChild = dataBinding.getChild(i);
if (dataBindingChild.contains(currentOffset) && dataBindingChild instanceof IMXMLSingleDataBindingNode) {
//we'll parse this in a moment, as if it were
//a direct child of the property specifier
propertyChild = (IMXMLSingleDataBindingNode) dataBindingChild;
break;
}
}
}
if (propertyChild instanceof IMXMLSingleDataBindingNode) {
IMXMLSingleDataBindingNode dataBinding = (IMXMLSingleDataBindingNode) propertyChild;
IASNode containingNode = dataBinding.getExpressionNode().getContainingNode(currentOffset);
//we found the correct expression, but due to a bug
//in the compiler its line and column positions
//will be wrong. the resulting completion is too
//quirky, so this feature will be completed later.
//return containingNode;
}
}
}
}
//nothing possible for this attribute
}
}
return null;
}
Aggregations