public DeclarationSymbolsListener( RubberduckParserState state, QualifiedModuleName qualifiedModuleName, IEnumerable <IAnnotation> annotations, IDictionary <Tuple <string, DeclarationType>, Attributes> attributes, Declaration projectDeclaration) { _state = state; _qualifiedModuleName = qualifiedModuleName; _annotations = annotations; _attributes = attributes; var componentType = _qualifiedModuleName.ComponentType; var declarationType = componentType == ComponentType.StandardModule ? DeclarationType.ProceduralModule : DeclarationType.ClassModule; var key = Tuple.Create(_qualifiedModuleName.ComponentName, declarationType); var moduleAttributes = attributes.ContainsKey(key) ? attributes[key] : new Attributes(); if (declarationType == DeclarationType.ProceduralModule) { _moduleDeclaration = new ProceduralModuleDeclaration( _qualifiedModuleName.QualifyMemberName(_qualifiedModuleName.ComponentName), projectDeclaration, _qualifiedModuleName.ComponentName, true, FindAnnotations(), moduleAttributes); } else { bool hasDefaultInstanceVariable = componentType != ComponentType.ClassModule && componentType != ComponentType.StandardModule; _moduleDeclaration = new ClassModuleDeclaration( _qualifiedModuleName.QualifyMemberName(_qualifiedModuleName.ComponentName), projectDeclaration, _qualifiedModuleName.ComponentName, true, FindAnnotations(), moduleAttributes, hasDefaultInstanceVariable: hasDefaultInstanceVariable); } SetCurrentScope(); AddDeclaration(_moduleDeclaration); var component = _qualifiedModuleName.Component; if (component != null && (componentType == ComponentType.UserForm || component.HasDesigner)) { DeclareControlsAsMembers(component); } }
public DeclarationSymbolsListener( QualifiedModuleName qualifiedName, vbext_ComponentType type, IEnumerable <CommentNode> comments, IEnumerable <IAnnotation> annotations, IDictionary <Tuple <string, DeclarationType>, Attributes> attributes, HashSet <ReferencePriorityMap> projectReferences, Declaration projectDeclaration) { _qualifiedName = qualifiedName; _comments = comments; _annotations = annotations; _attributes = attributes; var declarationType = type == vbext_ComponentType.vbext_ct_StdModule ? DeclarationType.ProceduralModule : DeclarationType.ClassModule; _projectReferences = projectReferences; _projectDeclaration = projectDeclaration; var key = Tuple.Create(_qualifiedName.ComponentName, declarationType); var moduleAttributes = attributes.ContainsKey(key) ? attributes[key] : new Attributes(); if (declarationType == DeclarationType.ProceduralModule) { _moduleDeclaration = new ProceduralModuleDeclaration( _qualifiedName.QualifyMemberName(_qualifiedName.Component.Name), _projectDeclaration, _qualifiedName.Component.Name, false, FindAnnotations(), moduleAttributes); } else { bool hasDefaultInstanceVariable = type != vbext_ComponentType.vbext_ct_ClassModule && type != vbext_ComponentType.vbext_ct_StdModule; _moduleDeclaration = new ClassModuleDeclaration( _qualifiedName.QualifyMemberName(_qualifiedName.Component.Name), _projectDeclaration, _qualifiedName.Component.Name, false, FindAnnotations(), moduleAttributes, hasDefaultInstanceVariable: hasDefaultInstanceVariable); } SetCurrentScope(); AddDeclaration(_moduleDeclaration); var component = _moduleDeclaration.QualifiedName.QualifiedModuleName.Component; if (component.Type == vbext_ComponentType.vbext_ct_MSForm || component.Designer != null) { DeclareControlsAsMembers(component); } }
public DeclarationSymbolsListener( QualifiedModuleName qualifiedName, Accessibility componentAccessibility, vbext_ComponentType type, IEnumerable <CommentNode> comments, IEnumerable <IAnnotation> annotations, IDictionary <Tuple <string, DeclarationType>, Attributes> attributes, HashSet <ReferencePriorityMap> projectReferences, Declaration projectDeclaration) { _qualifiedName = qualifiedName; _comments = comments; _annotations = annotations; _attributes = attributes; var declarationType = type == vbext_ComponentType.vbext_ct_StdModule ? DeclarationType.ProceduralModule : DeclarationType.ClassModule; _projectReferences = projectReferences; _projectDeclaration = projectDeclaration; var key = Tuple.Create(_qualifiedName.ComponentName, declarationType); var moduleAttributes = attributes.ContainsKey(key) ? attributes[key] : new Attributes(); if (declarationType == DeclarationType.ProceduralModule) { _moduleDeclaration = new ProceduralModuleDeclaration( _qualifiedName.QualifyMemberName(_qualifiedName.Component.Name), _projectDeclaration, _qualifiedName.Component.Name, false, FindAnnotations(), moduleAttributes); } else { _moduleDeclaration = new ClassModuleDeclaration( _qualifiedName.QualifyMemberName(_qualifiedName.Component.Name), _projectDeclaration, _qualifiedName.Component.Name, false, FindAnnotations(), moduleAttributes); } SetCurrentScope(); }
public static bool TryParse(string[] body, QualifiedModuleName qualifiedModuleName, out Member result) { var signature = body.FirstOrDefault(line => Keywords.Any(line.Trim().StartsWith)); if (signature == null) { result = null; return(false); } signature = signature.Trim().Replace("\r", string.Empty); body = body.Select(line => line.Trim().Replace("\r", string.Empty)).ToArray(); var withoutKeyword = signature.Substring((Keywords.First(keyword => signature.StartsWith(keyword))).Length); var name = withoutKeyword.Split(' ')[1] .Split('(')[0]; var type = GetMemberType(signature, withoutKeyword); var visibility = GetMemberVisibility(signature); var signatureLineIndex = body.ToList().IndexOf(signature); var attributes = MemberAttribute.GetAttributes(body.Take(signatureLineIndex) .Where(line => line.Trim().StartsWith("'@"))); result = new Member(type, qualifiedModuleName.QualifyMemberName(name), signature, body, attributes); return(true); }
public ClassModuleDeclaration(ComCoClass coClass, Declaration parent, QualifiedModuleName module, Attributes attributes) : base( module.QualifyMemberName(coClass.Name), parent, parent, coClass.Name, null, false, coClass.EventInterfaces.Any(), Accessibility.Public, DeclarationType.ClassModule, null, Selection.Home, false, null, false, new List <IAnnotation>(), attributes) { _supertypeNames = coClass.ImplementedInterfaces.Where(i => !i.IsRestricted && !IgnoredInterfaces.Contains(i.Name)) .Select(i => i.Name) .ToList(); _supertypes = new HashSet <Declaration>(); _subtypes = new ConcurrentDictionary <Declaration, byte>(); IsControl = coClass.IsControl; _isExtensible = new Lazy <bool>(() => IsExtensibleToCache()); _isExposed = new Lazy <bool>(() => IsExposedToCache()); _hasPredeclaredId = new Lazy <bool>(() => HasPredeclaredIdToCache()); }
public ClassModuleDeclaration(ComCoClass coClass, Declaration parent, QualifiedModuleName module, Attributes attributes) : base( module.QualifyMemberName(coClass.Name), parent, parent, coClass.Name, null, false, coClass.EventInterfaces.Any(), Accessibility.Public, DeclarationType.ClassModule, null, Selection.Home, false, null, true, new List <IAnnotation>(), attributes) { _supertypeNames = coClass.ImplementedInterfaces.Where(i => !i.IsRestricted && !IgnoredInterfaces.Contains(i.Name)) .Select(i => i.Name) .ToList(); _supertypes = new HashSet <Declaration>(); _subtypes = new HashSet <Declaration>(); IsControl = coClass.IsControl; }
private DeclarationSymbolsListener(QualifiedModuleName qualifiedName, Accessibility componentAccessibility, DeclarationType declarationType) { _qualifiedName = qualifiedName; SetCurrentScope(); _declarations.Add(new Declaration(_qualifiedName.QualifyMemberName(_qualifiedName.Component.Name), _qualifiedName.Project.Name, _qualifiedName.Component.Name, false, false, componentAccessibility, declarationType, null, Selection.Home)); }
public ProjectDeclaration(ComProject project, QualifiedModuleName module) : this(module.QualifyMemberName(project.Name), project.Name, false) { Guid = project.Guid; MajorVersion = project.MajorVersion; MinorVersion = project.MinorVersion; }
/// <summary> /// Scans form designer to create a public, self-assigned field for each control on a form. /// </summary> /// <remarks> /// These declarations are meant to be used to identify control event procedures. /// </remarks> private void DeclareControlsAsMembers(IVBComponent form) { if (form.Controls == null) { return; } foreach (var control in form.Controls) { var typeName = control.TypeName(); // The as type declaration should be TextBox, CheckBox, etc. depending on the type. var declaration = new Declaration( _qualifiedName.QualifyMemberName(control.Name), _parentDeclaration, _currentScopeDeclaration, string.IsNullOrEmpty(typeName) ? "Control" : typeName, null, true, true, Accessibility.Public, DeclarationType.Control, null, Selection.Home, false, null, false); AddDeclaration(declaration); } }
public SubroutineDeclaration(ComMember member, Declaration parent, QualifiedModuleName module, Attributes attributes, bool eventHandler) : base( module.QualifyMemberName(member.Name), parent, parent, string.Empty, null, false, false, Accessibility.Global, eventHandler ? DeclarationType.Event : DeclarationType.Procedure, null, Selection.Home, false, null, false, null, attributes) { _parameters = member.Parameters.Select(decl => new ParameterDeclaration(decl, this, module)) .Cast <Declaration>() .ToList(); }
public ProceduralModuleDeclaration(ComStruct pseudo, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName(string.Format("_{0}", pseudo.Name)), parent, string.Format("_{0}", pseudo.Name), true, new List<IAnnotation>(), new Attributes()) { }
private Declaration CreateProjectDeclaration(string projectId) { var project = _state.ProjectsProvider.Project(projectId); var qualifiedModuleName = new QualifiedModuleName(project); var qualifiedName = qualifiedModuleName.QualifyMemberName(project.Name); var projectDeclaration = new ProjectDeclaration(qualifiedName, qualifiedName.MemberName, true, project); return(projectDeclaration); }
public ProceduralModuleDeclaration(ComStruct pseudo, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName($"_{pseudo.Name}"), parent, $"_{pseudo.Name}", false, new List <IAnnotation>(), new Attributes()) { }
public ClassModuleDeclaration(ComInterface @interface, Declaration parent, QualifiedModuleName module, Attributes attributes) : this( module.QualifyMemberName(@interface.Name), parent, @interface.Name, false, new List <IAnnotation>(), attributes) { }
public ProceduralModuleDeclaration(ComModule statics, Declaration parent, QualifiedModuleName module, Attributes attributes) : this( module.QualifyMemberName(statics.Name), parent, statics.Name, false, new List <IAnnotation>(), attributes) { IsPrivateModule = statics.IsRestricted; }
private Declaration CreateProjectDeclaration(IVBProject project) { var qualifiedModuleName = new QualifiedModuleName(project); var qualifiedName = qualifiedModuleName.QualifyMemberName(project.Name); var projectId = qualifiedModuleName.ProjectId; var projectDeclaration = new ProjectDeclaration(qualifiedName, qualifiedName.MemberName, true, project); var references = ProjectReferences(projectId); AddReferences(projectDeclaration, references); return(projectDeclaration); }
public ParameterDeclaration(ComParameter parameter, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName(parameter.Name), parent, parameter.TypeName, null, null, parameter.IsOptional, parameter.IsByRef, parameter.IsArray, parameter.IsParamArray) { }
private Declaration CreateProjectDeclaration(QualifiedModuleName projectQualifiedName, VBProject project) { var qualifiedName = projectQualifiedName.QualifyMemberName(project.Name); var projectId = qualifiedName.QualifiedModuleName.ProjectId; var projectDeclaration = new ProjectDeclaration(qualifiedName, project.Name); var references = _projectReferences.Where(projectContainingReference => projectContainingReference.ContainsKey(projectId)); foreach (var reference in references) { int priority = reference[projectId]; projectDeclaration.AddProjectReference(reference.ReferencedProjectId, priority); } return(projectDeclaration); }
public PropertyLetDeclaration(ComField field, Declaration parent, QualifiedModuleName module, Attributes attributes) : this( module.QualifyMemberName(field.Name), parent, parent, field.ValueType, Accessibility.Global, null, null, Selection.Home, false, null, attributes) { }
public Declaration(ComEnumerationMember member, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName(member.Name), parent, parent, parent.IdentifierName, null, false, false, Accessibility.Global, DeclarationType.EnumerationMember, null, Selection.Home, false, null) { }
/// <summary> /// Scans form designer to create a public, self-assigned field for each control on a form. /// </summary> /// <remarks> /// These declarations are meant to be used to identify control event procedures. /// </remarks> private void DeclareControlsAsMembers(VBComponent form) { var designer = form.Designer; if (designer == null) { return; } // using dynamic typing here, because not only MSForms could have a Controls collection (e.g. MS-Access forms are 'document' modules). foreach (var control in ((dynamic)designer).Controls) { var declaration = new Declaration(_qualifiedName.QualifyMemberName(control.Name), _parentDeclaration, _currentScopeDeclaration, "Control", true, true, Accessibility.Public, DeclarationType.Control, null, Selection.Home); OnNewDeclaration(declaration); } }
public PropertyLetDeclaration(ComMember member, Declaration parent, QualifiedModuleName module, Attributes attributes) : this( module.QualifyMemberName(member.Name), parent, parent, member.AsTypeName.TypeName, Accessibility.Global, null, null, Selection.Home, false, null, attributes) { AddParameters(member.Parameters.Select(decl => new ParameterDeclaration(decl, this, module))); }
public PropertySetDeclaration(ComMember member, Declaration parent, QualifiedModuleName module, Attributes attributes) : this( module.QualifyMemberName(member.Name), parent, parent, string.Empty, //TODO: Need to get the types for these. Accessibility.Global, null, Selection.Home, false, null, attributes) { _parameters = member.Parameters.Select(decl => new ParameterDeclaration(decl, this, module)) .ToList(); }
public Declaration(ComField field, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName(field.Name), parent, parent, field.ValueType, null, false, false, Accessibility.Global, field.Type, null, Selection.Home, false, null) { }
public AliasDeclaration(ComAlias alias, Declaration parent, QualifiedModuleName module) : base( module.QualifyMemberName(alias.Name), parent, parent, alias.TypeName, null, false, false, Accessibility.Public, DeclarationType.ComAlias, null, Selection.Home, false, null, false) { }
/// <summary> /// Scans form designer to create a public, self-assigned field for each control on a form. /// </summary> /// <remarks> /// These declarations are meant to be used to identify control event procedures. /// </remarks> private void DeclareControlsAsMembers(IVBComponent form) { if (form.Controls == null) { return; } var libraryQualifier = string.Empty; if (_qualifiedModuleName.ComponentType == ComponentType.UserForm) { var msFormsLib = _state.DeclarationFinder.FindProject("MSForms"); //Debug.Assert(msFormsLib != null); if (msFormsLib != null) { // given a UserForm component, MSForms reference is in use and cannot be removed. libraryQualifier = "MSForms."; } } foreach (var control in form.Controls) { var typeName = $"{libraryQualifier}{control.TypeName()}"; // The as type declaration should be TextBox, CheckBox, etc. depending on the type. var declaration = new Declaration( _qualifiedModuleName.QualifyMemberName(control.Name), _parentDeclaration, _currentScopeDeclaration, string.IsNullOrEmpty(typeName) ? "Control" : typeName, null, true, true, Accessibility.Public, DeclarationType.Control, null, Selection.Home, false, null, true); AddDeclaration(declaration); } }
/// <summary> /// Scans form designer to create a public, self-assigned field for each control on a form. /// </summary> /// <remarks> /// These declarations are meant to be used to identify control event procedures. /// </remarks> private void DeclareControlsAsMembers(VBComponent form) { if (form.Type != vbext_ComponentType.vbext_ct_MSForm) { throw new InvalidOperationException(); } var designer = form.Designer; if (designer == null) { return; } foreach (var control in ((dynamic)designer).Controls) { _declarations.Add(new Declaration(_qualifiedName.QualifyMemberName(control.Name), _currentScope, "Control", true, true, Accessibility.Public, DeclarationType.Control, null, Selection.Home)); } }
public Declaration(ComStruct structure, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName(structure.Name), parent, parent, structure.Name, null, false, false, Accessibility.Global, DeclarationType.UserDefinedType, null, Selection.Home, false, null, false, null, new Attributes()) { }
public Declaration(ComEnumeration enumeration, Declaration parent, QualifiedModuleName module) : this( module.QualifyMemberName(enumeration.Name), parent, parent, "Long", //Match the VBA default type declaration. Technically these *can* be a LongLong on 64 bit systems, but would likely crash the VBE... null, false, false, Accessibility.Global, DeclarationType.Enumeration, null, Selection.Home, false, null, false, null, new Attributes()) { }
public FunctionDeclaration(ComMember member, Declaration parent, QualifiedModuleName module, Attributes attributes) : this( module.QualifyMemberName(member.Name), parent, parent, member.ReturnType.TypeName, null, null, Accessibility.Global, null, Selection.Home, member.ReturnType.IsArray, false, null, attributes) { _parameters = member.Parameters.Select(decl => new ParameterDeclaration(decl, this, module)) .ToList(); }