Uploaded image for project: 'Velocity'
  1. Velocity
  2. VELOCITY-761

Can not reference a property declared in a super-interface and implemented in a non-public class

Attach filesAttach ScreenshotVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Not A Bug
    • Affects Version/s: 1.6.3
    • Fix Version/s: None
    • Component/s: Engine
    • Labels:
      None

      Description

      Consider the following:

      public interface MyUser extends java.security.Principal

      { String getEmailAddress(); }

      class MyUserImpl implements MyUser {
      public String getName()

      { ... }
      public String getEmailAddress() { ... }

      }

      If I put a MyUserImpl in my Velocity context, $user.emailAddress will resolve, but $user.name will not.

      This is a problem with ClassMap#createMethodCache(). It ignores methods declared on the MyUserImpl class because the class is non-public, and it only looks up one level in the Interface hierarchy for methods defined on interfaces: so it will go up as far as the MyUser interface but not as far as the Principal interface.

        Attachments

        Issue Links

          Activity

            People

            • Assignee:
              Unassigned
              Reporter:
              carlfish Charles Miller

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment