IP Library Granted Patent US 7,810,077
Granted Patent B2
US 7,810,077 · App. 11/109,540 · Granted Oct 5, 2010

Reifying generic types while maintaining migration compatibility

Assignee: Oracle America Inc.
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 7,810,077
App. No.
11/109,540
Granted
Oct 5, 2010
Kind
B2
Abstract

In accordance with one embodiment of the present invention, there is provided a technique for reifying generic types while maintaining migration compatibility. According to this technique, the actual type parameters that should be associated with a raw type, but which are not expressed in a binary file, are dynamically inferred at run time. The actual type parameters are inferred based on the run time usage of an object that is an instance of the raw type.

Claims (83)

1. A method for generic type reification, the method comprising:

determining, based on the usage of a first object at run time, a first actual type argument of a generic type of which the first object is an instance, wherein determining the first actual type argument comprises:

initially establishing the first actual type argument to be an uncertain type that is constrained by a first upper bound type and a first lower bound type,

updating the first upper bound type to a second upper bound type based on usage of the first object at runtime, and

updating the first lower bound type to a second lower bound type based on the usage of the first object at runtime,

wherein, after updating the first upper bound type and the first lower bound type, the first actual type argument is established as an uncertain type constrained by the second upper bound type and the second lower bound type;

generating data that indicates the first actual type argument; and

establishing an association between the first object and the data;

wherein a declaration of the generic type is of a form that specifies (a) a name of the generic type and (b) following the name, a formal type parameter of the generic type that does not express any actual type argument, but whose presence indicates that the generic type is a type that can contain one or more items that are of types that will be determined by an actual type argument that is to be specified in place of the formal type parameter in a subsequent invocation of the generic type;

wherein an invocation of the first object does not specify the first actual type argument.

2. The method of claim 1 , wherein updating the first lower bound type comprises:

determining, at run time, that a second object has been inserted into the first object; and

in response to determining that the second object has been inserted into the first object, performing steps comprising:

determining a particular type of which the second object is an instance; and

determining a most specific supertype of both the particular type and the constraining type,

wherein the second lower bound type is the most specific supertype.

3. The method of claim 1 , wherein determining the first actual type argument further comprises:

determining, at run time, that the first object has been passed to a programmatic method that accepts, as an input parameter, a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been passed to the programmatic method, updating the first actual type argument to be the second actual type argument.

4. The method of claim 1 , wherein determining the first actual type argument further comprises:

determining, at run time, that the first object has been assigned to a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been assigned to the second object, updating the first actual type argument to be the second actual type argument.

5. The method of claim 1 , wherein updating the first upper bound type comprises:

determining, at run time, that the first object has been passed to a programmatic method that accepts, as an input parameter, a second object that is of a generic type that is associated with a second actual type argument;

in response to determining that the first object has been passed to the programmatic method, determining whether the second actual type argument specifies an uncertain type that is constrained by a second upper bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second upper bound type, determining a least specific subtype of both the first upper bound type and the second upper bound type,

wherein the second upper bound type is the least specific subtype.

6. The method of claim 1 , wherein updating the first upper bound type comprises:

determining, at run time, that the first object has been assigned to a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been assigned to the second object, determining whether the second actual type argument specifies an uncertain type that is constrained by a second upper bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second upper bound type, determining a least specific subtype of both the first upper bound type and the second upper bound type,

wherein the second upper bound type is the least specific subtype.

7. The method of claim 1 , wherein updating the first lower bound type comprises:

determining, at run time, that the first object has been passed to a programmatic method that accepts, as an input parameter, a second object that is of a generic type that is associated with a second actual type argument;

in response to determining that the first object has been passed to the programmatic method, determining whether the second actual type argument specifies an uncertain type that is constrained by a second lower bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second lower bound type, determining a most specific supertype of both the first lower bound type and the second lower bound type,

wherein the second lower bound type is the most specific supertype.

8. The method of claim 1 , wherein updating the first lower bound type comprises:

determining, at run time, that the first object has been assigned to a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been assigned to the second object, determining whether the second actual type argument specifies an uncertain type that is constrained by a second lower bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second lower bound type, determining a most specific supertype of both the first lower bound type and the second lower bound type,

wherein the second lower bound type is the most specific supertype.

