message.vb
来自「大名鼎鼎的mono是.NET平台的跨平台(支持linux」· VB 代码 · 共 200 行
VB
200 行
' ' Visual Basic.Net Compiler' Copyright (C) 2004 - 2007 Rolf Bjarne Kvinge, RKvinge@novell.com' ' This library is free software; you can redistribute it and/or' modify it under the terms of the GNU Lesser General Public' License as published by the Free Software Foundation; either' version 2.1 of the License, or (at your option) any later version.' ' This library is distributed in the hope that it will be useful,' but WITHOUT ANY WARRANTY; without even the implied warranty of' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU' Lesser General Public License for more details.' ' You should have received a copy of the GNU Lesser General Public' License along with this library; if not, write to the Free Software' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA' ''' <summary>''' Represents a compiler message (might be a warning, an error or an information).''' A compiler message might have several lines.''' </summary>Public Class Message Private m_Compiler As Compiler ''' <summary> ''' The actual message itself. ''' Might be several messages if this is a multiline message. ''' </summary> ''' <remarks></remarks> Private m_Message As Messages() ''' <summary> ''' The location of the code corresponding to the the message. ''' </summary> ''' <remarks></remarks> Private m_Location As Span ''' <summary> ''' The parameters of the message(s) ''' </summary> Private m_Parameters()() As String ''' <summary> ''' The format of the message ''' </summary> ''' <remarks></remarks> Private Const MESSAGEFORMATWITHLOCATION As String = "%LOCATION% : %MESSAGELEVEL% %MESSAGE%" ''' <summary> ''' The format of the message ''' </summary> ''' <remarks></remarks> Private Const MESSAGEFORMAT As String = "%MESSAGELEVEL% : %MESSAGE%" ''' <summary> ''' Get the severity level of this message. ''' </summary> ReadOnly Property Level() As MessageLevel Get Dim attr As MessageAttribute attr = DirectCast(System.Attribute.GetCustomAttribute(GetType(Messages).GetField(m_Message(0).ToString), GetType(MessageAttribute)), MessageAttribute) Return attr.Level End Get End Property ''' <summary> ''' The actual message itself. ''' Might be several messages if this is a multiline message. ''' </summary> ''' <remarks></remarks> ReadOnly Property Message() As Messages() Get Return m_Message End Get End Property ''' <summary> ''' The location of the code corresponding to the the message. ''' </summary> ''' <remarks></remarks> ReadOnly Property Location() As Span Get Return m_Location End Get End Property ''' <summary> ''' The parameters of the message(s) ''' </summary> ReadOnly Property Parameters() As String()() Get Return m_Parameters End Get End Property ''' <summary> ''' Create a new message with the specified data. ''' </summary> ''' <param name="Message"></param> ''' <remarks></remarks> Sub New(ByVal Compiler As Compiler, ByVal Message As Messages, ByVal Location As Span) Me.m_Compiler = Compiler Me.m_Message = New Messages() {Message} Me.m_Location = Location Me.m_Parameters = New String()() {} End Sub ''' <summary> ''' Create a new message with the specified data. ''' </summary> Sub New(ByVal Compiler As Compiler, ByVal Message As Messages(), ByVal Parameters()() As String, ByVal Location As Span) Me.m_Compiler = Compiler Me.m_Message = Message Me.m_Location = Location Me.m_Parameters = Parameters End Sub ''' <summary> ''' Create a new message with the specified data. ''' </summary> Sub New(ByVal Compiler As Compiler, ByVal Message As Messages, ByVal Parameters() As String, ByVal Location As Span) Me.m_Compiler = Compiler Me.m_Message = New Messages() {Message} Me.m_Location = Location If Parameters Is Nothing Then Me.m_Parameters = New String()() {New String() {}} Else Me.m_Parameters = New String()() {Parameters} End If End Sub ReadOnly Property Compiler() As Compiler Get Return m_Compiler End Get End Property ''' <summary> ''' Formats the message to a string. ''' The returned string might have several lines. ''' </summary> Overrides Function ToString() As String Dim strMessages(), strMessage, strLocation As String Dim result As String Helper.Assert(m_Message IsNot Nothing, "m_Message Is Nothing") Helper.Assert(m_Parameters IsNot Nothing, "m_Parameters Is Nothing") 'Get the message string and format it with the message parameters. ReDim strMessages(m_Message.GetUpperBound(0)) For i As Integer = 0 To m_Message.GetUpperBound(0) strMessages(i) = Report.LookupErrorCode(m_Message(i)) Helper.Assert(m_Parameters(i) IsNot Nothing, "m_Parameters(" & i.ToString & ") Is Nothing") Select Case m_Parameters(i).Length Case 0 'strMessages(i) = String.Format(strMessages(i), m_Parameters(i)) Case 1 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0)) Case 2 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1)) Case 3 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2)) Case 4 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2), m_Parameters(i)(3)) Case 5 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2), m_Parameters(i)(3), m_Parameters(i)(4)) Case 6 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2), m_Parameters(i)(3), m_Parameters(i)(4), m_Parameters(i)(5)) Case 7 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2), m_Parameters(i)(3), m_Parameters(i)(4), m_Parameters(i)(5), m_Parameters(i)(6)) Case 8 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2), m_Parameters(i)(3), m_Parameters(i)(4), m_Parameters(i)(5), m_Parameters(i)(6), m_Parameters(i)(7)) Case 9 strMessages(i) = String.Format(strMessages(i), m_Parameters(i)(0), m_Parameters(i)(1), m_Parameters(i)(2), m_Parameters(i)(3), m_Parameters(i)(4), m_Parameters(i)(5), m_Parameters(i)(6), m_Parameters(i)(7), m_Parameters(i)(8)) Case Else Helper.NotImplemented("") End Select If i = 0 Then strMessages(i) = m_Message(i).ToString & ": " & strMessages(i) Next strMessage = Microsoft.VisualBasic.Join(strMessages, Microsoft.VisualBasic.vbNewLine) 'Get the location string If Location.HasFile Then strLocation = Location.ToString(Compiler) result = MESSAGEFORMATWITHLOCATION Else strLocation = "" result = MESSAGEFORMAT End If 'Format the entire message. result = result.Replace("%LOCATION%", strLocation) result = result.Replace("%MESSAGE%", strMessage) result = result.Replace("%MESSAGELEVEL%", Level.ToString) Return result End FunctionEnd Class
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?