mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
82 lines
2.7 KiB
C++
82 lines
2.7 KiB
C++
//===--- AvailabilityMixin.h - Symbol Graph Symbol Availability -----------===//
|
|
//
|
|
// This source file is part of the Swift.org open source project
|
|
//
|
|
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
|
|
// Licensed under Apache License v2.0 with Runtime Library Exception
|
|
//
|
|
// See https://swift.org/LICENSE.txt for license information
|
|
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SWIFT_SYMBOLGRAPHGEN_AVAILABILITYMIXIN_H
|
|
#define SWIFT_SYMBOLGRAPHGEN_AVAILABILITYMIXIN_H
|
|
|
|
#include "swift/AST/Attr.h"
|
|
#include "swift/AST/Module.h"
|
|
#include "swift/Basic/LLVM.h"
|
|
#include "llvm/Support/JSON.h"
|
|
#include "llvm/Support/VersionTuple.h"
|
|
|
|
namespace swift {
|
|
namespace symbolgraphgen {
|
|
|
|
/// A mixin representing a symbol's effective availability in its module.
|
|
struct Availability {
|
|
/// The domain to which the availability applies, such as
|
|
/// an operating system or Swift itself.
|
|
StringRef Domain;
|
|
|
|
/// The domain version at which a symbol was introduced if defined.
|
|
std::optional<llvm::VersionTuple> Introduced;
|
|
|
|
/// The domain version at which a symbol was deprecated if defined.
|
|
std::optional<llvm::VersionTuple> Deprecated;
|
|
|
|
/// The domain version at which a symbol was obsoleted if defined.
|
|
std::optional<llvm::VersionTuple> Obsoleted;
|
|
|
|
/// An optional message regarding a symbol's availability.
|
|
StringRef Message;
|
|
|
|
/// The informal spelling of a new replacement symbol if defined.
|
|
StringRef Renamed;
|
|
|
|
/// If \c true, is unconditionally deprecated in this \c Domain.
|
|
bool IsUnconditionallyDeprecated;
|
|
|
|
/// If \c true, is unconditionally unavailable in this \c Domain.
|
|
bool IsUnconditionallyUnavailable;
|
|
|
|
Availability(const SemanticAvailableAttr &AvAttr);
|
|
|
|
/// Update this availability from a duplicate @available
|
|
/// attribute with the same platform on the same declaration.
|
|
///
|
|
/// e.g.
|
|
/// @available(macOS, deprecated: 10.15)
|
|
/// @available(macOS, deprecated: 10.12)
|
|
/// func foo() {}
|
|
///
|
|
/// Updates the first availability using the second's information.
|
|
void updateFromDuplicate(const Availability &Other);
|
|
|
|
/// Update this availability from a parent context's availability.
|
|
void updateFromParent(const Availability &Parent);
|
|
|
|
/// Returns true if this availability item doesn't have
|
|
/// any introduced version, deprecated version, obsoleted version,
|
|
/// or unconditional deprecation status.
|
|
///
|
|
/// \note \c message and \c renamed are not considered.
|
|
bool empty() const;
|
|
|
|
void serialize(llvm::json::OStream &OS) const;
|
|
};
|
|
|
|
} // end namespace symbolgraphgen
|
|
} // end namespace swift
|
|
|
|
#endif // SWIFT_SYMBOLGRAPHGEN_AVAILABILITYMIXIN_H
|