For the LoadIncrementalHFiles class, the IA.Public annotation itself is a problem. It should be IA.LimitPrivate(TOOLS). So I'm fine with either adding the method back or not, the opinion of the release manager is most important I think.
Thanks. Viraj Jasani <[email protected]> 于2020年6月26日周五 下午9:50写道: > Agree on replacing VFT in next 2.4.0 or 3.0.0 release and restoring the > required > method for now to unblock 2.3.0 RC1. > > > On 2020/06/26 01:11:31, Andrew Purtell <[email protected]> wrote: > > Sounds fine to me. > > > > My earlier objection was to talk of an HBase 3 followed by an HBase 4. We > > don't need to do a full deprecation cycle across two major versions to > > remove an annotation that never promised public access. (By definition, > > tagged fields and members were VisibleForTesting (only). The 'only' was > > implied, but I think a reasonable assumption and common knowledge.) > > > > On Thu, Jun 25, 2020 at 3:48 PM Sean Busbey <[email protected]> wrote: > > > > > Agree on restoring the member and then getting this done for 2.4.0. > > > > > > > > > On Thu, Jun 25, 2020, 15:02 Nick Dimiduk <[email protected]> wrote: > > > > > > > And now by module, > > > > > > > > $ find . -iname '*.java' -exec grep -n '@VisibleForTesting' {} \+ | > cut > > > -d/ > > > > -f2 | sort | uniq -c > > > > 6 hbase-backup > > > > 87 hbase-client > > > > 40 hbase-common > > > > 1 hbase-endpoint > > > > 7 hbase-hadoop-compat > > > > 3 hbase-http > > > > 18 hbase-mapreduce > > > > 1 hbase-metrics-api > > > > 24 hbase-procedure > > > > 10 hbase-replication > > > > 456 hbase-server > > > > 2 hbase-thrift > > > > 1 hbase-zookeeper > > > > > > > > I prefer we not make this change a prerequisite to 2.3. I would > rather we > > > > restore the one method modified by HBASE-24221 and do the work for > > > > VisibleForTesting for 2.4.0. > > > > > > > > On Thu, Jun 25, 2020 at 12:57 PM Nick Dimiduk <[email protected]> > > > wrote: > > > > > > > > > On Thu, Jun 25, 2020 at 12:36 PM Andrew Purtell < > [email protected]> > > > > > wrote: > > > > > > > > > >> I think we are in agreement except for a need to have a > deprecation > > > > cycle. > > > > >> Just remove VisibleForTesting and replace with whatever > alternative > > > you > > > > >> like. Certainly in the next minors. No strong opinion either way > about > > > > >> patch releases, leave as is? > > > > >> > > > > > > > > > > Thanks Andrew and Bharath, I now better understand your positions. > > > > > > > > > > The annotation is fairly common in our codebase, from branch-2.3, > > > > > > > > > > $ find . -iname '*.java' -exec grep -n '@VisibleForTesting' {} \+ > | wc > > > -l > > > > > 668 > > > > > > > > > > I don't have an easy way to cross-reference this with our AI > > > annotations, > > > > > but my concern is that any change we make here without a > deprecation > > > > cycle > > > > > will be disruptive to users. > > > > > > > > > > On Thu, Jun 25, 2020 at 11:30 AM Nick Dimiduk <[email protected] > > > > > > wrote: > > > > >> > > > > >> > On Wed, Jun 24, 2020 at 3:19 PM Andrew Purtell < > [email protected] > > > > > > > > >> > wrote: > > > > >> > > > > > >> > > It is possible some users may not understand what Guava's > > > > >> > VisibleForTesting > > > > >> > > implies, but those users are much more likely to be Java > > > developers > > > > or > > > > >> > Java > > > > >> > > developer adjacent, and familiar with what this fad entailed. > Such > > > > >> > tagging > > > > >> > > was/is done specifically to indicate the exposed field or > method > > > was > > > > >> only > > > > >> > > made to allow test access to internals, as something less than > > > > public. > > > > >> > > > > > > >> > > For us to treat such annotated fields and methods as public > after > > > > all > > > > >> is > > > > >> > > unnecessary, possibly surprising, and not semantically sound > > > (IMHO). > > > > >> > > > > > > >> > > > > > >> > I don't want to preserve use of VisibleForTesting as an > indicator of > > > > >> public > > > > >> > API. I want to ensure that we're clear to our downstream users > > > > >> > that its presence is not a factor in determining public API. For > > > > >> example, I > > > > >> > don't want to update our book to give any meaning to this > > > annotation, > > > > >> and I > > > > >> > don't want to update our javadoc filters to take it into account > > > when > > > > >> > generating the various versions of javadoc that we publish. I > want > > > to > > > > >> purge > > > > >> > it from the discussion by annotating the methods it decorates > with > > > the > > > > >> > symbols we do use to define our public API. The steps I propose > > > above > > > > >> are > > > > >> > my suggestion of how we work toward that goal. > > > > >> > > > > > >> > Does anyone have a counter-proposal to the steps I've outlined > > > above? > > > > A > > > > >> > resolution to this discussion is now the final blocker on > 2.3.0rc1. > > > > >> > > > > > >> > Thanks, > > > > >> > Nick > > > > >> > > > > > >> > On Wed, Jun 24, 2020 at 2:53 PM Sean Busbey <[email protected]> > > > > wrote: > > > > >> > > > > > > >> > > > Andrew are you specifically opposed to using a deprecation > cycle > > > > to > > > > >> > > > formally label as private anything that currently has a > > > > >> > VisibleForTesting > > > > >> > > > annotation? > > > > >> > > > > > > > >> > > > On Wed, Jun 24, 2020, 16:07 Andrew Purtell < > [email protected] > > > > > > > > >> > wrote: > > > > >> > > > > > > > >> > > > > I am -1 on treating VisibleForTesting as public API. > > > > Semantically > > > > >> it > > > > >> > > > makes > > > > >> > > > > no sense. > > > > >> > > > > > > > > >> > > > > On Wed, Jun 24, 2020 at 12:22 PM Nick Dimiduk < > > > > >> [email protected]> > > > > >> > > > wrote: > > > > >> > > > > > > > > >> > > > > > I'd like to get this [DISCUSS] wrapped up so we can > proceed > > > > with > > > > >> > > > release > > > > >> > > > > > candidates. > > > > >> > > > > > > > > > >> > > > > > I don't see a clear consensus here. The conclusion I > read is > > > > >> that > > > > >> > > > > > developers generally intended the VisibleForTesting > > > annotation > > > > >> to > > > > >> > > > > indicate > > > > >> > > > > > a method is not a part of our public API, but because we > > > don't > > > > >> > > > explicitly > > > > >> > > > > > say this in our guide, we can't really stand on that > for the > > > > >> > > community. > > > > >> > > > > > > > > > >> > > > > > I propose we take the following, conservative steps > going > > > > >> forward: > > > > >> > > > > > > > > > >> > > > > > 1. restore any VisibleForTesting method signatures for > > > 2.3.0, > > > > >> treat > > > > >> > > > this > > > > >> > > > > as > > > > >> > > > > > public API going forward. > > > > >> > > > > > 2. annotate any existing methods carrying the > > > > VisibleForTesting > > > > >> > > > > annotation > > > > >> > > > > > as Deprecated in 2.3.x+, for removal in 4.0.0 > > > > >> > > > > > 3. purge the VisibleForTesting annotation from our > codebase > > > > for > > > > >> > > 4.0.0, > > > > >> > > > > > involving: > > > > >> > > > > > 3a. replace VisibleForTesting with IA.Private anywhere > > > method > > > > >> > > > visibility > > > > >> > > > > > cannot be limited > > > > >> > > > > > 3b. perhaps add a new Yetus check that would ban new > use of > > > > >> > > > > > VisibleForTesting > > > > >> > > > > > > > > > >> > > > > > Did I miss anything? > > > > >> > > > > > > > > > >> > > > > > Thanks, > > > > >> > > > > > Nick > > > > >> > > > > > > > > > >> > > > > > On Wed, Jun 24, 2020 at 12:22 AM Viraj Jasani < > > > > >> [email protected]> > > > > >> > > > > wrote: > > > > >> > > > > > > > > > >> > > > > > > +1 to "be clear in javadoc" and to the fact that guava > > > > >> dependency > > > > >> > > > just > > > > >> > > > > to > > > > >> > > > > > > express intention which can be done through javadoc > is not > > > > >> > > > > > > required unless the library is capable of breaking > > > > >> compilation of > > > > >> > > > > > > downstream > > > > >> > > > > > > projects if they use VFT annotated classes/methods > saying > > > > you > > > > >> > can't > > > > >> > > > use > > > > >> > > > > > > this > > > > >> > > > > > > (what if we have such fancy thing? :) ). > > > > >> > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > On 2020/06/23 20:01:40, Sean Busbey < > [email protected]> > > > > >> wrote: > > > > >> > > > > > > > +1 to "do it in javadoc" unless there's some magic > for > > > > IDEs > > > > >> > > brought > > > > >> > > > > > about > > > > >> > > > > > > > via the VFT annotation that I'm missing. > > > > >> > > > > > > > > > > > >> > > > > > > > On Tue, Jun 23, 2020, 13:04 Andrew Purtell < > > > > >> > [email protected]> > > > > >> > > > > > wrote: > > > > >> > > > > > > > > > > > >> > > > > > > > > I don't find the VisibleForTesting annotation > > > provides a > > > > >> lot > > > > >> > of > > > > >> > > > > > value. > > > > >> > > > > > > It > > > > >> > > > > > > > > became fashionable to use this annotation when a > > > single > > > > >> line > > > > >> > of > > > > >> > > > > > Javadoc > > > > >> > > > > > > > > would serve the same purpose and not make yet > another > > > > >> > > dependency > > > > >> > > > on > > > > >> > > > > > > Guava. > > > > >> > > > > > > > > My advice is to remove them all and replace with > > > > Javadoc. > > > > >> > > > > > > > > > > > > >> > > > > > > > > Even if in an IA.Public or LimitedPrivate we can > > > > decorate > > > > >> > > > > individual > > > > >> > > > > > > > > field/methods that are public but not intended to > be > > > > part > > > > >> of > > > > >> > > the > > > > >> > > > > > public > > > > >> > > > > > > > > portion of the API with a field or method level > > > > IA.Private > > > > >> > > > > > decoration. > > > > >> > > > > > > It's > > > > >> > > > > > > > > maybe not nice to do, but that would directly and > > > > clearly > > > > >> > > express > > > > >> > > > > > > intent. > > > > >> > > > > > > > > > > > > >> > > > > > > > > On Tue, Jun 23, 2020 at 10:15 AM Sean Busbey < > > > > >> > > [email protected]> > > > > >> > > > > > > wrote: > > > > >> > > > > > > > > > > > > >> > > > > > > > > > I think the intent behind VisibleForTesting is > > > clear: > > > > >> the > > > > >> > > > person > > > > >> > > > > > > using > > > > >> > > > > > > > > that > > > > >> > > > > > > > > > annotation does not intend for it to be used by > > > > >> > > downstreamers. > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > However, our stated API promises are in terms > of the > > > > >> > > Interface > > > > >> > > > > > > Audience > > > > >> > > > > > > > > > annotations only. So I think a downsteamer who > e.g. > > > > used > > > > >> > > > > automated > > > > >> > > > > > > > > tooling > > > > >> > > > > > > > > > to ensure they only used things marked IA.Public > > > would > > > > >> be > > > > >> > > > correct > > > > >> > > > > > to > > > > >> > > > > > > be > > > > >> > > > > > > > > > upset with us if we incompatibly changed an > > > IA.Public > > > > >> > member > > > > >> > > > that > > > > >> > > > > > is > > > > >> > > > > > > > > > annotated VisibleForTesting. > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > Given that VisibleForTesting is in guava and we > go > > > to > > > > >> pains > > > > >> > > to > > > > >> > > > > > about > > > > >> > > > > > > > > > exposing downstream to non-relocated guava I > think > > > it > > > > >> would > > > > >> > > be > > > > >> > > > a > > > > >> > > > > > bad > > > > >> > > > > > > idea > > > > >> > > > > > > > > > to use it when defining our public API. > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > We should find places that use it, make sure > they > > > also > > > > >> > carry > > > > >> > > an > > > > >> > > > > > > > > IA.Private > > > > >> > > > > > > > > > if needed, and make sure our docs for > developers are > > > > >> clear > > > > >> > > > about > > > > >> > > > > > > which > > > > >> > > > > > > > > > annotations carry meaning for downstreamers > (i.e. > > > only > > > > >> > > > Interface > > > > >> > > > > > > Audience > > > > >> > > > > > > > > > and Interface Stability). > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > On Tue, Jun 23, 2020, 11:29 Nick Dimiduk < > > > > >> > > [email protected]> > > > > >> > > > > > > wrote: > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > My hope is that we can clarify our policy and > > > update > > > > >> the > > > > >> > > book > > > > >> > > > > > > > > > accordingly. > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > On Tue, Jun 23, 2020 at 9:01 AM Wellington > > > > Chevreuil < > > > > >> > > > > > > > > > > [email protected]> wrote: > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > For the current problem, what is the > class? I > > > > >> think > > > > >> > > > > changing > > > > >> > > > > > a > > > > >> > > > > > > > > method > > > > >> > > > > > > > > > > > > signature for a protected method will only > > > break > > > > >> the > > > > >> > > > > > > compatibility > > > > >> > > > > > > > > > when > > > > >> > > > > > > > > > > > > users extend the class. > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > This specific case is > > > > >> > > > > > *LoadIncrementalHFiles.tryAtomicRegionLoad, > > > > >> > > > > > > > > > *mostly > > > > >> > > > > > > > > > > > an end user tool, not likely to be extended. > > > Bring > > > > >> back > > > > >> > > the > > > > >> > > > > > > original > > > > >> > > > > > > > > > > method > > > > >> > > > > > > > > > > > would not be much of an issue, though, I > guess > > > the > > > > >> > > > discussion > > > > >> > > > > > is > > > > >> > > > > > > more > > > > >> > > > > > > > > > on > > > > >> > > > > > > > > > > > how to interpret @VisibleForTesting in > general. > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > Em ter., 23 de jun. de 2020 às 15:42, 张铎(Duo > > > > Zhang) > > > > >> < > > > > >> > > > > > > > > > > [email protected] > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > escreveu: > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > Technically, I do not think the developer > who > > > > >> makes a > > > > >> > > > field > > > > >> > > > > > or > > > > >> > > > > > > > > method > > > > >> > > > > > > > > > > > > public for an IA.Public class but marks it > > > with > > > > >> > > > > > > @VisibleForTesting, > > > > >> > > > > > > > > > > > > actually wants to expose this field or > method > > > to > > > > >> end > > > > >> > > > users. > > > > >> > > > > > > > > > > > > But this could be a problem for end > users, so > > > I > > > > >> think > > > > >> > > we > > > > >> > > > > > should > > > > >> > > > > > > > > avoid > > > > >> > > > > > > > > > > > doing > > > > >> > > > > > > > > > > > > this on an IA.Public class in the future. > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > For the current problem, what is the > class? I > > > > >> think > > > > >> > > > > changing > > > > >> > > > > > a > > > > >> > > > > > > > > method > > > > >> > > > > > > > > > > > > signature for a protected method will only > > > break > > > > >> the > > > > >> > > > > > > compatibility > > > > >> > > > > > > > > > when > > > > >> > > > > > > > > > > > > users extend the class. In fact, most of > the > > > > >> classes > > > > >> > in > > > > >> > > > our > > > > >> > > > > > > public > > > > >> > > > > > > > > > API > > > > >> > > > > > > > > > > > are > > > > >> > > > > > > > > > > > > not designed to be extended by end users. > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > Thanks. > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > Wellington Chevreuil < > > > > >> [email protected] > > > > >> > > > > > > >> > > > > > > > > 于2020年6月23日周二 > > > > >> > > > > > > > > > > > > 下午10:33写道: > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > My opinion expressed on the 2.3.0RC0 > thread > > > > was > > > > >> > that > > > > >> > > > > > > > > > > @VisibleForTesting > > > > >> > > > > > > > > > > > > > would flag class/method/variable as > > > private. I > > > > >> > > believe > > > > >> > > > > the > > > > >> > > > > > > > > > annotation > > > > >> > > > > > > > > > > > > label > > > > >> > > > > > > > > > > > > > is pretty suggestive and (I also > believe) > > > it's > > > > >> > common > > > > >> > > > > sense > > > > >> > > > > > > that > > > > >> > > > > > > > > it > > > > >> > > > > > > > > > > > > should > > > > >> > > > > > > > > > > > > > be treated as private by developers. I > don't > > > > >> think > > > > >> > > the > > > > >> > > > > fact > > > > >> > > > > > > it's > > > > >> > > > > > > > > > > > > > omitted from our guidelines changes > > > perception > > > > >> of > > > > >> > it. > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > Em ter., 23 de jun. de 2020 às 01:15, > > > Bharath > > > > >> > > > > Vissapragada > > > > >> > > > > > < > > > > >> > > > > > > > > > > > > > [email protected]> escreveu: > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > Sorry, I should've been clearer. It's > the > > > > >> former. > > > > >> > > My > > > > >> > > > > > point > > > > >> > > > > > > is, > > > > >> > > > > > > > > > any > > > > >> > > > > > > > > > > > > method > > > > >> > > > > > > > > > > > > > > tagged with @VisibleForTesting is only > > > > >> intended > > > > >> > for > > > > >> > > > > > testing > > > > >> > > > > > > > > > > purposes > > > > >> > > > > > > > > > > > > and > > > > >> > > > > > > > > > > > > > > should _not_ be considered public, its > > > > >> visibility > > > > >> > > > scope > > > > >> > > > > > is > > > > >> > > > > > > > > wider > > > > >> > > > > > > > > > > than > > > > >> > > > > > > > > > > > > > > necessary only because it was needed > by > > > some > > > > >> test > > > > >> > > > > method. > > > > >> > > > > > > > > That's > > > > >> > > > > > > > > > > how > > > > >> > > > > > > > > > > > > I'd > > > > >> > > > > > > > > > > > > > > interpret it (Actually, that's what I > > > > thought > > > > >> you > > > > >> > > > > meant, > > > > >> > > > > > > now > > > > >> > > > > > > > > I'm > > > > >> > > > > > > > > > > > > confused > > > > >> > > > > > > > > > > > > > > :-)). > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > On Mon, Jun 22, 2020 at 4:02 PM Nick > > > > Dimiduk < > > > > >> > > > > > > > > > [email protected]> > > > > >> > > > > > > > > > > > > > wrote: > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > On Mon, Jun 22, 2020 at 3:45 PM > Bharath > > > > >> > > > Vissapragada > > > > >> > > > > < > > > > >> > > > > > > > > > > > > > > [email protected]> > > > > >> > > > > > > > > > > > > > > > wrote: > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > I share the same opinion. Infact > > > hadoop > > > > >> (from > > > > >> > > > which > > > > >> > > > > > our > > > > >> > > > > > > > > > > > annotations > > > > >> > > > > > > > > > > > > > are > > > > >> > > > > > > > > > > > > > > > > derived I believe), talks about > this, > > > > >> "Also, > > > > >> > > > > certain > > > > >> > > > > > > APIs > > > > >> > > > > > > > > are > > > > >> > > > > > > > > > > > > > annotated > > > > >> > > > > > > > > > > > > > > > as > > > > >> > > > > > > > > > > > > > > > > @VisibleForTesting (from > > > > com.google.common > > > > >> > > > > > > > > > > > > > > > .annotations.VisibleForTesting) > > > > >> > > > > > > > > > > > > > > > > - these are meant to be used > strictly > > > > for > > > > >> > unit > > > > >> > > > > tests > > > > >> > > > > > > and > > > > >> > > > > > > > > > should > > > > >> > > > > > > > > > > > be > > > > >> > > > > > > > > > > > > > > > treated > > > > >> > > > > > > > > > > > > > > > > as “Private” APIs." > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > >> > > > > > > > > https://hadoop.apache.org/docs/r3.1.2/hadoop-project-dist/hadoop-common/InterfaceClassification.html > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Sorry Bharath, I don't follow. Are > you > > > > >> saying > > > > >> > "I > > > > >> > > > > share > > > > >> > > > > > > the > > > > >> > > > > > > > > > > opinion > > > > >> > > > > > > > > > > > > that > > > > >> > > > > > > > > > > > > > > the > > > > >> > > > > > > > > > > > > > > > VisibleForTesting annotation should > be > > > > >> > considered > > > > >> > > > as > > > > >> > > > > > > > > defining a > > > > >> > > > > > > > > > > > > method > > > > >> > > > > > > > > > > > > > as > > > > >> > > > > > > > > > > > > > > > IA.Private," and this is an omission > > > from > > > > >> our > > > > >> > > > > community > > > > >> > > > > > > > > > > guidelines > > > > >> > > > > > > > > > > > > > > > document? Or are you saying "no, it > does > > > > not > > > > >> > > count > > > > >> > > > as > > > > >> > > > > > an > > > > >> > > > > > > > > > > interface > > > > >> > > > > > > > > > > > > > > audience > > > > >> > > > > > > > > > > > > > > > marker," and we are obliged to treat > > > > methods > > > > >> > such > > > > >> > > > as > > > > >> > > > > in > > > > >> > > > > > > this > > > > >> > > > > > > > > > > > example > > > > >> > > > > > > > > > > > > as > > > > >> > > > > > > > > > > > > > > > public API? > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > Thanks, > > > > >> > > > > > > > > > > > > > > > Nick > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > On Mon, Jun 22, 2020 at 10:15 AM > Sean > > > > >> Busbey < > > > > >> > > > > > > > > > [email protected]> > > > > >> > > > > > > > > > > > > > wrote: > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > Yeah I would say no as well. We > > > should > > > > >> make > > > > >> > > > clear > > > > >> > > > > > on > > > > >> > > > > > > our > > > > >> > > > > > > > > > dev > > > > >> > > > > > > > > > > > > guide > > > > >> > > > > > > > > > > > > > > that > > > > >> > > > > > > > > > > > > > > > > you > > > > >> > > > > > > > > > > > > > > > > > also should be marking those > things > > > > >> with an > > > > >> > > > > > Interface > > > > >> > > > > > > > > > > Audience > > > > >> > > > > > > > > > > > > > > marking > > > > >> > > > > > > > > > > > > > > > if > > > > >> > > > > > > > > > > > > > > > > > you don't intend them to be at > the > > > > >> > downstream > > > > >> > > > API > > > > >> > > > > > > > > > visibility > > > > >> > > > > > > > > > > of > > > > >> > > > > > > > > > > > > the > > > > >> > > > > > > > > > > > > > > > > parent > > > > >> > > > > > > > > > > > > > > > > > class. > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > (IIRC we also use > VisibleForTesting > > > in > > > > >> > > > IA.Private > > > > >> > > > > > > classes > > > > >> > > > > > > > > > to > > > > >> > > > > > > > > > > > > > > > proactively > > > > >> > > > > > > > > > > > > > > > > > explain why some internal > looking > > > > >> member is > > > > >> > > at > > > > >> > > > a > > > > >> > > > > > > wider > > > > >> > > > > > > > > Java > > > > >> > > > > > > > > > > > > access > > > > >> > > > > > > > > > > > > > > > > scope.) > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > On Mon, Jun 22, 2020, 11:39 Nick > > > > >> Dimiduk < > > > > >> > > > > > > > > > > [email protected]> > > > > >> > > > > > > > > > > > > > > wrote: > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Hello, > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > This came up over on the > 2.3.0RC0 > > > > >> thread, > > > > >> > > so > > > > >> > > > > > let's > > > > >> > > > > > > open > > > > >> > > > > > > > > > it > > > > >> > > > > > > > > > > > for > > > > >> > > > > > > > > > > > > > > proper > > > > >> > > > > > > > > > > > > > > > > > > discussion. In that context, > we > > > > >> observe > > > > >> > > > method > > > > >> > > > > > > > > signature > > > > >> > > > > > > > > > > > > changes > > > > >> > > > > > > > > > > > > > > to a > > > > >> > > > > > > > > > > > > > > > > > > method marked with the Guava > > > > >> > > > VisibleForTesting > > > > >> > > > > > > > > > annotation. > > > > >> > > > > > > > > > > > The > > > > >> > > > > > > > > > > > > > > method > > > > >> > > > > > > > > > > > > > > > > is > > > > >> > > > > > > > > > > > > > > > > > a > > > > >> > > > > > > > > > > > > > > > > > > protected method on a > IA.Public > > > > class. > > > > >> > > There > > > > >> > > > is > > > > >> > > > > > no > > > > >> > > > > > > > > > > > method-level > > > > >> > > > > > > > > > > > > > IA > > > > >> > > > > > > > > > > > > > > > > > > annotation. > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Do we consider the > > > VisibleForTesting > > > > >> > > > annotation > > > > >> > > > > > as > > > > >> > > > > > > a > > > > >> > > > > > > > > > > > specifier > > > > >> > > > > > > > > > > > > > for > > > > >> > > > > > > > > > > > > > > > our > > > > >> > > > > > > > > > > > > > > > > > > compatibility guidelines? > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > I am of the opinion that no, > it is > > > > >> not an > > > > >> > > > > > > > > > InterfaceAudience > > > > >> > > > > > > > > > > > > > > > annotation, > > > > >> > > > > > > > > > > > > > > > > > and > > > > >> > > > > > > > > > > > > > > > > > > so it is not applicable for > > > defining > > > > >> our > > > > >> > > > public > > > > >> > > > > > > API. > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > What do you think? > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > Thanks, > > > > >> > > > > > > > > > > > > > > > > > > Nick > > > > >> > > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > > >> > > > > > > > > > > > > > > >> > > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > -- > > > > >> > > > > > > > > Best regards, > > > > >> > > > > > > > > Andrew > > > > >> > > > > > > > > > > > > >> > > > > > > > > Words like orphans lost among the crosstalk, > meaning > > > > torn > > > > >> > from > > > > >> > > > > > truth's > > > > >> > > > > > > > > decrepit hands > > > > >> > > > > > > > > - A23, Crosstalk > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > > > -- > > > > >> > > > > Best regards, > > > > >> > > > > Andrew > > > > >> > > > > > > > > >> > > > > Words like orphans lost among the crosstalk, meaning torn > from > > > > >> > truth's > > > > >> > > > > decrepit hands > > > > >> > > > > - A23, Crosstalk > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > >> > > > > > > >> > > -- > > > > >> > > Best regards, > > > > >> > > Andrew > > > > >> > > > > > > >> > > Words like orphans lost among the crosstalk, meaning torn from > > > > truth's > > > > >> > > decrepit hands > > > > >> > > - A23, Crosstalk > > > > >> > > > > > > >> > > > > > >> > > > > >> > > > > >> -- > > > > >> Best regards, > > > > >> Andrew > > > > >> > > > > >> Words like orphans lost among the crosstalk, meaning torn from > truth's > > > > >> decrepit hands > > > > >> - A23, Crosstalk > > > > >> > > > > > > > > > > > > > > > > > > -- > > Best regards, > > Andrew > > > > Words like orphans lost among the crosstalk, meaning torn from truth's > > decrepit hands > > - A23, Crosstalk > > >
