IP Library Granted Patent US 12669985
Granted Patent B2
US 12669985 · App. 18/463,042 · Granted Jun 30, 2026

Compile-time checking for exhaustive switch statements and expressions

Inventors: Gavin Mark Bierman (Cambridge, GB); Brian Goetz (Williston, VT); Jan Lahoda (Polna, CZ)
Assignee: Oracle International Corporation
G06F8/433
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 12669985
App. No.
18/463,042
Granted
Jun 30, 2026
Kind
B2
Abstract

Techniques for compiling switch blocks are disclosed. One or more embodiments analyze and rewrite a set of pattern labels in a switch block in a compile-time process for determining whether the switch block is exhaustive. At compile-time, a system populates a set with case labels from a switch block. The system applies a set of rules to iteratively re-write pattern labels in the set and checks whether the re-written set, and hence the original switch block, is exhaustive. If the compiler determines that (a) the set does not appear to be exhaustive, and (b) the set includes patterns labels, then the compiler determines whether the set may be rewritten before further analysis. The compiler iteratively re-writes and re-analyzes the case label set for exhaustivity until the case label set is determined to be exhaustive or cannot be rewritten further.

Claims (56)

1 . A non-transitory computer readable medium comprising instructions which, when executed by one or more hardware processors, cause performance of operations comprising:

obtaining, by a compiler, a set of source code;

identifying a switch block within the source code;

determining whether the switch block is exhaustive at least by:

identifying a set of case labels occurring within the switch block;

determining that a subset of two or more case labels, in the set of case labels, can be represented by a single case label;

replacing the two or more case labels with the single case label;

based at least on the single case label, determining that the switch block is exhaustive; and

responsive at least to determining that the switch block is exhaustive, executing a compilation process to compile the set of source code.

2 . The non-transitory computer readable medium of claim 1 , wherein determining that the subset of two or more case labels can be represented by the single case label comprises determining that the two or more case labels exhaust the single case label.

3 . The non-transitory computer readable medium of claim 2 , wherein determining that the two or more case labels exhaust the single case label comprises determining that a set of types in the two or more case labels exhaust a particular type in the single case label.

4 . The non-transitory computer readable medium of claim 1 , wherein determining that the subset of two or more case labels can be represented by a single case label comprises determining that the two or more case labels include all possible variations that may correspond to the single case label.

5 . The non-transitory computer readable medium of claim 1 , wherein determining that the subset of two or more case labels can be represented by a single case label comprises determining that a set of types corresponding to the two or more case labels include all implementable types of an interface corresponding to the single case label.

6 . The non-transitory computer readable medium of claim 1 , wherein the operations further comprise:

prior to determining that the subset of two or more case labels can be represented by the single case label:

generating a particular case label of the two or more case labels at least by rewriting an initial case label as the particular case label based on the particular case label and the initial case label representing equivalent data.

7 . The non-transitory computer readable medium of claim 1 , wherein the operations further comprise:

prior to determining that the subset of two or more case labels can be represented by the single case label:

generating a particular case label of the two or more case labels at least by combining a first case label and a second case label to generate the particular case label.

8 . The non-transitory computer readable medium of claim 7 , wherein the operations further comprise:

rewriting an initial case label as the particular case label based on the particular case label and the initial case label representing equivalent data.

9 . The non-transitory computer readable medium of claim 1 , wherein the operations further comprise iteratively executing operations to combine case labels until a resulting set of case labels that exhausts the switch block is identified.

10 . The non-transitory computer readable medium of claim 1 , the operations further comprise iteratively executing operations to combine case labels until no further combining of case labels is possible.

11 . A method comprising:

obtaining, by a compiler, a set of source code;

identifying a switch block within the source code;

determining whether the switch block is exhaustive at least by:

identifying a set of case labels occurring within the switch block;

determining that a subset of two or more case labels, in the set of case labels, can be represented by a single case label;

replacing the two or more case labels into the single case label;

based at least on the single case label, determining that the switch block is exhaustive; and

responsive at least to determining that the switch block is exhaustive, executing a compilation process to compile the set of source code.

12 . The method of claim 11 , wherein determining that the subset of two or more case labels can be represented by a single case label comprises determining that the two or more case labels exhaust the single case label.

13 . The method of claim 12 , wherein determining that the two or more case labels exhaust the single case label comprises determining that a set of types in the two or more case labels exhaust a particular type in the single case label.

14 . The method of claim 11 , wherein determining that the subset of two or more case labels can be represented by a single case label comprises determining that the two or more case labels include all possible variations that may correspond to the single case label.

15 . The method of claim 11 , wherein determining that the subset of two or more case labels can be represented by a single case label comprises determining that a set of types corresponding to the two or more case labels include all implementable types of an interface corresponding to the single case label.

16 . The method of claim 11 , further comprising:

prior to determining that the subset of two or more case labels can be represented by a single case label:

generating a particular case label of the two or more case labels at least by rewriting an initial case label as the particular case label based on the particular case label and the initial case label representing equivalent data.

17 . The method of claim 11 , further comprising:

prior to determining that the subset of two or more case labels can be represented by a single case label:

generating a particular case label of the two or more case labels at least by combining a first case label and a second case label to generate the particular case label.

18 . The method of claim 17 , further comprising:

rewriting an initial case label as the particular case label based on the particular case label and the initial case label representing equivalent data.

19 . The method of claim 11 , further comprising: iteratively executing operations to combine case labels until a resulting set of case labels that exhausts the switch block is identified.

20 . A system comprising:

one or more hardware processors; and

one or more one or more non-transitory computer-readable media storing instructions, which when executed by the one or more hardware processors, cause execution of operations comprising:

obtaining, by a compiler, a set of source code;

identifying a switch block within the source code;

determining whether the switch block is exhaustive at least by:

identifying a set of case labels occurring within the switch block;

determining that a subset of two or more case labels, in the set of case labels, can be represented by a single case label;

replacing the two or more case labels into the single case label;

based at least on the single case label, determining that the switch block is exhaustive; and

responsive at least to determining that the switch block is exhaustive, executing a compilation process to compile the set of source code.