/// <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)); }
internal VB6UnresolvedFile(string fileName, string text, IVbpProject project) : this() { _fileName = fileName; this.Project = project; this.PartitionedFile = VbPartitionedFile.GetPartitionedFile(text); _module = ParseModule(this.PartitionedFile); ParseModuleIntoMembers(); }
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); }
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(); } } }
private IVbModule ParseModule(VbPartitionedFile partFile) { return(ModuleReflector.GetReflectedModule(partFile)); }
VbPartitionedFile IVbFileReader.ReadPartitionedFile(ElementBase element, Stream stream) { StreamReader reader = new StreamReader(stream, Encoding.Default); return(VbPartitionedFile.GetPartitionedFile(reader.ReadToEnd())); }