Uploaded image for project: 'Lucene - Core'
  1. Lucene - Core
  2. LUCENE-4753

Make forbidden API checks per-module

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Critical
    • Resolution: Fixed
    • None
    • 4.6
    • general/build
    • None
    • New

    Description

      After the forbidden API checker was released separately from Lucene as a Google Code project (forked and improved), including Maven support, the checks on Lucene should be changed to work per-module.

      The reason for this is: The improved checker is more picky about e.g. extending classes that are forbidden or overriding methods and calling super.method() if they are on the forbidden signatures list. For these checks, it is not enough to have the class files and the rt.jar, you need the whole classpath. The forbidden APIs 1.0 now by default complains if classes are missing from the classpath.

      It is very hard with the module architecture of Lucene/Solr, to make a uber-classpath, instead the checks should be done per module, so the default compile/test classpath of the module can be used and no crazy path statements with */.jar are needed. This needs some refactoring in the exclusion lists, but the Lucene checks could be done by a macro in common-build, that allows custom exclusion lists for specific modules.

      Currently, the "strict" checking is disabled for Solr, so the checker only complains about missing classes but does not fail the build:

      -check-forbidden-java-apis:
      [forbidden-apis] Reading bundled API signatures: jdk-unsafe-1.6
      [forbidden-apis] Reading bundled API signatures: jdk-deprecated-1.6
      [forbidden-apis] Reading bundled API signatures: commons-io-unsafe-2.1
      [forbidden-apis] Reading API signatures: C:\Users\Uwe Schindler\Projects\lucene\trunk-lusolr3\lucene\tools\forbiddenApis\executors.txt
      [forbidden-apis] Reading API signatures: C:\Users\Uwe Schindler\Projects\lucene\trunk-lusolr3\lucene\tools\forbiddenApis\servlet-api.txt
      [forbidden-apis] Loading classes to check...
      [forbidden-apis] Scanning for API signatures and dependencies...
      [forbidden-apis] WARNING: The referenced class 'org.apache.lucene.analysis.uima.ae.AEProviderFactory' cannot be loaded. Please fix the classpath!
      [forbidden-apis] WARNING: The referenced class 'org.apache.lucene.analysis.uima.ae.AEProviderFactory' cannot be loaded. Please fix the classpath!
      [forbidden-apis] WARNING: The referenced class 'org.apache.lucene.analysis.uima.ae.AEProvider' cannot be loaded. Please fix the classpath!
      [forbidden-apis] WARNING: The referenced class 'org.apache.lucene.collation.ICUCollationKeyAnalyzer' cannot be loaded. Please fix the classpath!
      [forbidden-apis] Scanned 2177 (and 1222 related) class file(s) for forbidden API invocations (in 1.80s), 0 error(s).
      

      I added almost all missing jars, but those do not seem to be in the solr part of the source tree (i think they are only copied when building artifacts). With making the whole thing per module, we can use the default classpath of the module which makes it much easier.

      Attachments

        1. LUCENE-4753.patch
          22 kB
          Uwe Schindler
        2. LUCENE-4753.patch
          21 kB
          Uwe Schindler
        3. LUCENE-4753.patch
          21 kB
          Uwe Schindler

        Activity

          People

            uschindler Uwe Schindler
            uschindler Uwe Schindler
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: