private AssociativeNode RewriteIdentifierListNode(AssociativeNode identifierList) { var resolvedName = ResolveClassName(identifierList); if (string.IsNullOrEmpty(resolvedName)) { return(identifierList); } var identListNode = identifierList as IdentifierListNode; var newIdentList = CoreUtils.CreateNodeFromString(resolvedName); if (newIdentList == null) { return(null); } // If the original input node matches with the resolved name, simply return // the identifier list constructed from the resolved name var symbol = new Symbol(resolvedName); if (symbol.Matches(identifierList.ToString())) { return(newIdentList); } // Remove partialName from identListNode and replace with newIdentList AssociativeNode leftNode = identListNode != null ? identListNode.LeftNode : identifierList; AssociativeNode rightNode = identListNode != null ? identListNode.RightNode : identifierList; var intermediateNodes = new List <AssociativeNode>(); while (leftNode is IdentifierListNode && !symbol.Matches(leftNode.ToString())) { intermediateNodes.Insert(0, ((IdentifierListNode)leftNode).RightNode); leftNode = ((IdentifierListNode)leftNode).LeftNode; } intermediateNodes.Insert(0, newIdentList); var lNode = CoreUtils.CreateNodeByCombiningIdentifiers(intermediateNodes); // The last ident list for the functioncall or identifier rhs var lastIdentList = new IdentifierListNode { LeftNode = lNode, RightNode = rightNode, Optr = Operator.dot }; return(lastIdentList); }
private bool TryShortenClassName(IdentifierListNode node, out AssociativeNode shortNameNode) { shortNameNode = null; string qualifiedName = CoreUtils.GetIdentifierExceptMethodName(node); // if it is a global method with no class if (string.IsNullOrEmpty(qualifiedName)) { return(false); } // Make sure qualifiedName is not a property var matchingClasses = classTable.GetAllMatchingClasses(qualifiedName); if (matchingClasses.Length == 0) { return(false); } string className = qualifiedName.Split('.').Last(); var symbol = new ProtoCore.Namespace.Symbol(qualifiedName); if (!symbol.Matches(node.ToString())) { return(false); } shortNameNode = CreateNodeFromShortName(className, qualifiedName); return(shortNameNode != null); }
private bool IsMatchingResolvedName(IdentifierListNode identifierList, out AssociativeNode newIdentList) { newIdentList = null; var resolvedName = ResolveClassName(identifierList); if (string.IsNullOrEmpty(resolvedName)) { return(false); } newIdentList = CoreUtils.CreateNodeFromString(resolvedName); var symbol = new Symbol(resolvedName); return(symbol.Matches(identifierList.ToString())); }
private AssociativeNode RewriteIdentifierListNode(AssociativeNode identifierList) { var identListNode = identifierList as IdentifierListNode; string partialName = identListNode != null? CoreUtils.GetIdentifierExceptMethodName(identListNode) : identifierList.Name; var resolvedName = elementResolver.LookupResolvedName(partialName); if (string.IsNullOrEmpty(resolvedName)) { // If namespace resolution map does not contain entry for partial name, // back up on compiler to resolve the namespace from partial name var matchingClasses = CoreUtils.GetResolvedClassName(classTable, identifierList); if (matchingClasses.Length == 1) { resolvedName = matchingClasses[0]; var assemblyName = CoreUtils.GetAssemblyFromClassName(classTable, resolvedName); elementResolver.AddToResolutionMap(partialName, resolvedName, assemblyName); } } if (string.IsNullOrEmpty(resolvedName)) { return(identifierList); } var newIdentList = CoreUtils.CreateNodeFromString(resolvedName); Validity.Assert(newIdentList is IdentifierListNode); // If the original input node matches with the resolved name, simply return // the identifier list constructed from the resolved name var symbol = new Symbol(resolvedName); if (symbol.Matches(identifierList.ToString())) { return(newIdentList); } // Remove partialName from identListNode and replace with newIdentList AssociativeNode leftNode = identListNode != null ? identListNode.LeftNode : identifierList; AssociativeNode rightNode = identListNode != null ? identListNode.RightNode : identifierList; var intermediateNodes = new List <AssociativeNode>(); while (leftNode is IdentifierListNode && !symbol.Matches(leftNode.ToString())) { intermediateNodes.Insert(0, ((IdentifierListNode)leftNode).RightNode); leftNode = ((IdentifierListNode)leftNode).LeftNode; } intermediateNodes.Insert(0, newIdentList); var lNode = CoreUtils.CreateNodeByCombiningIdentifiers(intermediateNodes); Validity.Assert(lNode is IdentifierListNode); // The last ident list for the functioncall or identifier rhs var lastIdentList = new IdentifierListNode { LeftNode = lNode, RightNode = rightNode, Optr = Operator.dot }; return(lastIdentList); }
public void NameMatching() { Symbol symbol = new Symbol("Com.Autodesk.Designscript.ProtoGeometry.Point"); Assert.IsTrue(symbol.Matches("Com.Autodesk.Designscript.ProtoGeometry.Point")); Assert.IsTrue(symbol.Matches("ProtoGeometry.Point")); Assert.IsTrue(symbol.Matches("Designscript.Point")); Assert.IsTrue(symbol.Matches("Autodesk.Point")); Assert.IsTrue(symbol.Matches("Com.Point")); Assert.IsTrue(symbol.Matches("Com.Autodesk.Point")); Assert.IsTrue(symbol.Matches("Com.Designscript.Point")); Assert.IsTrue(symbol.Matches("Com.ProtoGeometry.Point")); Assert.IsTrue(symbol.Matches("Autodesk.ProtoGeometry.Point")); Assert.IsTrue(symbol.Matches("Autodesk.Designscript.Point")); Assert.IsTrue(symbol.Matches("Designscript.ProtoGeometry.Point")); Assert.IsTrue(symbol.Matches("Point")); Assert.IsFalse(symbol.Matches("Autodesk.Com.Designscript.Point")); Assert.IsFalse(symbol.Matches("Com.ProtoGeometry.Autodesk.Point")); Assert.IsFalse(symbol.Matches("Com.Designscript.Autodesk.Point")); Assert.IsFalse(symbol.Matches("Autodesk")); }
private AssociativeNode RewriteIdentifierListNode(AssociativeNode identifierList) { var resolvedName = ResolveClassName(identifierList); if (string.IsNullOrEmpty(resolvedName)) return identifierList; var identListNode = identifierList as IdentifierListNode; var newIdentList = CoreUtils.CreateNodeFromString(resolvedName); // If the original input node matches with the resolved name, simply return // the identifier list constructed from the resolved name var symbol = new Symbol(resolvedName); if (symbol.Matches(identifierList.ToString())) return newIdentList; // Remove partialName from identListNode and replace with newIdentList AssociativeNode leftNode = identListNode != null ? identListNode.LeftNode : identifierList; AssociativeNode rightNode = identListNode != null ? identListNode.RightNode : identifierList; var intermediateNodes = new List<AssociativeNode>(); while (leftNode is IdentifierListNode && !symbol.Matches(leftNode.ToString())) { intermediateNodes.Insert(0, ((IdentifierListNode)leftNode).RightNode); leftNode = ((IdentifierListNode)leftNode).LeftNode; } intermediateNodes.Insert(0, newIdentList); var lNode = CoreUtils.CreateNodeByCombiningIdentifiers(intermediateNodes); // The last ident list for the functioncall or identifier rhs var lastIdentList = new IdentifierListNode { LeftNode = lNode, RightNode = rightNode, Optr = Operator.dot }; return lastIdentList; }
private bool IsMatchingResolvedName(IdentifierListNode identifierList, out AssociativeNode newIdentList) { newIdentList = null; var resolvedName = ResolveClassName(identifierList); if (string.IsNullOrEmpty(resolvedName)) return false; newIdentList = CoreUtils.CreateNodeFromString(resolvedName); var symbol = new Symbol(resolvedName); return symbol.Matches(identifierList.ToString()); }