Consider this C header:
```
struct Outer {
struct Inner { int x; } a;
};
typedef struct Inner T;
```
The generated code for T is like this:
```
public class T extends Outer.Inner { ... }
```
This is all good, but Outer.Inner is final:
```
public class Outer {
...
public static class Inner { ... }
}
```
So this program will fail to compile.
```
struct Outer {
struct Inner { int x; } a;
};
typedef struct Inner T;
```
The generated code for T is like this:
```
public class T extends Outer.Inner { ... }
```
This is all good, but Outer.Inner is final:
```
public class Outer {
...
public static class Inner { ... }
}
```
So this program will fail to compile.