diff options
author | Daniel Grunwald <daniel@danielgrunwald.de> | 2012-05-18 19:30:53 +0400 |
---|---|---|
committer | Daniel Grunwald <daniel@danielgrunwald.de> | 2012-05-18 19:25:58 +0400 |
commit | 180ed85c8584a0c63966906b5894395c36035664 (patch) | |
tree | f62d36aeda538eca8514641007f020a084d78eb2 /ICSharpCode.NRefactory.ConsistencyCheck | |
parent | 4b3bb7e8a767fee292893c024dbcf0d7aaf98ebc (diff) |
Implemented IUnresolvedMember.Resolve().
Diffstat (limited to 'ICSharpCode.NRefactory.ConsistencyCheck')
-rw-r--r-- | ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj | 2 | ||||
-rw-r--r-- | ICSharpCode.NRefactory.ConsistencyCheck/Program.cs | 3 | ||||
-rw-r--r-- | ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs (renamed from ICSharpCode.NRefactory.ConsistencyCheck/IDStringConsistencyCheck.cs) | 29 |
3 files changed, 30 insertions, 4 deletions
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj b/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj index 58c0780a..0abf5100 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj +++ b/ICSharpCode.NRefactory.ConsistencyCheck/ICSharpCode.NRefactory.ConsistencyCheck.csproj @@ -59,7 +59,7 @@ </Compile>
<Compile Include="CSharpProject.cs" />
<Compile Include="FindReferencesConsistencyCheck.cs" />
- <Compile Include="IDStringConsistencyCheck.cs" />
+ <Compile Include="TypeSystemTests.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RandomizedOrderResolverTest.cs" />
diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs b/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs index b93c60f9..b562f03a 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/Program.cs @@ -57,7 +57,8 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck solution.AllFiles.Count(), solution.Projects.Count); - //using (new Timer("ID String test... ")) IDStringConsistencyCheck.Run(solution); + //using (new Timer("ID String test... ")) TypeSystemTests.IDStringConsistencyCheck(solution); + using (new Timer("Resolve unresolved members... ")) TypeSystemTests.ResolvedUnresolvedMembers(solution); //RunTestOnAllFiles("Roundtripping test", RoundtripTest.RunTest); RunTestOnAllFiles("Resolver test", ResolverTest.RunTest); RunTestOnAllFiles("Resolver test (no parsed file)", ResolverTest.RunTestWithoutParsedFile); diff --git a/ICSharpCode.NRefactory.ConsistencyCheck/IDStringConsistencyCheck.cs b/ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs index cb6de558..5c8b6a3a 100644 --- a/ICSharpCode.NRefactory.ConsistencyCheck/IDStringConsistencyCheck.cs +++ b/ICSharpCode.NRefactory.ConsistencyCheck/TypeSystemTests.cs @@ -25,9 +25,9 @@ using ICSharpCode.NRefactory.TypeSystem.Implementation; namespace ICSharpCode.NRefactory.ConsistencyCheck { - public class IDStringConsistencyCheck + public class TypeSystemTests { - public static void Run(Solution solution) + public static void IDStringConsistencyCheck(Solution solution) { foreach (var project in solution.Projects) { var compilation = project.Compilation; @@ -51,5 +51,30 @@ namespace ICSharpCode.NRefactory.ConsistencyCheck if (resolvedEntity != entity) throw new InvalidOperationException(id); } + + public static void ResolvedUnresolvedMembers(Solution solution) + { + foreach (var project in solution.Projects) { + var compilation = project.Compilation; + var context = new SimpleTypeResolveContext(compilation.MainAssembly); + foreach (var typeDef in compilation.MainAssembly.GetAllTypeDefinitions()) { + foreach (var part in typeDef.Parts) { + if (!typeDef.Equals(part.Resolve(context))) + throw new InvalidOperationException(); + } + foreach (var member in typeDef.Members) { + var resolvedMember = member.UnresolvedMember.Resolve(context); + if (!member.Equals(resolvedMember)) + throw new InvalidOperationException(); + } + // Include (potentially specialized) inherited members when testing ToMemberReference() + foreach (var member in typeDef.GetMembers()) { + var resolvedMember = member.ToMemberReference().Resolve(context); + if (!member.Equals(resolvedMember)) + throw new InvalidOperationException(); + } + } + } + } } } |