// Returns a set of enum or sealed types of which supertypeOwner is an entry or a member @NotNull private static Set<TypeConstructor> getAllowedFinalSupertypes( @NotNull ClassDescriptor descriptor, @NotNull JetClassOrObject jetClass) { Set<TypeConstructor> parentEnumOrSealed; if (jetClass instanceof JetEnumEntry) { parentEnumOrSealed = Collections.singleton( ((ClassDescriptor) descriptor.getContainingDeclaration()).getTypeConstructor()); } else { parentEnumOrSealed = Collections.emptySet(); ClassDescriptor currentDescriptor = descriptor; while (currentDescriptor.getContainingDeclaration() instanceof ClassDescriptor) { currentDescriptor = (ClassDescriptor) currentDescriptor.getContainingDeclaration(); if (currentDescriptor.getModality() == Modality.SEALED) { if (parentEnumOrSealed.isEmpty()) { parentEnumOrSealed = new HashSet<TypeConstructor>(); } parentEnumOrSealed.add(currentDescriptor.getTypeConstructor()); } } } return parentEnumOrSealed; }