private Declaration CreateDeclaration( string identifierName, string asTypeName, Accessibility accessibility, DeclarationType declarationType, ParserRuleContext context, Selection selection, bool isArray, VBAParser.AsTypeClauseContext asTypeContext, string typeHint, bool selfAssigned = false, bool withEvents = false) { Declaration result; if (declarationType == DeclarationType.Parameter) { var argContext = (VBAParser.ArgContext)context; var isOptional = argContext.OPTIONAL() != null; var isByRef = argContext.BYREF() != null; var isParamArray = argContext.PARAMARRAY() != null; result = new ParameterDeclaration( new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, context, selection, asTypeName, asTypeContext, typeHint, isOptional, isByRef, isArray, isParamArray); if (_parentDeclaration is IDeclarationWithParameter) { ((IDeclarationWithParameter)_parentDeclaration).AddParameter(result); } } else { var key = Tuple.Create(identifierName, declarationType); Attributes attributes = null; if (_attributes.ContainsKey(key)) { attributes = _attributes[key]; } var annotations = FindAnnotations(selection.StartLine); if (declarationType == DeclarationType.Procedure) { result = new SubroutineDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, accessibility, context, selection, false, annotations, attributes); } else if (declarationType == DeclarationType.Function) { result = new FunctionDeclaration( new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, asTypeContext, typeHint, accessibility, context, selection, isArray, false, annotations, attributes); } else if (declarationType == DeclarationType.LibraryProcedure || declarationType == DeclarationType.LibraryFunction) { result = new ExternalProcedureDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, declarationType, asTypeName, asTypeContext, accessibility, context, selection, false, annotations); } else if (declarationType == DeclarationType.PropertyGet) { result = new PropertyGetDeclaration( new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, asTypeContext, typeHint, accessibility, context, selection, isArray, false, annotations, attributes); } else if (declarationType == DeclarationType.PropertySet) { result = new PropertySetDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, accessibility, context, selection, false, annotations, attributes); } else if (declarationType == DeclarationType.PropertyLet) { result = new PropertyLetDeclaration(new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, accessibility, context, selection, false, annotations, attributes); } else { result = new Declaration( new QualifiedMemberName(_qualifiedName, identifierName), _parentDeclaration, _currentScopeDeclaration, asTypeName, typeHint, selfAssigned, withEvents, accessibility, declarationType, context, selection, isArray, asTypeContext, false, annotations, attributes); } if (_parentDeclaration.DeclarationType == DeclarationType.ClassModule && result is ICanBeDefaultMember && ((ICanBeDefaultMember)result).IsDefaultMember) { ((ClassModuleDeclaration)_parentDeclaration).DefaultMember = result; } } return(result); }
private static List <Declaration> AddSpecialFormDeclarations(Declaration parentProject, Declaration parentModule) { List <Declaration> declarations = new List <Declaration>(); Debug.Assert(parentModule != null); var arrayFunction = new FunctionDeclaration( new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Array"), parentModule, parentModule, "Variant", null, null, Accessibility.Public, null, Selection.Home, false, true, null, new Attributes()); var inputFunction = new SubroutineDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Input"), parentModule, parentModule, "Variant", Accessibility.Public, null, Selection.Home, true, null, new Attributes()); var numberParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Number"), inputFunction, "Integer", null, null, false, false); var filenumberParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Filenumber"), inputFunction, "Integer", null, null, false, false); inputFunction.AddParameter(numberParam); inputFunction.AddParameter(filenumberParam); var inputBFunction = new SubroutineDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "InputB"), parentModule, parentModule, "Variant", Accessibility.Public, null, Selection.Home, true, null, new Attributes()); var numberBParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Number"), inputBFunction, "Integer", null, null, false, false); var filenumberBParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Filenumber"), inputBFunction, "Integer", null, null, false, false); inputBFunction.AddParameter(numberBParam); inputBFunction.AddParameter(filenumberBParam); var lboundFunction = new FunctionDeclaration( new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "LBound"), parentModule, parentModule, "Long", null, null, Accessibility.Public, null, Selection.Home, false, true, null, new Attributes()); var arrayNameParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Arrayname"), lboundFunction, "Integer", null, null, false, false); var dimensionParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Dimension"), lboundFunction, "Integer", null, null, true, false); lboundFunction.AddParameter(arrayNameParam); lboundFunction.AddParameter(dimensionParam); var uboundFunction = new FunctionDeclaration( new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "UBound"), parentModule, parentModule, "Integer", null, null, Accessibility.Public, null, Selection.Home, false, true, null, new Attributes()); var arrayParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Array"), uboundFunction, "Variant", null, null, false, false, true); var rankParam = new ParameterDeclaration(new QualifiedMemberName(parentModule.QualifiedName.QualifiedModuleName, "Rank"), uboundFunction, "Integer", null, null, true, false); uboundFunction.AddParameter(arrayParam); uboundFunction.AddParameter(rankParam); declarations.Add(arrayFunction); declarations.Add(inputFunction); declarations.Add(inputBFunction); declarations.Add(lboundFunction); declarations.Add(uboundFunction); return(declarations); }
private IReadOnlyList <Declaration> AddAliasDeclarations() { var conversionModule = _state.AllDeclarations.SingleOrDefault( item => item.IdentifierName == "Conversion" && item.Scope == "VBE7.DLL;VBA.Conversion"); var fileSystemModule = _state.AllDeclarations.SingleOrDefault( item => item.IdentifierName == "FileSystem" && item.Scope == "VBE7.DLL;VBA.FileSystem"); var interactionModule = _state.AllDeclarations.SingleOrDefault( item => item.IdentifierName == "Interaction" && item.Scope == "VBE7.DLL;VBA.Interaction"); var stringsModule = _state.AllDeclarations.SingleOrDefault( item => item.IdentifierName == "Strings" && item.Scope == "VBE7.DLL;VBA.Strings"); // all these modules are all part of the same project--only need to check one if (conversionModule == null) { return(new List <Declaration>()); } var functions = _state.AllDeclarations.Where(s => s.DeclarationType == DeclarationType.Function && s.Scope.StartsWith("VBE") && Tokens.Any(token => s.IdentifierName == "_B_var_" + token)) .ToList(); var errorFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Error"), conversionModule, conversionModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var hexFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Hex"), conversionModule, conversionModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var octFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Oct"), conversionModule, conversionModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var strFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Conversion"), "Str"), conversionModule, conversionModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var curDirFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "FileSystem"), "CurDir"), fileSystemModule, fileSystemModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var commandFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "Command"), interactionModule, interactionModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var environFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Interaction"), "Environ"), interactionModule, interactionModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var chrFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Chr"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var chrwFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "ChrW"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var formatFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Format"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var lcaseFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "LCase"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var leftFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Left"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var leftbFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "LeftB"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var ltrimFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "LTrim"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var midFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Mid"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var midbFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "MidB"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var trimFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Trim"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var rightFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "Right"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var rightbFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "RightB"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var rtrimFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "RTrim"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var ucaseFunction = new FunctionDeclaration( new QualifiedMemberName( new QualifiedModuleName("VBA", "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA7.1\\VBE7.DLL", "Strings"), "UCase"), stringsModule, stringsModule, "Variant", null, string.Empty, Accessibility.Global, null, new Selection(), false, true, new List <IAnnotation>(), new Attributes()); var functionAliases = new List <Declaration> { errorFunction, hexFunction, octFunction, strFunction, curDirFunction, commandFunction, environFunction, chrFunction, chrwFunction, formatFunction, lcaseFunction, leftFunction, leftbFunction, ltrimFunction, midFunction, midbFunction, trimFunction, rightFunction, rightbFunction, rtrimFunction, ucaseFunction }; // ReSharper disable once PossibleInvalidCastExceptionInForeachLoop foreach (FunctionDeclaration alias in functionAliases) { foreach (var parameter in ((FunctionDeclaration)functions.Single(s => s.IdentifierName == "_B_var_" + alias.IdentifierName)).Parameters) { alias.AddParameter(parameter); } } return(functionAliases); }