001package gudusoft.gsqlparser.ir.semantic; 002 003/** 004 * The single descriptor catalog for stable diagnostic metadata. 005 * 006 * <p>Every {@link DiagnosticCode} is deliberately named in the switch below. 007 * The {@code default} is not a fallback classification: it rejects newly 008 * added codes until their ownership category has been reviewed. The 009 * catalog's exhaustiveness test calls this method for every enum value. 010 */ 011public final class DiagnosticDescriptorCatalog { 012 013 private DiagnosticDescriptorCatalog() {} 014 015 /** 016 * Return the compiler-layer ownership category for {@code code}. 017 * 018 * @throws NullPointerException if {@code code} is null 019 * @throws IllegalArgumentException if a newly added code has not yet been 020 * classified 021 */ 022 public static DiagnosticCategory categoryOf(DiagnosticCode code) { 023 if (code == null) { 024 throw new NullPointerException("code"); 025 } 026 switch (code) { 027 case PARSE_FAILED: 028 return DiagnosticCategory.SYNTAX_ERROR; 029 030 case BRANCH_COLUMN_REF_UNKNOWN_RELATION: 031 case CREATE_AS_COLUMN_COUNT_MISMATCH: 032 case CROSS_WITH_ON: 033 case CROSS_WITH_USING: 034 case CTE_BODY_MISSING: 035 case CTE_EXPLICIT_COLUMN_LIST_ARITY_MISMATCH: 036 case CTE_FORWARD_REFERENCE: 037 case DELETE_TARGET_MISSING: 038 case DISTINCT_ON_EMPTY_COLUMN_LIST: 039 case DUPLICATE_CTE_NAME: 040 case DUPLICATE_FROM_SUBQUERY_ALIAS: 041 case DUPLICATE_RELATION_ALIAS: 042 case FROM_SOURCE_NO_TABLE: 043 case INSERT_COLUMN_COUNT_MISMATCH: 044 case INSERT_TARGET_MISSING: 045 case JOIN_ITEM_NO_TABLE: 046 case JOIN_MISSING_ON_OR_USING: 047 case JOIN_WITH_BOTH_ON_AND_USING: 048 case LEGACY_OUTER_JOIN_BOOLEAN_CONTEXT_NOT_ALLOWED: 049 case LEGACY_OUTER_JOIN_MULTIPLE_NULL_GENERATED_RELATIONS: 050 case LEGACY_OUTER_JOIN_RECIPROCAL_NULL_GENERATION: 051 case MERGE_CTE_EXPLICIT_COLUMN_LIST_ARITY_MISMATCH: 052 case MERGE_NOT_MATCHED_BY_SOURCE_INSERT_NOT_VALID: 053 case MERGE_NOT_MATCHED_BY_SOURCE_REFERENCES_SOURCE: 054 case MERGE_ON_CONDITION_MISSING: 055 case MERGE_TARGET_MISSING: 056 case MERGE_USING_SOURCE_MISSING: 057 case MERGE_WHEN_NO_ACTION: 058 case NATURAL_WITH_ON: 059 case NATURAL_WITH_USING: 060 case ORDER_BY_ORDINAL_OUT_OF_RANGE: 061 case OUTPUT_DELETED_ON_INSERT_NOT_SUPPORTED: 062 case OUTPUT_INSERTED_ON_DELETE_NOT_SUPPORTED: 063 case OUTPUT_REFERENCES_UNKNOWN_RELATION: 064 case RETURNING_EMPTY_PROJECTION: 065 case RETURNING_STAR_QUALIFIER_UNKNOWN: 066 case SCALAR_SUBQUERY_COLUMN_COUNT: 067 case SCALAR_SUBQUERY_UNKNOWN_RELATION_ALIAS: 068 case SELECT_NO_PROJECTED_COLUMNS: 069 case SET_OP_BRANCH_COLUMN_COUNT_MISMATCH: 070 case SET_OP_BRANCH_COUNT_TOO_FEW: 071 case STAR_EXPANSION_QUALIFIER_AMBIGUOUS: 072 case STAR_EXPANSION_QUALIFIER_NOT_FOUND: 073 case UNQUALIFIED_COLUMN_AMBIGUOUS: 074 case UNQUALIFIED_MERGED_KEY_IN_JOIN_ON: 075 case UPDATE_NO_SET_CLAUSE: 076 case UPDATE_TARGET_MISSING: 077 case USING_KEY_NOT_DECLARED: 078 return DiagnosticCategory.DIALECT_SEMANTIC_ERROR; 079 080 case NATURAL_CATALOG_REQUIRED: 081 case NESTED_BLOCK_UNANALYZED: 082 case STAR_EXPANSION_MULTI_RELATION_FROM: 083 case STAR_EXPANSION_NO_CATALOG: 084 return DiagnosticCategory.ANALYSIS_DEGRADED; 085 086 case RELATION_NOT_FOUND_IN_CATALOG: 087 return DiagnosticCategory.ADVISORY; 088 089 case CLAUSE_WINDOW_FUNCTION_LEAK: 090 case COLUMN_BINDING_NON_EXACT: 091 case COMMA_FROM_IN_BODY_NOT_SUPPORTED: 092 case CORRELATED_SCALAR_SUBQUERY_UNKNOWN_OUTER_BINDING: 093 case CREATE_AS_NO_SOURCE_SELECT: 094 case CREATE_AS_TARGET_MISSING: 095 case CROSS_JOIN_IN_BODY_NOT_SUPPORTED: 096 case CTE_WITH_RECURSIVE_NOT_SUPPORTED: 097 case DELETE_CTE_NOT_SUPPORTED: 098 case DELETE_FROM_JOIN_NATURAL_NOT_SUPPORTED: 099 case DELETE_FROM_JOIN_USING_NOT_SUPPORTED: 100 case DELETE_FROM_NESTED_JOIN_NOT_SUPPORTED: 101 case DELETE_JOINED_NOT_SUPPORTED: 102 case DELETE_JOIN_ON_HAS_SUBQUERY_NOT_SUPPORTED: 103 case DELETE_ORDER_BY_OR_LIMIT_NOT_SUPPORTED: 104 case DELETE_OUTPUT_CLAUSE_NOT_SUPPORTED: 105 case DELETE_RETURNING_CLAUSE_NOT_SUPPORTED: 106 case DELETE_WHERE_EXISTS_BODY_MISSING: 107 case DELETE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS: 108 case DELETE_WHERE_EXISTS_INNER_RELATION_UNKNOWN: 109 case DELETE_WHERE_OUTER_SHAPE_REJECTED: 110 case DELETE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED: 111 case DELETE_WHERE_PREDICATE_NOT_LIFTABLE: 112 case DELETE_WHERE_PREDICATE_NOT_NOT_SUPPORTED: 113 case DELETE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE: 114 case DISTINCT_ON_HAS_SUBQUERY_NOT_SUPPORTED: 115 case DISTINCT_ON_NOT_SUPPORTED: 116 case DUPLICATE_OUTPUT_NAME: 117 case FROM_SUBQUERY_ALIAS_REQUIRED: 118 case FROM_SUBQUERY_BINDING_UNRESOLVED: 119 case FROM_SUBQUERY_INNER_SUBQUERY_IN_GROUP_BY: 120 case FROM_SUBQUERY_INNER_SUBQUERY_IN_JOIN_ON: 121 case FROM_SUBQUERY_INNER_SUBQUERY_IN_WHERE: 122 case FROM_SUBQUERY_IN_BODY_CONTEXT_NOT_SUPPORTED: 123 case FROM_SUBQUERY_IN_SET_OP_BRANCH_FROM: 124 case FROM_SUBQUERY_NO_INNER_SELECT: 125 case FROM_SUBQUERY_ON_JOIN_SIDE_IN_SET_OP_BRANCH: 126 case GROUP_BY_HAS_SUBQUERY_NOT_SUPPORTED: 127 case HAVING_HAS_SUBQUERY_NOT_SUPPORTED: 128 case HAVING_SUBQUERY_NOT_SUPPORTED: 129 case HAVING_WINDOW_FUNCTION_NOT_SUPPORTED: 130 case INSERT_MIXED_OUTER_AND_INNER_WITH_NOT_SUPPORTED: 131 case INSERT_MULTI_TABLE_NOT_SUPPORTED: 132 case INSERT_OUTER_WITH_ON_HIVE_MULTI_INSERT_NOT_SUPPORTED: 133 case INSERT_SOURCE_NOT_SUPPORTED: 134 case JOIN_ON_EXISTS_BODY_MISSING: 135 case JOIN_ON_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS: 136 case JOIN_ON_EXISTS_INNER_COLUMN_COUNT: 137 case JOIN_ON_EXISTS_INNER_COMMA_FROM: 138 case JOIN_ON_EXISTS_INNER_CROSS_JOIN: 139 case JOIN_ON_EXISTS_INNER_FROM_SUBQUERY: 140 case JOIN_ON_EXISTS_INNER_FROM_SUBQUERY_ON_JOIN: 141 case JOIN_ON_EXISTS_INNER_IS_SET_OP: 142 case JOIN_ON_EXISTS_INNER_MISSING_FROM: 143 case JOIN_ON_EXISTS_INNER_NATURAL: 144 case JOIN_ON_EXISTS_INNER_NON_CONSTANT_PROJECTION: 145 case JOIN_ON_EXISTS_INNER_RELATION_UNKNOWN: 146 case JOIN_ON_EXISTS_INNER_ROW_LIMIT: 147 case JOIN_ON_EXISTS_INNER_SUBQUERY_IN_GROUP_BY: 148 case JOIN_ON_EXISTS_INNER_SUBQUERY_IN_JOIN_ON: 149 case JOIN_ON_EXISTS_INNER_SUBQUERY_IN_WHERE: 150 case JOIN_ON_EXISTS_INNER_USING: 151 case JOIN_ON_EXISTS_INNER_WITH: 152 case JOIN_ON_EXISTS_WITHIN_GROUP_AGGREGATE: 153 case JOIN_ON_EXISTS_WITHIN_GROUP_NON_WHITELISTED: 154 case JOIN_ON_OUTER_SHAPE_REJECTED: 155 case JOIN_ON_PREDICATE_GENERIC_NOT_SUPPORTED: 156 case JOIN_ON_PREDICATE_NOT_LIFTABLE: 157 case JOIN_ON_PREDICATE_NOT_NOT_SUPPORTED: 158 case JOIN_ON_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE: 159 case JOIN_ON_TOP_LEVEL_SUBQUERY_NOT_SUPPORTED: 160 case LEGACY_OUTER_JOIN_INTENT_NOT_LOWERABLE: 161 case MALFORMED_SET_OP_AST: 162 case MERGED_JOIN_AGAINST_CTE_WITH_EXPLICIT_COLUMN_LIST: 163 case MERGE_CTE_EXPLICIT_COLUMN_LIST_NOT_SUPPORTED: 164 case MERGE_CTE_NOT_SUPPORTED: 165 case MERGE_DO_NOTHING_NOT_SUPPORTED: 166 case MERGE_ERROR_LOGGING_NOT_SUPPORTED: 167 case MERGE_INSERT_DEFAULT_VALUES_NOT_SUPPORTED: 168 case MERGE_INSERT_VALUES_HAS_SUBQUERY_NOT_SUPPORTED: 169 case MERGE_LIMIT_NOT_SUPPORTED: 170 case MERGE_RETURNING_CLAUSE_NOT_SUPPORTED: 171 case MERGE_SOURCE_NOT_SUPPORTED: 172 case MERGE_UPDATE_DELETE_WHERE_NOT_SUPPORTED: 173 case MERGE_WHEN_CONDITION_HAS_SUBQUERY_NOT_SUPPORTED: 174 case MERGE_WHEN_NOT_MATCHED_BY_SOURCE_NOT_SUPPORTED: 175 case MIXED_SET_OPERATORS_NOT_SUPPORTED: 176 case MULTIPLE_STATEMENTS_NOT_SUPPORTED: 177 case NATURAL_IN_BODY_NOT_SUPPORTED: 178 case NESTED_JOIN_MERGED_KEY_NOT_SUPPORTED: 179 case NESTED_SCALAR_SUBQUERY_IN_PROJECTION: 180 case NESTED_WITH_NOT_SUPPORTED: 181 case ORDER_BY_CONSTANT_NOT_SUPPORTED: 182 case ORDER_BY_FETCH_FIRST_NOT_SUPPORTED: 183 case ORDER_BY_HAS_SUBQUERY_NOT_SUPPORTED: 184 case ORDER_BY_NAME_NOT_MATCHED_IN_SET_OP_OUTPUT: 185 case ORDER_BY_NO_PHYSICAL_COLUMN_REFS: 186 case ORDER_BY_OBJECT_REFERENCE_NO_USABLE_NAME: 187 case ORDER_BY_OBJECT_REFERENCE_UNSUPPORTED: 188 case ORDER_BY_OFFSET_NOT_SUPPORTED: 189 case ORDER_BY_ORDINAL_NOT_SUPPORTED: 190 case ORDER_BY_PROJECTION_ALIAS_NOT_SUPPORTED: 191 case ORDER_BY_QUALIFIED_REFERENCE_NOT_SUPPORTED: 192 case ORDER_BY_RESET_WHEN_NOT_SUPPORTED: 193 case ORDER_BY_SUBQUERY_NOT_SUPPORTED: 194 case ORDER_BY_UNSUPPORTED_SORT_KEY_SHAPE: 195 case ORDER_BY_WINDOW_FUNCTION_NOT_SUPPORTED: 196 case ORDER_SIBLINGS_BY_NOT_SUPPORTED: 197 case OUTPUT_INTO_NOT_SUPPORTED: 198 case OUTPUT_REFERENCES_UNSUPPORTED_BINDING_KIND: 199 case PIVOT_MULTIPLE_CLAUSES_NOT_SUPPORTED: 200 case PIVOT_STAR_CATALOG_REQUIRED: 201 case PIVOT_STAR_NOT_SUPPORTED: 202 case PIVOT_SUBQUERY_SOURCE_NOT_SUPPORTED: 203 case PIVOT_UNPIVOT_NOT_SUPPORTED: 204 case PIVOT_WITH_QUERY_CLAUSE_NOT_SUPPORTED: 205 case QUALIFY_NOT_SUPPORTED: 206 case RESULT_COLUMN_NO_COLUMN_REFS: 207 case RESULT_COLUMN_NO_NAME: 208 case RESULT_COLUMN_NULL_EXPRESSION: 209 case RESULT_COLUMN_SCALAR_SUBQUERY_EMBEDDED: 210 case RETURNING_HAS_AGGREGATE_NOT_SUPPORTED: 211 case RETURNING_HAS_SUBQUERY_NOT_SUPPORTED: 212 case RETURNING_INTO_NOT_SUPPORTED: 213 case RETURNING_STAR_CATALOG_REQUIRED: 214 case RETURNING_STAR_NOT_SUPPORTED: 215 case ROW_LIMIT_COUNT_UNRESOLVED: 216 case ROW_LIMIT_FETCH_FIRST_NOT_SUPPORTED: 217 case ROW_LIMIT_HIVE_LIMIT_GRAMMAR_QUIRK: 218 case ROW_LIMIT_LIMIT_NOT_SUPPORTED: 219 case ROW_LIMIT_OFFSET_NOT_SUPPORTED: 220 case ROW_LIMIT_TOP_NOT_SUPPORTED: 221 case ROW_LIMIT_TOP_PERCENT_NOT_SUPPORTED: 222 case ROW_LIMIT_TOP_WITH_TIES_NOT_SUPPORTED: 223 case SCALAR_SUBQUERY_ALIAS_REQUIRED: 224 case SCALAR_SUBQUERY_INNER_PROJECTION_UNNAMED: 225 case SCALAR_SUBQUERY_INNER_SUBQUERY_IN_GROUP_BY: 226 case SCALAR_SUBQUERY_INNER_SUBQUERY_IN_JOIN_ON: 227 case SCALAR_SUBQUERY_INNER_SUBQUERY_IN_WHERE: 228 case SCALAR_SUBQUERY_NO_INNER_SELECT: 229 case SELECT_NO_FROM_SOURCE: 230 case SELECT_ROW_FILTER_NOT_SUPPORTED: 231 case SELECT_ROW_FILTER_NULL: 232 case SELECT_ROW_FILTER_UNKNOWN: 233 case SELECT_WHERE_EXISTS_BODY_MISSING: 234 case SELECT_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS: 235 case SELECT_WHERE_EXISTS_INNER_RELATION_UNKNOWN: 236 case SELECT_WHERE_OUTER_SHAPE_REJECTED: 237 case SELECT_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED: 238 case SELECT_WHERE_PREDICATE_NOT_LIFTABLE: 239 case SELECT_WHERE_PREDICATE_NOT_NOT_SUPPORTED: 240 case SELECT_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE: 241 case SET_OPERATION_NOT_SUPPORTED_IN_CONTEXT: 242 case SET_OP_BRANCH_DUPLICATE_OUTPUT_NAME: 243 case SET_OP_BRANCH_IS_SET_OP: 244 case SET_OP_BRANCH_OUTPUT_NAME_UNUSABLE: 245 case SET_OP_DUPLICATE_OUTER_OUTPUT_NAME: 246 case SET_OP_NON_ROOT_ORDER_BY_NOT_SUPPORTED: 247 case SET_OP_ORDER_BY_BRANCH_OUTPUT_NO_SOURCES: 248 case SET_OP_OUTER_ORDER_BY_NO_PHYSICAL_COLUMN_REFS: 249 case SET_OP_ROOT_TYPE_NONE: 250 case SET_OP_ROOT_TYPE_NULL: 251 case SET_OP_ROW_LIMIT_NOT_SUPPORTED: 252 case SET_OP_UNKNOWN_OPERATOR_TYPE: 253 case STAR_EXPANSION_EXPLICIT_CTE_COLUMN_LIST: 254 case STAR_EXPANSION_NON_BASE_TABLE: 255 case STAR_EXPANSION_NO_INSCOPE_RELATION_COLUMNS: 256 case STAR_EXPANSION_PREDICATE_BODY: 257 case STAR_EXPANSION_SYNTHETIC_BODY: 258 case STAR_EXPANSION_UNHANDLED_KIND: 259 case STATEMENT_KIND_NOT_SUPPORTED: 260 case TABLE_BINDING_UNRESOLVED: 261 case UNSUPPORTED_JOIN_TYPE: 262 case UPDATE_CTE_NOT_SUPPORTED: 263 case UPDATE_FROM_JOIN_NATURAL_NOT_SUPPORTED: 264 case UPDATE_FROM_JOIN_USING_NOT_SUPPORTED: 265 case UPDATE_FROM_NESTED_JOIN_NOT_SUPPORTED: 266 case UPDATE_FROM_SUBQUERY_NOT_SUPPORTED: 267 case UPDATE_JOINED_NOT_SUPPORTED: 268 case UPDATE_JOIN_ON_HAS_SUBQUERY_NOT_SUPPORTED: 269 case UPDATE_ORDER_BY_OR_LIMIT_NOT_SUPPORTED: 270 case UPDATE_OUTPUT_CLAUSE_NOT_SUPPORTED: 271 case UPDATE_RETURNING_CLAUSE_NOT_SUPPORTED: 272 case UPDATE_SET_HAS_SUBQUERY_NOT_SUPPORTED: 273 case UPDATE_TUPLE_ASSIGNMENT_NOT_SUPPORTED: 274 case UPDATE_WHERE_EXISTS_BODY_MISSING: 275 case UPDATE_WHERE_EXISTS_CORRELATED_UNKNOWN_OUTER_ALIAS: 276 case UPDATE_WHERE_EXISTS_INNER_RELATION_UNKNOWN: 277 case UPDATE_WHERE_OUTER_SHAPE_REJECTED: 278 case UPDATE_WHERE_PREDICATE_GENERIC_NOT_SUPPORTED: 279 case UPDATE_WHERE_PREDICATE_NOT_LIFTABLE: 280 case UPDATE_WHERE_PREDICATE_NOT_NOT_SUPPORTED: 281 case UPDATE_WHERE_PREDICATE_SCALAR_COMPARISON_NOT_LIFTABLE: 282 case USING_IN_BODY_NOT_SUPPORTED: 283 case WHERE_HAS_SUBQUERY_NOT_SUPPORTED: 284 case WINDOW_CLUSTER_BY_NOT_SUPPORTED: 285 case WINDOW_DISTRIBUTE_BY_NOT_SUPPORTED: 286 case WINDOW_EMPTY_OVER_NOT_SUPPORTED: 287 case WINDOW_FILTER_NOT_SUPPORTED: 288 case WINDOW_FRAME_EXCLUDE_NOT_SUPPORTED: 289 case WINDOW_FRAME_NULL_BOUNDARY_TYPE: 290 case WINDOW_FRAME_NULL_LIMIT_ROW_TYPE: 291 case WINDOW_FRAME_NULL_START_BOUNDARY: 292 case WINDOW_FRAME_OFFSET_NON_CONSTANT: 293 case WINDOW_FRAME_UNEXPECTED_OFFSET: 294 case WINDOW_FRAME_UNSUPPORTED_BOUNDARY_TYPE: 295 case WINDOW_FRAME_UNSUPPORTED_LIMIT_ROW_TYPE: 296 case WINDOW_FUNCTION_AS_PROJECTION_NOT_SUPPORTED: 297 case WINDOW_FUNCTION_EMBEDDED_NOT_SUPPORTED: 298 case WINDOW_FUNCTION_LEVEL_ORDER_BY_NOT_SUPPORTED: 299 case WINDOW_FUNCTION_LEVEL_SORT_NOT_SUPPORTED: 300 case WINDOW_FUNCTION_UNSUPPORTED: 301 case WINDOW_FUNCTION_USED_NOT_SUPPORTED: 302 case WINDOW_KEEP_DENSE_RANK_NOT_SUPPORTED: 303 case WINDOW_NAMED_WINDOW_DECLARATION_NOT_SUPPORTED: 304 case WINDOW_NAMED_WINDOW_REFERENCE_NOT_SUPPORTED: 305 case WINDOW_OVER_ORDER_BY_AGGREGATE: 306 case WINDOW_OVER_ORDER_BY_CALCULATED_ALIAS: 307 case WINDOW_OVER_ORDER_BY_ITEM_UNUSABLE: 308 case WINDOW_OVER_ORDER_BY_LITERAL: 309 case WINDOW_OVER_ORDER_BY_NULL_SORT_KEY: 310 case WINDOW_OVER_ORDER_BY_RESET_WHEN_NOT_SUPPORTED: 311 case WINDOW_OVER_ORDER_BY_SIBLINGS_NOT_SUPPORTED: 312 case WINDOW_OVER_ORDER_BY_SUBQUERY: 313 case WINDOW_OVER_ORDER_BY_UNKNOWN_REFERENCE: 314 case WINDOW_OVER_ORDER_BY_WINDOW_FUNCTION: 315 case WINDOW_PARTITION_BY_AGGREGATE: 316 case WINDOW_PARTITION_BY_CALCULATED_ALIAS: 317 case WINDOW_PARTITION_BY_ITEM_UNUSABLE: 318 case WINDOW_PARTITION_BY_LITERAL: 319 case WINDOW_PARTITION_BY_PROJECTION_ALIAS: 320 case WINDOW_PARTITION_BY_SORT_NOT_SUPPORTED: 321 case WINDOW_PARTITION_BY_SUBQUERY: 322 case WINDOW_PARTITION_BY_UNKNOWN_REFERENCE: 323 case WINDOW_SORT_BY_NOT_SUPPORTED: 324 case WINDOW_WITHIN_GROUP_INSIDE_PROJECTION_NOT_SUPPORTED: 325 case WINDOW_WITHIN_GROUP_NOT_SUPPORTED: 326 return DiagnosticCategory.LOWERING_UNSUPPORTED; 327 328 default: 329 throw new IllegalArgumentException( 330 "Unclassified DiagnosticCode: " + code.name()); 331 } 332 } 333 334 /** 335 * Recovery boundaries for unsupported nested blocks must not absorb 336 * malformed source SQL or turn a dialect error into a successful warning. 337 */ 338 public static boolean isUnsupportedNestedBlockRecoverable(Diagnostic diagnostic) { 339 if (diagnostic == null) { 340 throw new NullPointerException("diagnostic"); 341 } 342 return diagnostic.getCategory() == DiagnosticCategory.LOWERING_UNSUPPORTED; 343 } 344 345 /** Return true only when a non-empty diagnostic set is wholly recoverable. */ 346 public static boolean isUnsupportedNestedBlockRecoverable( 347 Iterable<Diagnostic> diagnostics) { 348 if (diagnostics == null) { 349 throw new NullPointerException("diagnostics"); 350 } 351 boolean found = false; 352 for (Diagnostic diagnostic : diagnostics) { 353 found = true; 354 if (!isUnsupportedNestedBlockRecoverable(diagnostic)) return false; 355 } 356 return found; 357 } 358}