Browse Source

Removed unused internals from the generated C#.

Fixes https://github.com/mono/CppSharp/issues/936.

Signed-off-by: Dimitar Dobrev <dpldobrev@protonmail.com>
pull/942/head
Dimitar Dobrev 8 years ago
parent
commit
d4d6354621
  1. 4
      src/AST/ASTVisitor.cs
  2. 4
      src/AST/Class.cs
  3. 2
      src/AST/ClassExtensions.cs
  4. 2
      src/Generator/Driver.cs
  5. 2
      src/Generator/Generators/CLI/CLISources.cs
  6. 2
      src/Generator/Generators/CSharp/CSharpSources.cs
  7. 2
      src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs
  8. 47
      src/Generator/Passes/MarkUsedClassInternalsPass.cs

4
src/AST/ASTVisitor.cs

@ -1,5 +1,4 @@ @@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
namespace CppSharp.AST
@ -19,7 +18,6 @@ namespace CppSharp.AST @@ -19,7 +18,6 @@ namespace CppSharp.AST
public class AstVisitorOptions
{
public bool VisitDeclaration = true;
public bool VisitClassBases = true;
public bool VisitClassFields = true;
public bool VisitClassProperties = true;

4
src/AST/Class.cs

@ -164,7 +164,7 @@ namespace CppSharp.AST @@ -164,7 +164,7 @@ namespace CppSharp.AST
{
foreach (var @base in Bases)
{
if (@base.IsClass && @base.Class.IsDeclared)
if (@base.IsClass && @base.Class.IsGenerated)
return @base.Class;
}
@ -179,7 +179,7 @@ namespace CppSharp.AST @@ -179,7 +179,7 @@ namespace CppSharp.AST
return HasBaseClass && !IsValueType
&& Bases[0].Class != null
&& !Bases[0].Class.IsValueType
&& Bases[0].Class.GenerationKind != GenerationKind.None;
&& Bases[0].Class.IsGenerated;
}
}

2
src/AST/ClassExtensions.cs

@ -137,7 +137,7 @@ namespace CppSharp.AST @@ -137,7 +137,7 @@ namespace CppSharp.AST
if (@class.HasBaseClass)
@base = @class.Bases[0].Class;
var hasRefBase = @base != null && @base.IsRefType && @base.IsDeclared;
var hasRefBase = @base != null && @base.IsRefType && @base.IsGenerated;
return hasRefBase;
}

2
src/Generator/Driver.cs

@ -337,6 +337,8 @@ namespace CppSharp @@ -337,6 +337,8 @@ namespace CppSharp
if (Options.IsCSharpGenerator)
TranslationUnitPasses.AddPass(new SpecializationMethodsWithDependentPointersPass());
TranslationUnitPasses.AddPass(new MarkUsedClassInternalsPass());
if (Options.GeneratorKind == GeneratorKind.CLI ||
Options.GeneratorKind == GeneratorKind.CSharp)
TranslationUnitPasses.RenameDeclsUpperCase(RenameTargets.Any &~ RenameTargets.Parameter);

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

@ -707,7 +707,7 @@ namespace CppSharp.Generators.CLI @@ -707,7 +707,7 @@ namespace CppSharp.Generators.CLI
private bool GenerateClassConstructorBase(Class @class, Method method = null)
{
var hasBase = @class.HasBase && @class.Bases[0].IsClass && @class.Bases[0].Class.IsDeclared;
var hasBase = @class.HasBase && @class.Bases[0].IsClass && @class.Bases[0].Class.IsGenerated;
if (!hasBase)
return false;

2
src/Generator/Generators/CSharp/CSharpSources.cs

@ -327,7 +327,7 @@ namespace CppSharp.Generators.CSharp @@ -327,7 +327,7 @@ namespace CppSharp.Generators.CSharp
public override bool VisitClassDecl(Class @class)
{
if (@class.IsIncomplete && !@class.IsOpaque)
if ((@class.IsIncomplete && !@class.IsOpaque) || @class.Ignore)
return false;
if (@class.IsInterface)

2
src/Generator/Generators/CSharp/CSharpSourcesExtensions.cs

@ -74,7 +74,7 @@ namespace CppSharp.Generators.CSharp @@ -74,7 +74,7 @@ namespace CppSharp.Generators.CSharp
foreach (var parameter in @class.TemplateParameters)
gen.WriteLine($"var __{parameter.Name} = typeof({parameter.Name});");
foreach (var specialization in @class.Specializations.Where(s => !s.Ignore))
foreach (var specialization in @class.Specializations.Where(s => s.IsGenerated))
{
WriteTemplateSpecializationCheck(gen, @class, specialization);
gen.WriteStartBraceIndent();

47
src/Generator/Passes/MarkUsedClassInternalsPass.cs

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
using CppSharp.AST;
using CppSharp.AST.Extensions;
namespace CppSharp.Passes
{
public class MarkUsedClassInternalsPass : TranslationUnitPass
{
public MarkUsedClassInternalsPass()
{
VisitOptions.VisitClassBases = false;
VisitOptions.VisitClassMethods = false;
VisitOptions.VisitClassProperties = false;
VisitOptions.VisitEventParameters = false;
VisitOptions.VisitFunctionReturnType = false;
VisitOptions.VisitFunctionParameters = false;
VisitOptions.VisitNamespaceEnums = false;
VisitOptions.VisitNamespaceEvents = false;
VisitOptions.VisitNamespaceTemplates = false;
VisitOptions.VisitNamespaceVariables = false;
VisitOptions.VisitTemplateArguments = false;
}
public override bool VisitFieldDecl(Field field)
{
if (!base.VisitDeclaration(field))
return false;
Class @class;
if (field.Type.TryGetClass(out @class) && @class.Ignore)
{
DeclarationContext declarationContext = @class;
do
{
if (declarationContext.Ignore)
declarationContext.GenerationKind = GenerationKind.Internal;
declarationContext = declarationContext.Namespace;
} while (declarationContext != null);
var specialization = @class as ClassTemplateSpecialization;
if (specialization?.TemplatedDecl.TemplatedClass.Ignore == true)
specialization.TemplatedDecl.TemplatedClass.GenerationKind = GenerationKind.Internal;
}
return true;
}
}
}
Loading…
Cancel
Save