&& (impl.base_interface_type == null || impl.base_interface_type.type_symbol == iface)
&& impl.compatible_no_error (m))) {
// method is used as interface implementation, so it is not unused
- impl.version.check (source_reference);
+ impl.version.check (context, source_reference);
impl.used = true;
implemented = true;
if (impl.base_interface_method == null) {
Report.error (source_reference, "Type and/or accessors of inherited properties `%s' and `%s' do not match: %s.".printf (prop.get_full_name (), base_prop.get_full_name (), invalid_match));
}
// property is used as interface implementation, so it is not unused
- sym.version.check (source_reference);
+ sym.version.check (context, source_reference);
sym.used = true;
} else {
error = true;
// check symbol availability
if (variable_type.type_symbol != null) {
- variable_type.type_symbol.version.check (source_reference);
+ variable_type.type_symbol.version.check (context, source_reference);
}
}
if (!external_package) {
// check symbol availability
if (variable_type.type_symbol != null) {
- variable_type.type_symbol.version.check (source_reference);
+ variable_type.type_symbol.version.check (context, source_reference);
}
}
if (parent != member) {
member.used = true;
}
- member.version.check (source_reference);
+ member.version.check (context, source_reference);
if (access == SymbolAccessibility.PROTECTED && member.parent_symbol is TypeSymbol) {
unowned TypeSymbol target_type = (TypeSymbol) member.parent_symbol;
// track usage for flow analyzer
symbol_reference.used = true;
- symbol_reference.version.check (source_reference);
+ symbol_reference.version.check (context, source_reference);
}
if (symbol_reference != null
// check symbol availability
if ((parent_symbol == null || !parent_symbol.external_package) && variable_type.type_symbol != null) {
- variable_type.type_symbol.version.check (source_reference);
+ variable_type.type_symbol.version.check (context, source_reference);
}
}
* Check to see if the symbol is experimental, deprecated or not available
* and emit a warning if it is.
*/
- public bool check (SourceReference? source_ref = null) {
+ public bool check (CodeContext context, SourceReference? source_ref = null) {
bool result = false;
// deprecation:
if (symbol.external_package && deprecated) {
string? package_version = symbol.source_reference.file.installed_version;
- if (!CodeContext.get ().deprecated && (package_version == null || deprecated_since == null || VersionAttribute.cmp_versions (package_version, deprecated_since) >= 0)) {
+ if (!context.deprecated && (package_version == null || deprecated_since == null || VersionAttribute.cmp_versions (package_version, deprecated_since) >= 0)) {
Report.deprecated (source_ref, "`%s' %s%s".printf (symbol.get_full_name (), (deprecated_since == null) ? "is deprecated" : "has been deprecated since %s".printf (deprecated_since), (replacement == null) ? "" : ". Use %s".printf (replacement)));
}
result = true;
if (symbol.external_package && since != null) {
string? package_version = symbol.source_reference.file.installed_version;
- if (CodeContext.get ().since_check && package_version != null && VersionAttribute.cmp_versions (package_version, since) < 0) {
+ if (context.since_check && package_version != null && VersionAttribute.cmp_versions (package_version, since) < 0) {
unowned string filename = symbol.source_reference.file.filename;
string pkg = Path.get_basename (filename[0:filename.last_index_of_char ('.')]);
Report.error (source_ref, "`%s' is not available in %s %s. Use %s >= %s".printf (symbol.get_full_name (), pkg, package_version, pkg, since));
// experimental:
if (symbol.external_package && experimental) {
- if (!CodeContext.get ().experimental) {
+ if (!context.experimental) {
string? package_version = symbol.source_reference.file.installed_version;
string? experimental_until = this.experimental_until;