Browse Source

Added alias resolve results that allows it to handle aliases more

easily. (for example showing them in the text editor UI or tooltips)
pull/32/merge
Mike Krüger 13 years ago
parent
commit
11aa873815
  1. 2
      ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj
  2. 61
      ICSharpCode.NRefactory.CSharp/Resolver/AliasNamespaceResolveResult.cs
  3. 62
      ICSharpCode.NRefactory.CSharp/Resolver/AliasTypeResolveResult.cs
  4. 8
      ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs
  5. 4
      ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs

2
ICSharpCode.NRefactory.CSharp/ICSharpCode.NRefactory.CSharp.csproj

@ -510,6 +510,8 @@ @@ -510,6 +510,8 @@
<Compile Include="Refactoring\CodeActions\SortUsingsAction.cs" />
<Compile Include="Formatter\CSharpIndentEngine.cs" />
<Compile Include="Refactoring\CodeActions\CreateEnumValue.cs" />
<Compile Include="Resolver\AliasTypeResolveResult.cs" />
<Compile Include="Resolver\AliasNamespaceResolveResult.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ICSharpCode.NRefactory\ICSharpCode.NRefactory.csproj">

61
ICSharpCode.NRefactory.CSharp/Resolver/AliasNamespaceResolveResult.cs

@ -0,0 +1,61 @@ @@ -0,0 +1,61 @@
//
// AliasResolveResult.cs
//
// Author:
// Mike Krüger <mkrueger@xamarin.com>
//
// Copyright (c) 2013 Xamarin Inc. (http://xamarin.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.Semantics;
using System.Collections.Generic;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp
{
/// <summary>
/// Represents a namespace resolve result that's resolved using an alias.
/// </summary>
public class AliasNamespaceResolveResult : NamespaceResolveResult
{
/// <summary>
/// The alias used.
/// </summary>
public string Alias {
get;
private set;
}
/// <summary>
/// The namespace reference that was aliased.
/// </summary>
public TypeOrNamespaceReference Reference {
get;
private set;
}
public AliasNamespaceResolveResult(string alias, TypeOrNamespaceReference reference, NamespaceResolveResult underlyingResult) : base (underlyingResult.Namespace)
{
this.Alias = alias;
this.Reference = reference;
}
}
}

62
ICSharpCode.NRefactory.CSharp/Resolver/AliasTypeResolveResult.cs

@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
//
// AliasTypeResolveResult.cs
//
// Author:
// Mike Krüger <mkrueger@xamarin.com>
//
// Copyright (c) 2013 Xamarin Inc. (http://xamarin.com)
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using ICSharpCode.NRefactory.Semantics;
using System.Collections.Generic;
using ICSharpCode.NRefactory.CSharp.TypeSystem;
namespace ICSharpCode.NRefactory.CSharp
{
/// <summary>
/// Represents a type resolve result that's resolved using an alias.
/// </summary>
public class AliasTypeResolveResult : TypeResolveResult
{
/// <summary>
/// The alias used.
/// </summary>
public string Alias {
get;
private set;
}
/// <summary>
/// The type reference that was aliased.
/// </summary>
public TypeOrNamespaceReference Reference {
get;
private set;
}
public AliasTypeResolveResult(string alias, TypeOrNamespaceReference reference, TypeResolveResult underlyingResult) : base (underlyingResult.Type)
{
this.Alias = alias;
this.Reference = reference;
}
}
}

8
ICSharpCode.NRefactory.CSharp/TypeSystem/ResolvedUsingScope.cs

@ -116,9 +116,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem @@ -116,9 +116,15 @@ namespace ICSharpCode.NRefactory.CSharp.TypeSystem
CSharpResolver resolver = new CSharpResolver(parentContext.WithUsingScope(this));
result = new KeyValuePair<string, ResolveResult>[usingScope.UsingAliases.Count];
for (int i = 0; i < result.Count; i++) {
var rr = usingScope.UsingAliases[i].Value.Resolve(resolver);
if (rr is TypeResolveResult) {
rr = new AliasTypeResolveResult (usingScope.UsingAliases[i].Key, usingScope.UsingAliases[i].Value, (TypeResolveResult)rr);
} else if (rr is NamespaceResolveResult) {
rr = new AliasNamespaceResolveResult (usingScope.UsingAliases[i].Key, usingScope.UsingAliases[i].Value, (NamespaceResolveResult)rr);
}
result[i] = new KeyValuePair<string, ResolveResult>(
usingScope.UsingAliases[i].Key,
usingScope.UsingAliases[i].Value.Resolve(resolver)
rr
);
}
return LazyInit.GetOrSet(ref this.usingAliases, result);

4
ICSharpCode.NRefactory.Tests/CSharp/Resolver/NameLookupTests.cs

@ -438,7 +438,7 @@ class TestClass { @@ -438,7 +438,7 @@ class TestClass {
{
NamespaceResolveResult ns;
string program = "using COL = System.Collections;\r\nclass A {\r\n$.ArrayList a;\r\n}\r\n";
ns = Resolve<NamespaceResolveResult>(program.Replace("$", "$COL$"));
ns = Resolve<AliasNamespaceResolveResult>(program.Replace("$", "$COL$"));
Assert.AreEqual("System.Collections", ns.NamespaceName, "COL");
ns = Resolve<NamespaceResolveResult>(program.Replace("$", "$COL.Generic$"));
Assert.AreEqual("System.Collections.Generic", ns.NamespaceName, "COL.Generic");
@ -455,7 +455,7 @@ class TestClass { @@ -455,7 +455,7 @@ class TestClass {
}
}
";
TypeResolveResult trr = Resolve<TypeResolveResult>(program.Replace("COL a", "$COL$ a"));
TypeResolveResult trr = Resolve<AliasTypeResolveResult>(program.Replace("COL a", "$COL$ a"));
Assert.AreEqual("System.Collections.ArrayList", trr.Type.FullName, "COL");
ResolveResult rr = Resolve<CSharpInvocationResolveResult>(program.Replace("new COL()", "$new COL()$"));
Assert.AreEqual("System.Collections.ArrayList", rr.Type.FullName, "a");

Loading…
Cancel
Save