JEP 235: Test Class-File Attributes Generated by javacJEP 235: Test Class-File Attributes Generated by javacAuthorMikhail KondratyevOwnerAndrei EremeevTypeFeatureScopeImplementationStatusClosed / DeliveredRelease9Componenttools / javacDiscussioncompiler dash dev at openjdk dot java dot netEffortMDurationMReviewed byAleksandre Iline, Jonathan GibbonsEndorsed byAleksandre IlineCreated2014/05/28 13:40Updated2016/10/10 16:16Issue8044127Summary
Write tests to verify the correctness of class-file attributes generated
by javac.
Goals
Create tests that check that all class-file attributes are generated
correctly even if such attributes are not used in a regular
compile-and-run scenario.  Additionally, document any existing such
tests.
Motivation
Class-file attributes have insufficient test coverage.  Optional
attributes and attributes which are not checked by the VM cannot be
tested by compiling input sources, running them, and verifying that the
compiled program behaves as expected. Lack of coverage leads to possible
bugs which only might be detected by external tools, such as debuggers.
A special test suite which will analyze class files and test class-file
attributes for correctness by some other means is needed.
Description
The common way to test files generated by javac is to run the compiled
classes and verify that the generated program behaves as expected.  This
approach does not work for optional class-file attributes, nor for
attributes that are not verified by VM, so these two kinds of attributes
must be tested by some other means.  Tests will be developed which will
accept Java source code as input, compile the source, read the class-file
attributes of the compiled class files, and verify their correctness.
Class-file attributes are divided into three groups, according to the
JVMS.
Optional attributes
These attributes are not critical to the correct operation of javac,
the JVM, or the class libraries, but they are used by tools.  Testing
these attributes is a high priority since they are not consumed by any
component of the JDK.

SourceFile
SourceDebugExtension
LineNumberTable
LocalVariableTable
LocalVariableTypeTable
Deprecated

Attributes not used by the JVM
These attributes are not used by the JVM but they are used by javac or
by the class libraries.  Testing these attributes is a medium priority.

InnerClasses
EnclosingMethod
Synthetic
Signature
RuntimeVisibleAnnotations
RuntimeInvisibleAnnotations
RuntimeVisibleParameterAnnotations
RuntimeInvisibleParameterAnnotations
RuntimeVisibleTypeAnnotations
RuntimeInvisibleTypeAnnotations
AnnotationDefault
MethodParameters

Attributes are used by the JVM
These attributes are checked by the JVM's byte-code verifier.  No further
testing needed.

ConstantValue
Code
StackMapTable
Exceptions
BootstrapMethods

Testing
To test these new tests we will check that the tests fail, with an
appropriate error message, when run against intentionally-corrupted class
files.
InstallingContributingSponsoringDevelopers' GuideVulnerabilitiesJDK GA/EA BuildsMailing listsWiki
                      · IRCBylaws · CensusLegalWorkshopJEP ProcessSource codeMercurialGitHubToolsGitjtreg harnessGroups(overview)AdoptionBuildClient LibrariesCompatibility & Specification ReviewCompilerConformanceCore LibrariesGoverning BoardHotSpotIDE Tooling & SupportInternationalizationJMXMembersNetworkingPortersQualitySecurityServiceabilityVulnerabilityWebProjects(overview,
      archive)AmberBabylonCRaCCaciocavalloClosuresCode ToolsCoinCommon VM InterfaceCompiler GrammarDetroitDevelopers' GuideDevice I/ODukeGalahadGraalIcedTeaJDK 7JDK 8JDK 8 UpdatesJDK 9JDK
      (…,
       21,
       22,
       23)JDK UpdatesJavaDoc.NextJigsawKonaKullaLambdaLanaiLeydenLilliputLocale EnhancementLoomMemory Model UpdateMetropolisMission ControlMulti-Language VMNashornNew I/OOpenJFXPanamaPenrosePort: AArch32Port: AArch64Port: BSDPort: HaikuPort: Mac OS XPort: MIPSPort: MobilePort: PowerPC/AIXPort: RISC-VPort: s390xPortolaSCTPShenandoahSkaraSumatraTiered AttributionTsanType AnnotationsValhallaVeronaVisualVMWakefieldZeroZGC

        © 2024 Oracle Corporation and/or its affiliates
        Terms of Use
        ·
        
            License: GPLv2
        · Privacy
        · Trademarks
