Как переименовать сгенерированные SWIG Java Proxy классы, созданные из типов перечисления C - PullRequest
1 голос
/ 10 декабря 2011

Я пытаюсь использовать переименование SWIG, чтобы изменить имя автоматически сгенерированного прокси-класса Java, test_cache_t.java на Example.java. Я попробовал следующее, так как он отлично работает для структур C согласно этому вопросу , но он не работает для перечислений C. Есть идеи? Я получаю некоторые предупреждения, которые не совсем приводят меня к проблеме ...

%module Example

%rename (Example) test_cache_t_;
typedef enum test_cache_t_ {
    CACHE_FALSE = 0,
    CACHE_TRUE = 1
} test_cache_t;

%{
  #include "Example.h"
%}
%include "Example.h"
[exec] /test/include/Example.h:84: Warning 302: Identifier 'test_cache_t' redefined (ignored) (Renamed from 'test_cache_t_'),
[exec] test.i:7: Warning 302: previous definition of 'test_cache_t' (Renamed from 'test_cache_t_').
[exec] /test/include/Example.h:82: Warning 302: Identifier 'CACHE_FALSE' redefined (ignored),
[exec] test.i:5: Warning 302: previous definition of 'CACHE_FALSE'.
[exec] /test/include/Example.h:84: Warning 302: Identifier 'CACHE_TRUE' redefined (ignored),
[exec] test.i:7: Warning 302: previous definition of 'CACHE_TRUE'.

1 Ответ

1 голос
/ 10 декабря 2011

У меня здесь две проблемы, я думаю:

  1. Ваш модуль имеет то же имя, что и ваш (%rename d) тип, поэтому у вас есть две вещи, которые хотят быть Example.java.

    Решение: измените имя модуля или новое имя с %rename

  2. Похоже, вы предоставили SWIG два определения одного и того же enum, один раз в файле интерфейса и один раз в файле заголовка.

    Решение: возможно, удалите typedef enum test_cache_t_ из файла интерфейса, в качестве альтернативы используйте %ignore перед %include или вообще удалите %include.

Мой окончательный интерфейсный файл при тестировании выглядел так:

%module SomeOtherName

%{
  #include "Example.h"
%}

%rename (Example) test_cache_t;

%include "Example.h"

Как ни странно, чтобы это работало, мне пришлось использовать имя typedef в %rename, а не enum. Я не совсем уверен, почему это похоже на случай с struct / class.

...