Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VB -> C#: Non-compiling using directives removed #529

Closed
GrahamTheCoder opened this issue Feb 18, 2020 · 2 comments
Closed

VB -> C#: Non-compiling using directives removed #529

GrahamTheCoder opened this issue Feb 18, 2020 · 2 comments
Labels
VB -> C# Specific to VB -> C# conversion

Comments

@GrahamTheCoder
Copy link
Member

GrahamTheCoder commented Feb 18, 2020

Consolidated as a known limitation

Input code

Imports System.Collections.Specialized
Imports System.Configuration
Imports System.Net.Http
Imports System.Web
Imports DTS.Logging.MongoDB
Imports DTS.Logging.MongoDB.Configuration
Imports Serilog

''' <summary>
''' 
''' </summary>
''' <remarks></remarks>
Public Class LoggingDebugging

    Public Shared EnabledLogTypes As NameValueCollection = Util.GetConfigSection("Logging")
    Public Shared EnabledLogs As NameValueCollection = Util.GetConfigSection("enabledLogs")
    'Private Shared sempaphore As Object = New Object()
    ''' <summary>
    ''' Proxy method to set the LogInstance properties and add LogInstance class to LogBuffer
    ''' </summary>
    ''' <param name="logType"></param>
    ''' <param name="message"></param>
    ''' <param name="traceKey"></param>
    ''' <param name="user"></param>
    ''' <param name="TS"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function Log(ByVal logType As String, ByVal message As String, Optional ByVal traceKey As Long = Nothing, Optional ByVal user As String = Nothing, Optional ByVal TS As Long = Nothing) As Long

        Dim LogTS As Long

        If IsNothing(traceKey) Or traceKey = 0 Then
            Throw New ETDMSException(Util.t("traceKey must not be null. Please modify your method to either create a new " +
                                       "traceKey if it is the start of a request, or use an existing traceKey if it is " +
                                       "part of a request."))
        End If

        If LoggingDebugging.EnabledLogTypes(logType) = "True" Then

            Dim loginstance As New LogInstance(m_logType:=logType, m_message:=message, m_user:=user, m_TS:=TS)

            LogTS = LogAggregator.AddLogInstance(loginstance, traceKey)


        Else
            'If logType = "query" Then
            '    Dim LogEntry As New LogInstance(m_logType:=logType, m_message:=message, m_user:=user, m_TS:=TS)
            '    LogTS = LoggingDebugging.AddLogBuffer(Props:=LogEntry, traceKey:=traceKey)
            'End If
            LogTS = Now.Ticks()
        End If

        Return LogTS

    End Function



    ''' <summary>
    ''' Fluh out from Logbuffer
    ''' </summary>
    ''' <param name="userPin"></param>
    ''' <param name="traceKey"></param>
    ''' <remarks></remarks>
    Public Overloads Shared Sub FlushLog(ByVal userPin As String,
                                         Optional ByVal traceKey As String = Nothing,
                                         Optional ByRef esTime As String = Nothing,
                                         Optional ByRef request As HttpRequest = Nothing,
                                         Optional ByRef message As HttpRequestMessage = Nothing)

        Dim logitem As LogItem = Nothing
        LogAggregator.TryGet(userPin, logitem, traceKey, esTime, request, message)

    End Sub


    ''' <summary>
    ''' Converts ticks to Date and Time
    ''' </summary>
    ''' <param name="ticks"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function convertTickstoDateTime(ByVal ticks As Long) As String
        Dim dt As New DateTime(ticks)
        Return Format(dt, "MM/dd/yyy hh:mm:ss.fffffff")
    End Function

    ''' <summary>
    ''' Converts ticks to time
    ''' </summary>
    ''' <param name="ticks"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function convertTickstoTime(ByVal ticks As Long) As String
        Dim timespan As New TimeSpan(ticks)
        Return String.Format("{0}:{1}:{2}:{3}",
            timespan.Hours.ToString("D2"), timespan.Minutes.ToString("D2"),
            timespan.Seconds.ToString("D2"), timespan.Milliseconds.ToString("D3"))
    End Function

    ''' <summary>
    ''' Converts ticks to Date and Time with 24 hrs
    ''' </summary>
    ''' <param name="ticks"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Public Shared Function convertTickstoLongDateTime(ByVal ticks As Long) As String
        Dim dt As New DateTime(ticks)
        Return dt.ToString()
    End Function

    ''' <summary>
    ''' Reads configuration values for serilog
    ''' </summary>
    Public Shared Sub Configure()

        'Serilog.Log.Logger = New Serilog.LoggerConfiguration().ReadFrom.AppSettings().CreateLogger()

        Dim settings As StructuredMongoDBSettings = ConfigurationManager.AppSettings.MongoDBSettings()
        Serilog.Log.Logger = New Serilog.LoggerConfiguration() _
            .ReadFrom.AppSettings() _
            .Enrich.WithProperty("Application", "user-service-dev") _
            .Enrich.WithProperty("Stage", "local") _
            .WriteTo.StructuredMongoDB(settings) _
            .CreateLogger()

        Serilog.Log.Information("logger initialized")

    End Sub

End Class

Erroneous output

using System;
using System.Net.Http;
using DTS.Logging.MongoDB;
using DTS.Logging.MongoDB.Configuration;
using Microsoft.VisualBasic;
using Serilog;

/// <summary>

/// 

/// </summary>

/// <remarks></remarks>
public partial class LoggingDebugging
{
    public static NameValueCollection EnabledLogTypes = Util.GetConfigSection("Logging");
    public static NameValueCollection EnabledLogs = Util.GetConfigSection("enabledLogs");
    // Private Shared sempaphore As Object = New Object()
    /// <summary>
    /// Proxy method to set the LogInstance properties and add LogInstance class to LogBuffer
    /// </summary>
    /// <param name="logType"></param>
    /// <param name="message"></param>
    /// <param name="traceKey"></param>
    /// <param name="user"></param>
    /// <param name="TS"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static long Log(string logType, string message, long traceKey = default(long), string user = null, long TS = default(long))
    {
        long LogTS;
        if (Information.IsNothing(traceKey) | traceKey == 0)
        {
            throw new ETDMSException(Util.t("traceKey must not be null. Please modify your method to either create a new " + "traceKey if it is the start of a request, or use an existing traceKey if it is " + "part of a request."));
        }

        if (LoggingDebugging.EnabledLogTypes(logType) == "True")
        {
            var loginstance = new LogInstance(m_logType: logType, m_message: message, m_user: user, m_TS: TS);
            LogTS = LogAggregator.AddLogInstance(loginstance, traceKey);
        }
        else
        {
            // If logType = "query" Then
            // Dim LogEntry As New LogInstance(m_logType:=logType, m_message:=message, m_user:=user, m_TS:=TS)
            // LogTS = LoggingDebugging.AddLogBuffer(Props:=LogEntry, traceKey:=traceKey)
            // End If
            LogTS = Now.Ticks();
        }

        return LogTS;
    }



    /// <summary>
    /// Fluh out from Logbuffer
    /// </summary>
    /// <param name="userPin"></param>
    /// <param name="traceKey"></param>
    /// <remarks></remarks>
    public static void FlushLog(string userPin, string traceKey = null, ref string esTime = null, ref HttpRequest request = null, ref HttpRequestMessage message = null)
    {
        LogItem logitem = null;
        LogAggregator.TryGet(userPin, logitem, traceKey, esTime, request, message);
    }


    /// <summary>
    /// Converts ticks to Date and Time
    /// </summary>
    /// <param name="ticks"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static string convertTickstoDateTime(long ticks)
    {
        var dt = new DateTime(ticks);
        return Strings.Format(dt, "MM/dd/yyy hh:mm:ss.fffffff");
    }

    /// <summary>
    /// Converts ticks to time
    /// </summary>
    /// <param name="ticks"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static string convertTickstoTime(long ticks)
    {
        var timespan = new TimeSpan(ticks);
        return string.Format("{0}:{1}:{2}:{3}", timespan.Hours.ToString("D2"), timespan.Minutes.ToString("D2"), timespan.Seconds.ToString("D2"), timespan.Milliseconds.ToString("D3"));
    }

    /// <summary>
    /// Converts ticks to Date and Time with 24 hrs
    /// </summary>
    /// <param name="ticks"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static string convertTickstoLongDateTime(long ticks)
    {
        var dt = new DateTime(ticks);
        return dt.ToString();
    }

    /// <summary>
    /// Reads configuration values for serilog
    /// </summary>
    public static void Configure()
    {

        // Serilog.Log.Logger = New Serilog.LoggerConfiguration().ReadFrom.AppSettings().CreateLogger()

        StructuredMongoDBSettings settings = ConfigurationManager.AppSettings.MongoDBSettings();
        Serilog.Log.Logger = new Serilog.LoggerConfiguration().ReadFrom.AppSettings().Enrich.WithProperty("Application", "user-service-dev").Enrich.WithProperty("Stage", "local").WriteTo.StructuredMongoDB(settings).CreateLogger();




        Serilog.Log.Information("logger initialized");
    }
}

Expected output

using System.Collections.Specialized;
using System;
using System.Net.Http;
using DTS.Logging.MongoDB;
using DTS.Logging.MongoDB.Configuration;
using Microsoft.VisualBasic;
using Serilog;

/// <summary>

/// 

/// </summary>

/// <remarks></remarks>
public partial class LoggingDebugging
{
    public static NameValueCollection EnabledLogTypes = Util.GetConfigSection("Logging");
    public static NameValueCollection EnabledLogs = Util.GetConfigSection("enabledLogs");
    // Private Shared sempaphore As Object = New Object()
    /// <summary>
    /// Proxy method to set the LogInstance properties and add LogInstance class to LogBuffer
    /// </summary>
    /// <param name="logType"></param>
    /// <param name="message"></param>
    /// <param name="traceKey"></param>
    /// <param name="user"></param>
    /// <param name="TS"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static long Log(string logType, string message, long traceKey = default(long), string user = null, long TS = default(long))
    {
        long LogTS;
        if (Information.IsNothing(traceKey) | traceKey == 0)
        {
            throw new ETDMSException(Util.t("traceKey must not be null. Please modify your method to either create a new " + "traceKey if it is the start of a request, or use an existing traceKey if it is " + "part of a request."));
        }

        if (LoggingDebugging.EnabledLogTypes(logType) == "True")
        {
            var loginstance = new LogInstance(m_logType: logType, m_message: message, m_user: user, m_TS: TS);
            LogTS = LogAggregator.AddLogInstance(loginstance, traceKey);
        }
        else
        {
            // If logType = "query" Then
            // Dim LogEntry As New LogInstance(m_logType:=logType, m_message:=message, m_user:=user, m_TS:=TS)
            // LogTS = LoggingDebugging.AddLogBuffer(Props:=LogEntry, traceKey:=traceKey)
            // End If
            LogTS = Now.Ticks();
        }

        return LogTS;
    }



    /// <summary>
    /// Fluh out from Logbuffer
    /// </summary>
    /// <param name="userPin"></param>
    /// <param name="traceKey"></param>
    /// <remarks></remarks>
    public static void FlushLog(string userPin, string traceKey = null, ref string esTime = null, ref HttpRequest request = null, ref HttpRequestMessage message = null)
    {
        LogItem logitem = null;
        LogAggregator.TryGet(userPin, logitem, traceKey, esTime, request, message);
    }


    /// <summary>
    /// Converts ticks to Date and Time
    /// </summary>
    /// <param name="ticks"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static string convertTickstoDateTime(long ticks)
    {
        var dt = new DateTime(ticks);
        return Strings.Format(dt, "MM/dd/yyy hh:mm:ss.fffffff");
    }

    /// <summary>
    /// Converts ticks to time
    /// </summary>
    /// <param name="ticks"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static string convertTickstoTime(long ticks)
    {
        var timespan = new TimeSpan(ticks);
        return string.Format("{0}:{1}:{2}:{3}", timespan.Hours.ToString("D2"), timespan.Minutes.ToString("D2"), timespan.Seconds.ToString("D2"), timespan.Milliseconds.ToString("D3"));
    }

    /// <summary>
    /// Converts ticks to Date and Time with 24 hrs
    /// </summary>
    /// <param name="ticks"></param>
    /// <returns></returns>
    /// <remarks></remarks>
    public static string convertTickstoLongDateTime(long ticks)
    {
        var dt = new DateTime(ticks);
        return dt.ToString();
    }

    /// <summary>
    /// Reads configuration values for serilog
    /// </summary>
    public static void Configure()
    {

        // Serilog.Log.Logger = New Serilog.LoggerConfiguration().ReadFrom.AppSettings().CreateLogger()

        StructuredMongoDBSettings settings = ConfigurationManager.AppSettings.MongoDBSettings();
        Serilog.Log.Logger = new Serilog.LoggerConfiguration().ReadFrom.AppSettings().Enrich.WithProperty("Application", "user-service-dev").Enrich.WithProperty("Stage", "local").WriteTo.StructuredMongoDB(settings).CreateLogger();




        Serilog.Log.Information("logger initialized");
    }
}

Details

There's code to avoid using statements being removed if they can't be found. It doesn't seem to be working here (see using System.Collections.Specialized;)
Raised here: #524 (comment)

DateTime.Now also not identified. The default references/imports may need updating

@GrahamTheCoder GrahamTheCoder added the VB -> C# Specific to VB -> C# conversion label Feb 18, 2020
@GrahamTheCoder
Copy link
Member Author

This could be caused by the namespace being defined in several assemblies, so if the namespace resolves, it's currently considered OK for deletion.

Solution: Any imports from the original source file shouldn't be removed if any type in the file doesn't resolve.

Any imports added by the conversion preparation code (e.g. all of them when only a snippet is converted) should follow the current rules for deletion.

Implementation hint: Annotations are preserved during the conversion

@GrahamTheCoder GrahamTheCoder changed the title VB -> C#: Non-compiling using statements removed VB -> C#: Non-compiling using directives removed Mar 16, 2020
@GrahamTheCoder GrahamTheCoder modified the milestone: When more users request Mar 19, 2020
@GrahamTheCoder
Copy link
Member Author

Consolidating as a known issue

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
VB -> C# Specific to VB -> C# conversion
Projects
None yet
Development

No branches or pull requests

1 participant