9. A volatile or non-volatile computer-readable storage medium storing one or more sequences of instructions, which instructions, when executed by one or more processors, cause the one or more processors to carry out the steps of:

determining, based on the usage of a first object at run time, a first actual type argument of a generic type of which the first object is an instance, wherein determining the first actual type argument comprises:

initially establishing the first actual type argument to be an uncertain type that is constrained by a first upper bound type and a first lower bound type,

updating the first upper bound type to a second upper bound type based on usage of the first object at runtime, and

updating the first lower bound type to a second lower bound type based on the usage of the first object at runtime,

wherein, after updating the first upper bound type and the first lower bound type, the first actual type argument is established as an uncertain type constrained by the second upper bound type and the second lower bound type;

generating data that indicates the first actual type argument; and

establishing an association between the first object and the data;

wherein a declaration of the generic type is of a form that specifies (a) a name of the generic type and (b) following the name, a formal type parameter of the generic type that does not express any actual type argument, but whose presence indicates that the generic type is a type that can contain one or more items that are of types that will be determined by an actual type argument that is to be specified in place of the formal type parameter in a subsequent invocation of the generic type;

wherein an invocation of the first object does not specify the first actual type argument.

10. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein updating the first lower bound type comprises:

determining, at run time, that a second object has been inserted into the first object; and

in response to determining that the second object has been inserted into the first object, performing steps comprising:

determining a particular type of which the second object is an instance; and

determining a most specific supertype of both the particular type and the constraining type,

wherein the second lower bound type is the most specific supertype.

11. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein determining the first actual type argument further comprises:

determining, at run time, that the first object has been passed to a programmatic method that accepts, as an input parameter, a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been passed to the programmatic method, updating the first actual type argument to be the second actual type argument.

12. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein determining the first actual type argument further comprises:

determining, at run time, that the first object has been assigned to a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been assigned to the second object, updating the first actual type argument to be the second actual type argument.

13. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein updating the first upper bound type comprises:

determining, at run time, that the first object has been passed to a programmatic method that accepts, as an input parameter, a second object that is of a generic type that is associated with a second actual type argument;

in response to determining that the first object has been passed to the programmatic method, determining whether the second actual type argument specifies an uncertain type that is constrained by a second upper bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second upper bound type, determining a least specific subtype of both the first upper bound type and the second upper bound type,

wherein the second upper bound type is the least specific subtype.

14. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein updating the first upper bound type comprises:

determining, at run time, that the first object has been assigned to a second object that is of a generic type that is associated with a second actual type argument; and in response to determining that the first object has been assigned to the second object, determining whether the second actual type argument specifies an uncertain type that is constrained by a second upper bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second upper bound type, determining a least specific subtype of both the first upper bound type and the second upper bound type,

wherein the second upper bound type is the least specific subtype.

15. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein updating the first lower bound type comprises:

determining, at run time, that the first object has been passed to a programmatic method that accepts, as an input parameter, a second object that is of a generic type that is associated with a second actual type argument;

in response to determining that the first object has been passed to the programmatic method, determining whether the second actual type argument specifies an uncertain type that is constrained by a second lower bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second lower bound type, determining a most specific supertype of both the first lower bound type and the second lower bound type,

wherein the second lower bound type is the most specific supertype.

16. The volatile or non-volatile computer-readable storage medium of claim 9 , wherein updating the first lower bound type comprises:

determining, at run time, that the first object has been assigned to a second object that is of a generic type that is associated with a second actual type argument; and

in response to determining that the first object has been assigned to the second object, determining whether the second actual type argument specifies an uncertain type that is constrained by a second lower bound type; and

in response to determining that the second actual type argument specifies an uncertain type that is constrained by the second lower bound type, determining a most specific supertype of both the first lower bound type and the second lower bound type,

wherein the second lower bound type is the most specific supertype.

Assignments (2)
MERGER AND CHANGE OF NAME Recorded Dec 16, 2015
From: ORACLE USA, INC.; SUN MICROSYSTEMS, INC.; ORACLE AMERICA, INC.
To: ORACLE AMERICA, INC.
Reel/Frame 037306/0530 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Apr 18, 2005
From: BRACHA, GILAD
To: SUN MICROSYSTEMS, INC.
Reel/Frame 016496/0203 →
Continuity (1)
Related Publication 20060236315A1 · Oct 19, 2006