Hi Chris!

> [ not a review ]

[feedback is always welcome, especially from you]

> I think that the approach is reasonable (to inject ’test’ into the package 
> name between the reverse DNS prefix and the specific logical technology 
> suffix).

It's actually '.tests'... Robert (Muir) suggested .test as well but I
must have added that extra 's' somewhere along the line and I didn't
have the heart to redo all the refactorings...

> I’ve played a little with similar in the Elasticsearch codebase - but not yet 
> advanced it to a point that eliminates all split packages.

ES is much larger and more complex, so I'm not surprised. Same like
Solr. Lucene is relatively simple -- lots of code but all of the
modules are fairly simple structure-wise. Makes such experiments more
approachable.

> TestSecrets also seems reasonable. It’s a pity that it intrudes somewhat on 
> the actual product code, but not to any extent that would be concerning.

This is quite funny - I actually reengineered the internal-package
trick, although my version looked slightly different (it had public
methods returning the "secret" accessors, although they couldn't be
instantiated by anything else than the internal package - you can see
it in the commit history... then I recalled that the JDK had a similar
solution and peeked at how that was done. I thought it was nicer as it
didn't pollute the API. So now you know whom I borrowed the idea from
- you. :)

The only difference is the use of unsafe to make sure classes have
their static blocks invoked. I didn't want to bring unsafe into the
mix and used Class.forName(apiClazz.getName()). I don't think this can
have any side-effects whatsoever and the contract on this variant of
forName has the initialization flag on, so it seems to be safe -
correct me if I'm wrong though.

> It’s great that you can now have a test_framework module. And, from what I 
> can see, the moduleXXX configurations that you introduced recently work just 
> fine for the Gradle dependency configuration.

I have to admit this works rather nicely. There are some rough corners
we discovered already but I think they're all fixable with relative
easy -
https://issues.apache.org/jira/browse/LUCENE-10328

I'm sure in the end this could be extracted into a more reusable
gradle plugin, probably replacing the built-in support for modules,
but for the time being it's just easier to work with those separate
gradle scripts.

> Once this is in, then it will be possible to patch area specific unit tests 
> into the actual product module and `require` the framework, right?

Yes, I think this is doable. It's what Uwe has been asking for - his
panama branch currently requires tricks that shouldn't be there.

> And if we had that, it’s not a big leap to maybe refactor some of the secrets 
> to be injected too ( but I accept that that is not really necessary either, 
> and I’m not sure how the IDEs or Gradle would like this )

What secrets do you have in mind here? As for IDEs: IntelliJ should
work fine as it converts each source set into a logical dependency
unit. I don't think how Eclipse can be made to digest all this - for
now, we create a big bag of sources without submodule demarcation. So
it compiles, although is far from ideal.

Dawid

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to