Java Introspection for Local and Anonymous Classes

Resolve Bottlenecks,
Find Innovative Solutions
Generate Solutions

Solution Overview

Problem

The existing Java programming language's introspection mechanisms, specifically the Core Reflection API, cannot determine the class that defines a generic type variable for local or anonymous classes, limiting the ability to provide accurate introspection support for these types of classes.

Innovation Solution

Implementing a method called 'getEnclosingClass()' that identifies the enclosing class for local or anonymous classes, and emitting this information into the binary class file during compilation, allowing run-time environments to determine the enclosing class and its generic type variables.

Engineering Contradictions & Design Principles

VSEngineering Contradiction Analysis

1Loss of information

If the Core Reflection API is used for introspection, then reflective information can be obtained for standard classes, but the ability to determine the enclosing class for local or anonymous classes is lost

Engineering Contradiction:
Improveintrospection informationVSAvoidsupport for local and anonymous classes
Core Design Contradiction:
Loss of informationVSAdaptability or versatility

Solution Approach 1:

The compiler performs preliminary action by emitting enclosing class information into the binary class file during compilation. This preliminary emission of metadata enables the run-time environment to later determine the enclosing class without requiring additional runtime analysis or reflection mechanisms.

Inventive Principle:
Principle #10Preliminary action

Solution Approach 2:

The binary class file serves as an intermediary medium that carries enclosing class information from the compilation phase to the run-time environment. This intermediary storage mechanism bridges the gap between compile-time class structure information and run-time introspection capabilities.

Inventive Principle:
Principle #24Intermediary (Mediator)

2Reliability

If generic type variables are used in local or anonymous classes, then type safety and flexibility are improved, but the ability to introspect the defining class is lost

Engineering Contradiction:
Improvetype safetyVSAvoiddefining class information
Core Design Contradiction:
ReliabilityVSLoss of information

Solution Approach 1:

The compiler emits defining class information as part of the compilation process, preserving generic type variable context before the class is instantiated and used at run-time. This preliminary preservation of type information enables subsequent introspection while maintaining the type safety benefits of generic types.

Inventive Principle:
Principle #10Preliminary action

3Loss of information

If introspection mechanisms are enhanced to support local and anonymous classes, then complete reflective information is achieved, but the complexity of the reflection API increases

Engineering Contradiction:
Improveenclosing class informationVSAvoidreflection API
Core Design Contradiction:
Loss of informationVSDevice complexity

Solution Approach 1:

By performing the complex task of tracking enclosing classes during compilation and emitting the information as simple metadata in the binary class file, the system avoids the need for complex run-time reflection mechanisms. The complexity is shifted to the compile-time phase where it can be handled more efficiently.

Inventive Principle:
Principle #10Preliminary action

Data Source

PatentUS7669184B2Introspection support for local and anonymous classes
Publication Date: 2010.02.23 ORACLE AMERICAN INC
  • US7669184B2 patent drawing
  • US7669184B2 patent drawing
  • US7669184B2 patent drawing

AI summary

A technique in accordance with one embodiment of the present invention provides introspection support for anonymous and local classes. As a result of the technique, an enclosing class that defines a generic type variable that is not defined within a local or anonymous class that refers to the generic type variable can be determined. According to one embodiment of the invention, when a compiler determines that a particular class is a local or anonymous class, the compiler emits, into the particular class' binary class file, information that indicates which class encloses the particular class. In response to the invocation of a method (described herein) relative to a reflective proxy that corresponds to an enclosed class, information that identifies an enclosing class that encloses the enclosed class is returned. This is so even if the enclosed class is a local or anonymous class.