paulirwin commented on issue #1022:
URL: https://github.com/apache/lucenenet/issues/1022#issuecomment-2673451312
An update on this, since it's a big item and taking a while. So far, the
following are implemented:
- A Java tool to load Lucene packages from Maven and extracting their public
API to a JSON file
- A .NET CLI tool (and Powershell script to facilitate it) to load the
aforementioned JSON file, reflect over the specified Lucene.NET libraries,
compare differences, and generate a diff report
- The generation of both a JSON diff file (for programmatic use, if desired)
as well as an HTML report generated using Handlebars (this is my preferred way
to use this)
- Analysis of types in Lucene missing from Lucene.NET
- Analysis of types in Lucene.NET missing from Lucene
- Analysis of differences in modifiers of types between Lucene and
Lucene.NET, accounting for Java vs .NET differences (i.e. `final` vs `sealed`,
different meanings of `static` classes)
- Analysis of differences in base types
- A new Lucene.Net.Reflection namespace containing attributes and extension
methods to make it easier to reflect over Lucene.NET types. This includes:
- A `NoLuceneEquivalent` attribute to suppress things in Lucene.NET that
aren't in Lucene
- A `LuceneType` attribute to map a Lucene.NET type to a Lucene package
and type when the mapping can't be inferred by convention
- A `LuceneMavenMapping` assembly-level attribute to specify Maven
coordinates for the corresponding Lucene artifact
- A `LucenePackageMapping` assembly-level attribute to manually override
namespace-to-package mappings that can't be inferred by convention (i.e.
`org.apache.lucene` can be mapped to `Lucene.Net` by default, but pluralization
differences require this attribute)
- Extension methods on Assembly to get the package mappings
- A `GetLuceneTypeInfo` extension method on Type to get the corresponding
Lucene type info (either inferred or manually overridden via those attributes)
The following work remains:
- [ ] Attribute to suppress modifier differences
- [ ] Attribute to suppress base type differences
- [ ] Analysis of differences in interfaces
- [ ] Analysis of differences in fields and enum members
- [ ] Analysis of differences in constructors
- [ ] Analysis of differences in non-property methods
- [ ] Analysis of differences in .NET properties to Java getter/setter
methods
- [ ] CI build support for running this utility
- [ ] Determine feasibility of analyzing the Analysis.OpenNLP library
(targets a different Lucene version)
While this new utility certainly could go further than that longer-term
(i.e. analyzing attributes/annotations, unit tests, etc.) I think this should
be sufficient for our needs to get a feeling for how close our 4.8.0 release
will be to Lucene. Future work could be split out as separate issues.
And while I'm adding some manual mappings via attributes as part of testing
this work, I do not intend to address every API difference in this PR. Instead,
it will help inform what work remains in either finishing adding remaining
mappings, or, if there are things missing in Lucene.NET, what needs to be done
in separate issues to close the gap.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]