How do I add a "using System;" statement to a c# file?

It looks like the UsingUtil class is helpful for achieving this, however every ReSharper implementation of IUsingDirective is marked as internal. How do I create a new IUsingDirective? Do I have to create my own implementation?

Any pointers?

Cheers

3 comments
Comment actions Permalink

Solved. This did the trick:

/// /// Ensures the namespace exists. /// /// The file. /// Name of the namespace.]]>
public static void EnsureNamespaceExists(ICSharpFile file, String namespaceName)
{
Boolean namespaceExists = false;
String usingStatement = String.Format(CultureInfo.InvariantCulture, "using {0};", namespaceName);

// Loop through the existing imports
foreach (IUsingDirective directive in file.Imports)
{
// Check if the using directive is the one we are looking for
if (directive.GetText() == usingStatement)
{
// The namespace is already imported.
namespaceExists = true;

break;
}
}

// Check if the namespace already exists
if (namespaceExists == false)
{
// We need to add the namespace

// Create the new using statement
IUsingDirective directive =
CSharpElementFactory.GetInstance(file.GetProject()).CreateUsingDirective(namespaceName, null);

// Add it to the file
UsingUtil.AddImportTo(file, directive);
}
}

Edited by: Rory Primrose on Jul 4, 2008 2:30 PM

0
Comment actions Permalink

It is incorrect to compare using's by their text (because of different
formatting, comments, and so on).
Better way is try to cast IUsingDirective to IUsingNamespaceDirective and
then get the imported namespace

--
Eugene Pasynkov
Developer
JetBrains, Inc
http://www.jetbrains.com
"Develop with pleasure!"
"Rory Primrose" <no_reply@jetbrains.com> wrote in message
news:33385788.83791215145846371.JavaMail.jive@app4.labs.intellij.net...

Solved. This did the trick:

>

/// <summary>
/// Ensures the namespace exists.
/// </summary>
/// <param name="file">The file.</param>
/// <param name="namespaceName">Name of the namespace.</param>
public static void EnsureNamespaceExists(ICSharpFile file, String
namespaceName)
{
Boolean namespaceExists = false;
String usingStatement =
String.Format(CultureInfo.InvariantCulture, "using {0};", namespaceName);

>

// Loop through the existing imports
foreach (IUsingDirective directive in file.Imports)
{
// Check if the using directive is the one we are looking
for
if (directive.GetText() == usingStatement)
{
// The namespace is already imported.
namespaceExists = true;

>

break;
}
}

>

// Check if the namespace already exists
if (namespaceExists == false)
{
// We need to add the namespace

>

// Create the new using statement
IUsingDirective directive =

CSharpElementFactory.GetInstance(file.GetProject()).CreateUsingDirective(namespaceName,
null);

>

// Add it to the file
UsingUtil.AddImportTo(file, directive);
}
}

>

Edited by: Rory Primrose on Jul 4, 2008 2:30 PM



0
Comment actions Permalink

Thanks Eugene. The function now looks like this:

/// /// Ensures the namespace exists. /// /// The file. /// Name of the qualified namespace.]]>
public static void EnsureNamespaceExists(ICSharpFile file, String qualifiedNamespaceName)
{
Boolean namespaceExists = false;

// Loop through the existing imports
foreach (IUsingDirective directive in file.Imports)
{
IUsingNamespaceDirective namespaceDirective = directive as IUsingNamespaceDirective;

// We we could convert the type, skip to the next item
if (namespaceDirective == null
|| namespaceDirective.ImportedNamespace == null)
{
continue;
}

// Check if the using directive is the one we are looking for
if (namespaceDirective.ImportedNamespace.QualifiedName == qualifiedNamespaceName)
{
// The namespace is already imported.
namespaceExists = true;

break;
}
}

// Check if the namespace already exists
if (namespaceExists == false)
{
// We need to add the namespace

// Create the new using statement
IUsingDirective directive =
CSharpElementFactory.GetInstance(file.GetProject()).CreateUsingDirective(qualifiedNamespaceName, null);

// Add it to the file
UsingUtil.AddImportTo(file, directive);
}
}

0

Please sign in to leave a comment.