private IBoundExpression ResolveModuleInReferencedProject(string name) { /* Namespace tier 5: * Module in Referenced Project namespace: An accessible UDT or Enum type defined in a * procedural module or class module within a referenced project. */ var referencedProjectUdt = _declarationFinder.FindMemberReferencedProject(_project, _module, _parent, name, DeclarationType.UserDefinedType); if (referencedProjectUdt != null) { return(new SimpleNameExpression(referencedProjectUdt, ExpressionClassification.Type, _expression)); } var referencedProjectEnumType = _declarationFinder.FindMemberReferencedProject(_project, _module, _parent, name, DeclarationType.Enumeration); if (referencedProjectEnumType != null) { return(new SimpleNameExpression(referencedProjectEnumType, ExpressionClassification.Type, _expression)); } var referencedProjectAliasType = _declarationFinder.FindMemberReferencedProject(_project, _module, _parent, name, DeclarationType.ComAlias); if (referencedProjectAliasType != null) { return(new SimpleNameExpression(referencedProjectAliasType, ExpressionClassification.Type, _expression)); } return(null); }
private IBoundExpression ResolveMemberInReferencedProject(bool lExpressionIsEnclosingProject, IBoundExpression lExpression, string name, Declaration referencedProject, DeclarationType memberType) { /* * The project does not have an accessible module named <unrestricted-name> and exactly one of * the procedural modules within the project contains a UDT or Enum definition named * <unrestricted-name>. In this case, the member access expression is classified as a type and * refers to the specified UDT or enum. */ if (lExpressionIsEnclosingProject) { var foundType = _declarationFinder.FindMemberEnclosingModule(_module, _parent, name, memberType); if (foundType != null) { return(new MemberAccessExpression(foundType, ExpressionClassification.Type, _expression, _unrestrictedNameContext, lExpression)); } var accessibleType = _declarationFinder.FindMemberEnclosedProjectWithoutEnclosingModule(_project, _module, _parent, name, memberType); if (accessibleType != null) { return(new MemberAccessExpression(accessibleType, ExpressionClassification.Type, _expression, _unrestrictedNameContext, lExpression)); } } else { var referencedProjectType = _declarationFinder.FindMemberReferencedProject(_project, _module, _parent, referencedProject, name, memberType); if (referencedProjectType != null) { return(new MemberAccessExpression(referencedProjectType, ExpressionClassification.Type, _expression, _unrestrictedNameContext, lExpression)); } } return(null); }
private IBoundExpression ResolveMemberInReferencedProject(bool lExpressionIsEnclosingProject, Declaration referencedProject, DeclarationType memberType, ExpressionClassification classification) { if (lExpressionIsEnclosingProject) { var foundType = _declarationFinder.FindMemberEnclosingModule(_module, _parent, _name, memberType); if (foundType != null) { return(new MemberAccessExpression(foundType, classification, _context, _unrestrictedNameContext, _lExpression)); } var accessibleType = _declarationFinder.FindMemberEnclosedProjectWithoutEnclosingModule(_project, _module, _parent, _name, memberType); if (accessibleType != null) { return(new MemberAccessExpression(accessibleType, classification, _context, _unrestrictedNameContext, _lExpression)); } } else { var referencedProjectType = _declarationFinder.FindMemberReferencedProject(_project, _module, _parent, referencedProject, _name, memberType); if (referencedProjectType != null) { return(new MemberAccessExpression(referencedProjectType, classification, _context, _unrestrictedNameContext, _lExpression)); } } return(null); }