summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog22
-rw-r--r--ccode/valaccodelinedirective.vala6
-rw-r--r--vala/valaclass.vala6
-rw-r--r--vala/valacodenode.vala8
-rw-r--r--vala/valaconstant.vala4
-rw-r--r--vala/valacreationmethod.vala12
-rw-r--r--vala/valaenum.vala8
-rw-r--r--vala/valaerrordomain.vala8
-rw-r--r--vala/valafield.vala4
-rw-r--r--vala/valamember.vala26
-rw-r--r--vala/valamethod.vala4
-rw-r--r--vala/valanamespace.vala4
-rw-r--r--vala/valaproperty.vala4
-rw-r--r--vala/valastruct.vala4
14 files changed, 86 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index 854bbaa83..2156b25db 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,27 @@
2009-02-12 Jürg Billeter <j@bitron.ch>
+ * vala/valaclass.vala:
+ * vala/valaconstant.vala:
+ * vala/valafield.vala:
+ * vala/valamember.vala:
+ * vala/valamethod.vala:
+ * vala/valaproperty.vala:
+ * vala/valastruct.vala:
+
+ Warn when hiding members, support `new' keyword to suppress
+ warning, based on patch by Andreas Brauchli, fixes bug 567743
+
+ * vala/valacodenode.vala:
+ * vala/valacreationmethod.vala:
+ * vala/valaenum.vala:
+ * vala/valaerrordomain.vala:
+ * vala/valanamespace.vala:
+ * ccode/valaccodelinedirective.vala:
+
+ Avoid hidden members
+
+2009-02-12 Jürg Billeter <j@bitron.ch>
+
* vala/valastruct.vala:
* vala/valasymbolresolver.vala:
diff --git a/ccode/valaccodelinedirective.vala b/ccode/valaccodelinedirective.vala
index 8f6747889..96b0e017b 100644
--- a/ccode/valaccodelinedirective.vala
+++ b/ccode/valaccodelinedirective.vala
@@ -34,18 +34,18 @@ public class Vala.CCodeLineDirective : CCodeNode {
/**
* The line number in the source file to be presumed.
*/
- public int line { get; set; }
+ public int line_number { get; set; }
public CCodeLineDirective (string _filename, int _line) {
filename = _filename;
- line = _line;
+ line_number = _line;
}
public override void write (CCodeWriter writer) {
if (!writer.bol) {
writer.write_newline ();
}
- writer.write_string ("#line %d \"%s\"".printf (line, filename));
+ writer.write_string ("#line %d \"%s\"".printf (line_number, filename));
writer.write_newline ();
}
}
diff --git a/vala/valaclass.vala b/vala/valaclass.vala
index 1627eaa4c..6cece1ffd 100644
--- a/vala/valaclass.vala
+++ b/vala/valaclass.vala
@@ -329,9 +329,9 @@ public class Vala.Class : ObjectTypeSymbol {
}
var cm = (CreationMethod) m;
- if (cm.type_name != null && cm.type_name != name) {
- // type_name is null for constructors generated by GIdlParser
- Report.error (m.source_reference, "missing return type in method `%s.%s´".printf (get_full_name (), cm.type_name));
+ if (cm.class_name != null && cm.class_name != name) {
+ // class_name is null for constructors generated by GIdlParser
+ Report.error (m.source_reference, "missing return type in method `%s.%s´".printf (get_full_name (), cm.class_name));
m.error = true;
return;
}
diff --git a/vala/valacodenode.vala b/vala/valacodenode.vala
index 015f227da..bcee17efe 100644
--- a/vala/valacodenode.vala
+++ b/vala/valacodenode.vala
@@ -45,6 +45,10 @@ public abstract class Vala.CodeNode {
* Contains all attributes that have been specified for this code node.
*/
public GLib.List<Attribute> attributes;
+
+ public string type_name {
+ get { return Type.from_instance (this).name (); }
+ }
/**
* Generated CCodeNode that corresponds to this code node.
@@ -189,8 +193,4 @@ public abstract class Vala.CodeNode {
public string get_temp_name () {
return "." + (++last_temp_nr).to_string ();
}
-
- public weak string get_type_name () {
- return Type.from_instance (this).name ();
- }
}
diff --git a/vala/valaconstant.vala b/vala/valaconstant.vala
index d8fc272df..dd5c4a8dc 100644
--- a/vala/valaconstant.vala
+++ b/vala/valaconstant.vala
@@ -181,6 +181,10 @@ public class Vala.Constant : Member, Lockable {
}
}
+ if (!external_package && !hides && get_hidden_member () != null) {
+ Report.warning (source_reference, "%s hides inherited constant `%s'. Use the `new' keyword if hiding was intentional".printf (get_full_name (), get_hidden_member ().get_full_name ()));
+ }
+
analyzer.current_source_file = old_source_file;
analyzer.current_symbol = old_symbol;
diff --git a/vala/valacreationmethod.vala b/vala/valacreationmethod.vala
index fbdf9aa90..8700b0564 100644
--- a/vala/valacreationmethod.vala
+++ b/vala/valacreationmethod.vala
@@ -31,7 +31,7 @@ public class Vala.CreationMethod : Method {
/**
* Specifies the name of the type this creation method belongs to.
*/
- public string type_name { get; set; }
+ public string class_name { get; set; }
/**
* Specifies the number of parameters this creation method sets.
@@ -59,9 +59,9 @@ public class Vala.CreationMethod : Method {
* @param source_reference reference to source code
* @return newly created method
*/
- public CreationMethod (string? type_name, string? name, SourceReference? source_reference = null) {
+ public CreationMethod (string? class_name, string? name, SourceReference? source_reference = null) {
base (name, new VoidType (), source_reference);
- this.type_name = type_name;
+ this.class_name = class_name;
carray_length_parameter_position = -3;
cdelegate_target_parameter_position = -3;
@@ -125,9 +125,9 @@ public class Vala.CreationMethod : Method {
process_attributes ();
- if (type_name != null && type_name != parent_symbol.name) {
- // type_name is null for constructors generated by GIdlParser
- Report.error (source_reference, "missing return type in method `%s.%s´".printf (analyzer.current_symbol.get_full_name (), type_name));
+ if (class_name != null && class_name != parent_symbol.name) {
+ // class_name is null for constructors generated by GIdlParser
+ Report.error (source_reference, "missing return type in method `%s.%s´".printf (analyzer.current_symbol.get_full_name (), class_name));
error = true;
return false;
}
diff --git a/vala/valaenum.vala b/vala/valaenum.vala
index e709f8660..1d1e8c112 100644
--- a/vala/valaenum.vala
+++ b/vala/valaenum.vala
@@ -165,13 +165,7 @@ public class Vala.Enum : TypeSymbol {
return false;
}
- /**
- * Returns the string to be prepended to the name of members of this
- * enum when used in C code.
- *
- * @return the prefix to be used in C code
- */
- public string get_cprefix () {
+ public override string get_cprefix () {
if (cprefix == null) {
cprefix = "%s_".printf (get_upper_case_cname ());
}
diff --git a/vala/valaerrordomain.vala b/vala/valaerrordomain.vala
index 713e452ed..eecd97c8e 100644
--- a/vala/valaerrordomain.vala
+++ b/vala/valaerrordomain.vala
@@ -148,13 +148,7 @@ public class Vala.ErrorDomain : TypeSymbol {
this.cname = cname;
}
- /**
- * Returns the string to be prepended to the name of members of this
- * error domain when used in C code.
- *
- * @return the prefix to be used in C code
- */
- public string get_cprefix () {
+ public override string get_cprefix () {
if (cprefix == null) {
cprefix = "%s_".printf (get_upper_case_cname (null));
}
diff --git a/vala/valafield.vala b/vala/valafield.vala
index d24491e8b..24ac796e7 100644
--- a/vala/valafield.vala
+++ b/vala/valafield.vala
@@ -321,6 +321,10 @@ public class Vala.Field : Member, Lockable {
}
}
+ if (!external_package && !hides && get_hidden_member () != null) {
+ Report.warning (source_reference, "%s hides inherited field `%s'. Use the `new' keyword if hiding was intentional".printf (get_full_name (), get_hidden_member ().get_full_name ()));
+ }
+
if (field_in_header) {
if (field_type is ValueType) {
analyzer.current_source_file.add_type_dependency (field_type, SourceFileDependencyType.HEADER_FULL);
diff --git a/vala/valamember.vala b/vala/valamember.vala
index 7da055f58..8628d1a69 100644
--- a/vala/valamember.vala
+++ b/vala/valamember.vala
@@ -68,6 +68,32 @@ public abstract class Vala.Member : Symbol {
public void add_cheader_filename (string filename) {
cheader_filenames.add (filename);
}
+
+ public Symbol? get_hidden_member () {
+ Symbol sym = null;
+
+ if (parent_symbol is Class) {
+ var cl = ((Class) parent_symbol).base_class;
+ while (cl != null) {
+ sym = cl.scope.lookup (name);
+ if (sym != null && sym.access != SymbolAccessibility.PRIVATE) {
+ return sym;
+ }
+ cl = cl.base_class;
+ }
+ } else if (parent_symbol is Struct) {
+ var st = ((Struct) parent_symbol).base_struct;
+ while (st != null) {
+ sym = st.scope.lookup (name);
+ if (sym != null && sym.access != SymbolAccessibility.PRIVATE) {
+ return sym;
+ }
+ st = st.base_struct;
+ }
+ }
+
+ return null;
+ }
}
public enum MemberBinding {
diff --git a/vala/valamethod.vala b/vala/valamethod.vala
index 231a945a9..ae3207edd 100644
--- a/vala/valamethod.vala
+++ b/vala/valamethod.vala
@@ -744,6 +744,10 @@ public class Vala.Method : Member {
Report.error (source_reference, "%s: no suitable method found to override".printf (get_full_name ()));
}
+ if (!external_package && !overrides && !hides && get_hidden_member () != null) {
+ Report.warning (source_reference, "%s hides inherited method `%s'. Use the `new' keyword if hiding was intentional".printf (get_full_name (), get_hidden_member ().get_full_name ()));
+ }
+
// check whether return type is at least as accessible as the method
if (!analyzer.is_type_accessible (this, return_type)) {
error = true;
diff --git a/vala/valanamespace.vala b/vala/valanamespace.vala
index a113381a5..1c0d9ad45 100644
--- a/vala/valanamespace.vala
+++ b/vala/valanamespace.vala
@@ -86,7 +86,7 @@ public class Vala.Namespace : Symbol {
foreach (Enum en in ns.get_enums ()) {
old_ns.add_enum (en);
}
- foreach (ErrorDomain ed in ns.get_error_types ()) {
+ foreach (ErrorDomain ed in ns.get_error_domains ()) {
old_ns.add_error_domain (ed);
}
foreach (Constant c in ns.get_constants ()) {
@@ -254,7 +254,7 @@ public class Vala.Namespace : Symbol {
*
* @return error domain list
*/
- public Gee.List<ErrorDomain> get_error_types () {
+ public Gee.List<ErrorDomain> get_error_domains () {
return new ReadOnlyList<ErrorDomain> (error_domains);
}
diff --git a/vala/valaproperty.vala b/vala/valaproperty.vala
index 52e65733d..b138c547d 100644
--- a/vala/valaproperty.vala
+++ b/vala/valaproperty.vala
@@ -448,6 +448,10 @@ public class Vala.Property : Member, Lockable {
Report.error (source_reference, "%s: no suitable property found to override".printf (get_full_name ()));
}
+ if (!external_package && !overrides && !hides && get_hidden_member () != null) {
+ Report.warning (source_reference, "%s hides inherited property `%s'. Use the `new' keyword if hiding was intentional".printf (get_full_name (), get_hidden_member ().get_full_name ()));
+ }
+
/* construct properties must be public */
if (set_accessor != null && set_accessor.construction) {
if (access != SymbolAccessibility.PUBLIC) {
diff --git a/vala/valastruct.vala b/vala/valastruct.vala
index d517aba65..6962b2938 100644
--- a/vala/valastruct.vala
+++ b/vala/valastruct.vala
@@ -177,9 +177,9 @@ public class Vala.Struct : TypeSymbol {
}
var cm = (CreationMethod) m;
- if (cm.type_name != null && cm.type_name != name) {
+ if (cm.class_name != null && cm.class_name != name) {
// type_name is null for constructors generated by GIdlParser
- Report.error (m.source_reference, "missing return type in method `%s.%s´".printf (get_full_name (), cm.type_name));
+ Report.error (m.source_reference, "missing return type in method `%s.%s´".printf (get_full_name (), cm.class_name));
m.error = true;
return;
}