Skip to content

Should not generate wrappers for classes marked by CS_IGNORE #561

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
vonzepp opened this issue Sep 24, 2015 · 0 comments
Open

Should not generate wrappers for classes marked by CS_IGNORE #561

vonzepp opened this issue Sep 24, 2015 · 0 comments

Comments

@vonzepp
Copy link
Contributor

vonzepp commented Sep 24, 2015

I have 2 simple header files:
ClassA.h:

#pragma once
#define CS_IGNORE
#define DLL_API __declspec(dllexport)
#include "UnusedClassB.h"

class DLL_API ClassA
{
private:    
    CS_IGNORE UnusedClassB m_not_for_generation;
};

UnusedClassB.h

#pragma once
class UnusedClassB
{
};

Generator setup:

            setup.Options.Headers.AddRange(new []
            {
                "ClassA.h",
            });

UnusedClassB.h is not added to header files !
Generation output:

2>  Parsing libraries...
2>  Indexing library symbols...
2>  Parsing code...
2>  ignoring nonexistent directory "lib\clang\3.8.0\include"
2>  #include "..." search starts here:
2>  #include <...> search starts here:
2>   C:\src\Testproject
2>   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
2>   C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt
2>  End of search list.
2>  Parsed 'ClassA.h'
2>  ignoring nonexistent directory "lib\clang\3.8.0\include"
2>  #include "..." search starts here:
2>  #include <...> search starts here:
2>   C:\src\Testproject
2>   C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include
2>   C:\Program Files (x86)\Windows Kits\10\include\10.0.10150.0\ucrt
2>  End of search list.
2>  Processing code...
2>  Pass 'CppSharp.Passes.CleanUnitPass'
2>  Pass 'CppSharp.Passes.SortDeclarationsPass'
2>  Pass 'CppSharp.Passes.ResolveIncompleteDeclsPass'
2>  Pass 'CppSharp.Passes.CheckIgnoredDeclsPass'
2>      Decl 'm_not_for_generation' was ignored due to invalid access
2>  Pass 'CppSharp.Passes.CheckMacroPass'
2>      Decl 'm_not_for_generation' was ignored due to ignore macro
2>  Pass 'CppSharp.Passes.FindSymbolsPass'
2>  Pass 'CppSharp.Passes.CheckStaticClass'
2>  Pass 'CppSharp.Passes.MoveOperatorToClassPass'
2>  Pass 'CppSharp.Passes.MoveFunctionToClassPass'
2>  Pass 'CppSharp.Passes.GenerateAnonymousDelegatesPass'
2>  Pass 'CppSharp.Passes.MarshalPrimitivePointersAsRefTypePass'
2>  Pass 'CppSharp.Passes.CheckAmbiguousFunctions'
2>  Pass 'CppSharp.Passes.CheckOperatorsOverloadsPass'
2>      Invalid operator overload ClassA::Equal
2>      Invalid operator overload ClassA::Equal
2>      Invalid operator overload UnusedClassB::Equal
2>      Invalid operator overload UnusedClassB::Equal
2>  Pass 'CppSharp.Passes.CheckVirtualOverrideReturnCovariance'
2>  Pass 'CppSharp.Passes.CheckAbiParameters'
2>  Pass 'CppSharp.Passes.FieldToPropertyPass'
2>  Pass 'CppSharp.Passes.CleanInvalidDeclNamesPass'
2>  Pass 'CppSharp.Passes.CheckIgnoredDeclsPass'
2>  Pass 'CppSharp.Passes.CheckFlagEnumsPass'
2>  Pass 'CppSharp.Passes.CheckDuplicatedNamesPass'
2>  Pass 'CppSharp.Passes.RenameRootNamespacesPass'
2>  Pass 'CppSharp.Passes.GenerateAbstractImplementationsPass'
2>  Pass 'CppSharp.Passes.CheckVTableComponentsPass'
2>  Pass 'CppSharp.Passes.GetterSetterToPropertyPass'
2>  Generating code...
2>  Generated 'ClassA.cs'
2>  Generated 'UnusedClassB.cs'

Generated classA.cs:

public unsafe partial class ClassA : IDisposable
{
    [StructLayout(LayoutKind.Explicit, Size = 1)]
    internal partial struct Internal
    {
        [SuppressUnmanagedCodeSecurity]
        [DllImport("Quants.Storage.dll", CallingConvention = global::System.Runtime.InteropServices.CallingConvention.Cdecl,
            EntryPoint="??0ClassA@@QEAA@AEBV0@@Z")]
        internal static extern global::System.IntPtr cctor_1(global::System.IntPtr instance, global::System.IntPtr _0);
    }

As you can see 'm_not_for_generation' field does not generated due to CS_IGNORE (it's correct), but UnusedClassB.cs was generated! That's wrong. Generation for UnusedClassB should be ignored completely, because it is not specifyed directly and ClassA is not depend on it (in generated code).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant