Requiring public is also a form of documentation for implementers and
maintainers that this method is meant to be called by someone else.

All our arguments have been around best practices.

I think the only technical argument is that if a runner today chooses to
execute with a security manager, it may disallow making private methods
accessible. From my knowledge, none of the runners currently use a security
manager so its a weak point.

On Tue, Jan 17, 2017 at 10:07 AM, Stas Levin <stasle...@gmail.com> wrote:

> We stumbled across this issue when we were doing some Scala-Java interop
> and had an anonymous class that was supposed to have an element processing
> method. The Scala compiler had decided to make that method private, and so
> it was not visible to Beam. While extracting this class to an upper level
> (i.e., non-anonymous) solved the problem, it made me wonder.
>
> I can see the "overrides-in-spirit" point, but since it's not really an
> interface in the regular sense (e.g., no polymorphism) I can also imagine
> cases where users may want to encapsulate (i.e. make private) the element
> processing logic inside a class. It's already a reflection based mechanism
> so the difference between inspecting public only vs. all may not be that
> big, and as far as users are concerned both are "magic" :)
>
> IMHO, the same argument could apply to JUnit, and as a JUnit user, I'm not
> sure I can see the benefit of forcing test methods and rules to be public
> in the scope of a test class. Some would even say this may not be ideal in
> terms of encapsulation. I might be missing something here, so I wanted to
> get some more perspective.
>
> On Tue, Jan 17, 2017 at 6:47 PM Ben Chambers <bchamb...@google.com.invalid
> >
> wrote:
>
> > We thought about it when this was added. We decided against it because
> > these are overrides-in-spirit. Letting them be private would be
> misleading
> > because they are called from outside the class and should be thought of
> in
> > that way.
> >
> > Also, this seems similar to others in the Java ecosystem: JUnit test
> > methods are public as well.
> >
> > What is the motivation for allowing private methods?
> >
> >
> > On Tue, Jan 17, 2017, 7:33 AM Stas Levin <stasle...@gmail.com> wrote:
> >
> > Hi,
> >
> > At the moment only public methods are eligible to be decorated with
> > @ProcessElement (DoFnSignatures#findAnnotatedMethod).
> >
> > Seems that from a technical point of view, it would be quite possible to
> > consider private methods as well. In fact, it's one of the benefits of
> > moving towards an annotation based discovery as opposed to an interface
> > based one.
> >
> > Do you think being able to decorate non-public methods with
> @ProcessElement
> > (and similar annotations) is something we'd like to support?
> >
> > Regards,
> > Stas
> >
>

Reply via email to