Browse Source

Reworked CLI type references to only filter namespaces only filter (effective) namespaces when generating forward references and not includes.

pull/71/head
triton 13 years ago
parent
commit
c0c212928d
  1. 4
      src/Generator/Generators/CLI/CLIHeadersTemplate.cs
  2. 2
      src/Generator/Generators/CLI/CLISourcesTemplate.cs
  3. 29
      src/Generator/Generators/CLI/CLITypeReferences.cs

4
src/Generator/Generators/CLI/CLIHeadersTemplate.cs

@ -46,7 +46,7 @@ namespace CppSharp.Generators.CLI @@ -46,7 +46,7 @@ namespace CppSharp.Generators.CLI
public void GenerateIncludeForwardRefs()
{
var typeReferenceCollector = new CLITypeReferenceCollector(Driver.TypeDatabase);
typeReferenceCollector.Process(TranslationUnit);
typeReferenceCollector.Process(TranslationUnit, filterNamespaces: false);
var includes = new SortedSet<string>(StringComparer.InvariantCulture);
@ -75,7 +75,7 @@ namespace CppSharp.Generators.CLI @@ -75,7 +75,7 @@ namespace CppSharp.Generators.CLI
public void GenerateForwardRefs(Namespace @namespace)
{
var typeReferenceCollector = new CLITypeReferenceCollector(Driver.TypeDatabase);
typeReferenceCollector.Process(@namespace);
typeReferenceCollector.Process(@namespace, filterNamespaces: true);
// Use a set to remove duplicate entries.
var forwardRefs = new SortedSet<string>(StringComparer.InvariantCulture);

2
src/Generator/Generators/CLI/CLISourcesTemplate.cs

@ -55,7 +55,7 @@ namespace CppSharp.Generators.CLI @@ -55,7 +55,7 @@ namespace CppSharp.Generators.CLI
PushBlock(CLIBlockKind.IncludesForwardReferences);
var typeReferenceCollector = new CLITypeReferenceCollector(Driver.TypeDatabase);
typeReferenceCollector.Process(TranslationUnit);
typeReferenceCollector.Process(TranslationUnit, filterNamespaces: false);
var includes = new SortedSet<string>(StringComparer.InvariantCulture);

29
src/Generator/Generators/CLI/CLITypeReferences.cs

@ -43,7 +43,19 @@ namespace CppSharp.Generators.CLI @@ -43,7 +43,19 @@ namespace CppSharp.Generators.CLI
return @ref;
}
public void Process(Namespace @namespace)
static Namespace GetEffectiveNamespace(Declaration decl)
{
if (decl == null || decl.Namespace == null)
return null;
var @namespace = decl.Namespace as Namespace;
if (@namespace != null)
return @namespace;
return GetEffectiveNamespace(@namespace);
}
public void Process(Namespace @namespace, bool filterNamespaces)
{
var collector = new RecordCollector(@namespace.TranslationUnit);
@namespace.Visit(collector);
@ -55,14 +67,17 @@ namespace CppSharp.Generators.CLI @@ -55,14 +67,17 @@ namespace CppSharp.Generators.CLI
if (record.Value is Namespace)
continue;
var declNamespace = record.Value.Namespace;
if (filterNamespaces)
{
var declNamespace = GetEffectiveNamespace(record.Value.Namespace);
var isSameNamespace = declNamespace == @namespace;
if (declNamespace != null)
isSameNamespace |= declNamespace.QualifiedName == @namespace.QualifiedName;
var isSameNamespace = declNamespace == @namespace;
if (declNamespace != null)
isSameNamespace |= declNamespace.QualifiedName == @namespace.QualifiedName;
if (!isSameNamespace)
continue;
if (!isSameNamespace)
continue;
}
record.Value.Visit(this);
GenerateInclude(record);

Loading…
Cancel
Save