HostTypeMapProvider in VB.Net

ProxyGen outputs the Proxy and HostTypeMapProvider files in C#.  For anyone interested in using a VB.Net HostTypeMapProvider, there is a HostTypeMapProvider in VB.Net download available to help with this.  The download includes a template and macro.  The template is a VB.Net version of the  HostTypeMapProvider without types.  Copy and paste the C# canonicalToTypeName.Add and typeToCanonicalName.Add statements from the ProxyGen generated HostTypeMapProvider into the VB.Net HostTypeMapProvider then run the macro.  The macro uses simple string replacements to translate the types from C# to VB.Net. 

For your convience, the template and macro can be copied from here:

Instructions:
   Add the HostTypeMapProvider template to the host VB.Net project.
   Copy the C# canonicalToTypeName.Add and typeToCanonicalName.Add statements from the HostTypeMapProvider created by ProxyGen.
   Paste the statements into the New method.
   Run the macro.

'This file works as a template for VB HostTypeMapProviders.

'   Copy and paste the types generated by ProxyGen into the

'   constructor below.

'   Then run the HTMProvider_TranslateTypesToVB macro with

'   this file selected.

 

Public Class HostTypeMapProvider : Implements Microsoft.VisualStudio.Tools.Applications.Runtime.ITypeMapProvider

 

    Dim typeToCanonicalName As System.Collections.Generic.Dictionary(Of System.Type, System.String) = System.Collections.Generic.Dictionary(Of System.Type, System.String)()

    Dim canonicalToTypeName As System.Collections.Generic.Dictionary(Of System.String, System.Type) = System.Collections.Generic.Dictionary(Of System.String, System.Type)()

 

    Friend Sub New()

        'add types here to translate.

        'Run HTMProvider_TranslateTypesToVB macro with this doc selected

 

 

    End Sub

 

    Public Function GetCanonicalNameForType(ByVal type As System.Type) As String Implements Microsoft.VisualStudio.Tools.Applications.Runtime.ITypeMapProvider.GetCanonicalNameForType

 

        'default fetch from dictionary

        If typeToCanonicalName.ContainsKey(type) Then

            Return typeToCanonicalName(type)

        End If

 

        Return Nothing

 

    End Function

 

    Public Function GetTypeForCanonicalName(ByVal canonicalName As String) As System.Type Implements Microsoft.VisualStudio.Tools.Applications.Runtime.ITypeMapProvider.GetTypeForCanonicalName

 

        'defualt fetch from the dictionary

        If canonicalToTypeName.ContainsKey(canonicalName) Then

            Return canonicalToTypeName(canonicalName)

        End If

 

        Return Nothing

 

    End Function

End Class


Option Strict Off

Option Explicit Off

Imports System

Imports EnvDTE

Imports EnvDTE80

Imports EnvDTE90

Imports System.Diagnostics

 

Public Module HTMProvider_TranslateTypesToVB

 

    'Translates the types found in a HostTypeMapProvider from C# to VB

    Public Sub HTMProvider_TranslateTypesToVB()

 

        'make syntax changes

        FindReplaceAll(";", "")

        FindReplaceAll("<", "( Of ")

        FindReplaceAll(">", ")")

        FindReplaceAll("typeof", "gettype")

 

        'correct the formatting

        DTE.ExecuteCommand("Edit.FormatDocument")

    End Sub

 

    'replaces all occurences of the find string with the replace string

    Private Sub FindReplaceAll(ByVal inFind As String, ByVal inReplace As String)

 

        DTE.Find.FindWhat = inFind

        DTE.Find.ReplaceWith = inReplace

        DTE.Find.Target = vsFindTarget.vsFindTargetCurrentDocument

        DTE.Find.MatchInHiddenText = True

        DTE.Find.PatternSyntax = vsFindPatternSyntax.vsFindPatternSyntaxLiteral

        DTE.Find.Action = vsFindAction.vsFindActionReplaceAll

 

    End Sub

 

End Module

 


Posted Mar 10 2008, 10:38 AM by Melody
Copyright Summit Software Company, 2008. All rights reserved.