Right now we assume that the generated code is in the same package of the target object. If the visibility is public or package private, then we generate code that uses the members directly. If they are protected or private, we use reflection.

We don't need to use reflection for protected cases as those members can be access within the same package.