This is a post-grant prior art request for US7263687, which has a filing date of Sep. 9, 2002.
This patent is a generalization of what most developers know as an enum
in the Java programming language. In particular, this patent focuses on the aspects of enum
in Java which distinguish it from enumerated types in languages like C and C++. In C and C++, the members of an enumerated type are, to varying degrees, simply a named alias for a particular integer value. In Java, each member of an enum
class is actually an instance of the class.
Claims overview
Claims 1-10 (method) focus on the ability to represent these enumerated types in source code and compile them.
Claims 11-20 (method) are a duplication of claims 1-10, but in the context of storing the compiled version of the enumerated types in a "computer-readable storage medium".
Claims 21-30 (apparatus) essentially define the characteristics of the system capable of performing the method in claims 1-10.
Claim 31 is a "means" claim, which is generally beyond my understanding of patent law.
Additional claims information
The following is my interpretation of claims 1-10 in the context of Java. Claim 1 stands by itself. Each of claims 2-10 combine with claim 1, but are otherwise unrelated to each other.
- This is the basic definition of an enumerated type within the context of this patent.
- This is a generalization of the "SwitchMap" feature in the
javac
compiler [1] [2]. - This is the ability to add methods to the enumerated type.
- This is the ability of the enumerated type to implement interfaces.
- This is the ability to add fields to the enumerated type.
- This is the ability to add virtual/abstract methods to the enumerated type, and implement or override them for each instance of the enumerated type [1].
- This applies if handling for enumerated types is performed as a pre-compilation step.
- This applies if handling for enumerated types is performed as a compilation step.
- This applies if the compiler treats each member of the enumerated type as a "public static final self-typed field".
- This applies if the enumerated type does not have any public constructors.
Potential prior art
Claims 1, 11, 21, 31
I believe ECMA-334, 1st Edition (December 2001) demonstrates prior art for Claims 1, 11, 21, and possibly 31 in §21 (Enums). The following is a breakdown of each part of Claim 1 with respect to this section of ECMA-334.
receiving source code for the computer program, wherein the source code contains a declaration for an enumerated type;
- ECMA-334 §21.1 defines "enum declarations" for "enum types" within the C# programming language (source code).
wherein the declaration specifies a fixed number of enumeration constants that comprise the enumerated type, wherein the computer automatically generates the enumerated type comprising a class defined within an object oriented programming language, wherein the class includes a self-typed constant for each enumeration constant specified in the declaration and includes methods for operating on those constants;
ECMA-334 §21.3 starts with this line:
The body of an enum type declaration defines zero or more enum members, which are the named constants of the enum type.
ECMA-334 §21.4 starts with this line:
Each enum type defines a distinct type; ...
ECMA-334 §21.3 includes this statement:
Each enum member has an associated constant value. The type of this value is the underlying type for the containing enum.
ECMA-334 §21.4 includes this statement:
Every enum type automatically derives from the class
System.Enum
. Thus, inherited methods and properties of this class can be used on values of an enum type
defining the enumerated type using a class defined within an object-oriented programming language, wherein the class includes a self-typed constant for each enumeration constant specified in the declaration; and
- Seems to be met by the items listed for the previous clause.
if the source code specifies a multi-way branch statement associated with the enumerated type, implementing the multi-way branch statement as a switch statement so that different enumeration constants are associated with different cases of the switch statement.
ECMA-334 §15.7.2 includes this:
The governing type of a
switch
statement is established by the switch expression. If the type of the switch expression is ... an enum-type, then that is the governing type of theswitch
statement.A compile-time error occurs if two or more
case
labels in the sameswitch
statement specify the same constant value.If one of the constants specified in a
case
label in the sameswitch
statement is equal to the value of the switch expression, control is transferred to the statement list following the matchedcase
label.A possible challenge to this is the wording of "different enumeration constants are associated with different cases". However, by default C# assigns unique values to the constants defined in an enum type, and it is this functionality which I believe forms the prior art. Beyond this support and as a distinct feature unrelated to the prior art, C# allows users to explicitly assign multiple names for values in the enumeration. In this separate case it is not possible to create distinct switch statements for two named constants which have the same underlying value.
Claims 8, 18, 28
The C# compiler handles enum types as a step of the compilation process.
Claims 9, 19, 29
I believe ECMA-335, 1st Edition (December 2001) demonstrates prior art for Claims 9, 19, and 29. The following is a breakdown of Claim 9 with respect to this section of ECMA-335.
The method of claim 1, wherein the class includes a public static final self-typed field for each enumeration constant.
ECMA-335 Partition II §13.3 includes this statement which covers the "static final self-typed field" portion of this claim:
The static literal fields of an enum declare the mapping of the symbols of the enum to the underlying values. All of these fields shall have the type of the enum and shall have field init metadata that assigns them a value.
ECMA-334 §10.5.1 provides an additional clause which ensures that the fields are "public":
Enumeration members implicitly have public declared accessibility.