コード例 #1
0
        /// <summary>
        /// Reads and reflects the given VB Classic text file into a usable form.
        /// </summary>
        /// <param name="partitionedFile">An instance of <see cref="VbPartitionedFile"/> representing the VB Classic module to reflect.</param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"><paramref name="partitionedFile"/> was null.</exception>
        /// <exception cref="InvalidOperationException">There was no analyzer considered fitting for the underlying file.</exception>
        public static IVbModule GetReflectedModule(VbPartitionedFile partitionedFile)
        {
            if (partitionedFile == null)
            {
                throw new ArgumentNullException("partitionedFile");
            }

            if (Tokenizer == null)
            {
                throw new InvalidOperationException("No tokenizer defined for analyzing the file!");
            }

            IReadOnlyList <IToken> tokens = Tokenizer.GetTokens(partitionedFile.GetMergedContent());

            TokenStreamReader reader = new TokenStreamReader(tokens);

            IAnalyzer analyzer = null;

            if (!AnalyzerFactory.TryGetAnalyzerForFile(reader, out analyzer))
            {
                // TODO: Dedicated exception for this.
                throw new InvalidOperationException("Could not analyze the given file!");
            }

            reader.Rewind();

            return(analyzer.Analyze(reader));
        }
コード例 #2
0
        internal VB6UnresolvedFile(string fileName, string text, IVbpProject project)
            : this()
        {
            _fileName    = fileName;
            this.Project = project;

            this.PartitionedFile = VbPartitionedFile.GetPartitionedFile(text);

            _module = ParseModule(this.PartitionedFile);
            ParseModuleIntoMembers();
        }
コード例 #3
0
        private IVbModule AnalyzeElement(ElementBase element)
        {
            try
            {
                using (Stream stream = _fileReader.Read(element, _project))
                {
                    VbPartitionedFile content = _fileReader.ReadPartitionedFile(element, stream);

                    return(ModuleReflector.GetReflectedModule(content));
                }
            }
            catch (Exception)
            {
            }

            return(null);
        }
コード例 #4
0
        private void DisplayElementProperties(object tag)
        {
            if (tag == null)
            {
                return;
            }

            if (tag is ClassElement || tag is ModuleElement || tag is FormElement)
            {
                try
                {
                    ElementBase element = (ElementBase)tag;

                    using (Stream stream = _fileReader.Read(element, _project))
                    {
                        VbPartitionedFile content = _fileReader.ReadPartitionedFile(element, stream);
                        txtEdit.Text = content.Source;
                    }
                }
                catch (Exception)
                {
                }
            }
            else
            {
                IVbMember member = tag as IVbMember;
                if (member != null)
                {
                    AddPropertyListViewItem("(Declaration)", member.ToVbDeclaration());
                    AddPropertyListViewItem("(Member type)", member.GetType().Name);

                    AddPropertyListViewItem("Name", member.Name);
                    AddPropertyListViewItem("Line", member.Location.Line);
                    AddPropertyListViewItem("Column", member.Location.Column);
                    AddPropertyListViewItem("Visibility", member.Visibility);

                    IVbMethod method = member as IVbMethod;
                    if (method != null)
                    {
                        AddPropertyListViewItem("Kind", method.MethodKind);
                        AddPropertyListViewItem("Return type", method.ReturnType.TypeName);

                        AddPropertyListViewItem("End Line", method.EndStatementLocation.Line);
                        AddPropertyListViewItem("End Column", method.EndStatementLocation.Column);

                        AddPropertyListViewItem("(Parameter count)", method.Parameters.Count);
                        for (int i = 0; i < method.Parameters.Count; i++)
                        {
                            IVbParameter parameter = method.Parameters[i];

                            AddPropertyListViewItem(string.Format("Param {0} (Declaration)", i), parameter.ToVbDeclaration());
                            AddPropertyListViewItem(string.Format("Param {0}: Access", i), parameter.Access);
                            AddPropertyListViewItem(string.Format("Param {0}: Name", i), parameter.Name);
                            AddPropertyListViewItem(string.Format("Param {0}: Line", i), parameter.Location.Line);
                            AddPropertyListViewItem(string.Format("Param {0}: Column", i), parameter.Location.Column);
                            AddPropertyListViewItem(string.Format("Param {0}: Type", i), parameter.Type.TypeName);

                            if (parameter.IsOptional)
                            {
                                AddPropertyListViewItem(string.Format("Param {0}: Is optional", i), true);
                                AddPropertyListViewItem(string.Format("Param {0}: Default value", i), parameter.OptionalDefaultValue);
                            }
                        }
                    }

                    IVbAttribute attribute = member as IVbAttribute;
                    if (attribute != null)
                    {
                        AddPropertyListViewItem("Value", attribute.Value);
                    }
                }
                else
                {
                    txtEdit.Clear();
                }
            }
        }
コード例 #5
0
 private IVbModule ParseModule(VbPartitionedFile partFile)
 {
     return(ModuleReflector.GetReflectedModule(partFile));
 }
コード例 #6
0
ファイル: Vb6FileReader.cs プロジェクト: joangilabert/vb6leap
        VbPartitionedFile IVbFileReader.ReadPartitionedFile(ElementBase element, Stream stream)
        {
            StreamReader reader = new StreamReader(stream, Encoding.Default);

            return(VbPartitionedFile.GetPartitionedFile(reader.ReadToEnd()));
        }