modelbuilder: error when using `intrude' on classes and properties
authorJean Privat <jean@pryen.org>
Sat, 10 Aug 2013 02:06:33 +0000 (22:06 -0400)
committerJean Privat <jean@pryen.org>
Sat, 10 Aug 2013 02:06:33 +0000 (22:06 -0400)
Signed-off-by: Jean Privat <jean@pryen.org>

src/modelize_class.nit
src/modelize_property.nit
tests/error_visibility_protected.nit
tests/sav/error_visibility_protected_alt7.res [new file with mode: 0644]
tests/sav/error_visibility_protected_alt8.res [new file with mode: 0644]
tests/sav/error_visibility_protected_alt9.res [new file with mode: 0644]
tests/sav/nitc/fixme/error_visibility_protected_alt8.res [new file with mode: 0644]
tests/sav/nitc/fixme/error_visibility_protected_alt9.res [new file with mode: 0644]

index 197ded4..90eb70d 100644 (file)
@@ -54,6 +54,9 @@ redef class ModelBuilder
                        if mvisibility == protected_visibility then
                                error(nvisibility, "Error: only properties can be protected.")
                                return
+                       else if mvisibility == intrude_visibility then
+                               error(nvisibility, "Error: intrude is not a legal visibility for classes.")
+                               return
                        end
                else if nclassdef isa ATopClassdef then
                        name = "Object"
index 0215897..2a8a225 100644 (file)
@@ -207,7 +207,13 @@ redef class APropdef
        private fun new_property_visibility(modelbuilder: ModelBuilder, nclassdef: AClassdef, nvisibility: nullable AVisibility): MVisibility
        do
                var mvisibility = public_visibility
-               if nvisibility != null then mvisibility = nvisibility.mvisibility
+               if nvisibility != null then
+                       mvisibility = nvisibility.mvisibility
+                       if mvisibility == intrude_visibility then
+                               modelbuilder.error(nvisibility, "Error: intrude is not a legal visibility for properties.")
+                               mvisibility = public_visibility
+                       end
+               end
                if nclassdef.mclassdef.mclass.visibility == private_visibility then
                        if mvisibility == protected_visibility then
                                assert nvisibility != null
index 0bb634c..6e1fa98 100644 (file)
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import kernel #alt1# private import kernel #alt2# protected import kernel
+import kernel #alt1# private import kernel #alt2# protected import kernel #alt7# intrude import kernel
 
-class A #alt3# private class A #alt4# protected class A
-       fun foo #alt5# private fun foo #alt6# protected fun foo
+class A #alt3# private class A #alt4# protected class A #alt8# intrude class A
+       fun foo #alt5# private fun foo #alt6# protected fun foo #alt9# intrude fun foo
        do
                1.output
        end
diff --git a/tests/sav/error_visibility_protected_alt7.res b/tests/sav/error_visibility_protected_alt7.res
new file mode 100644 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1
diff --git a/tests/sav/error_visibility_protected_alt8.res b/tests/sav/error_visibility_protected_alt8.res
new file mode 100644 (file)
index 0000000..70c00d9
--- /dev/null
@@ -0,0 +1 @@
+alt/error_visibility_protected_alt8.nit:19,1--7: Error: intrude is not a legal visibility for classes.
diff --git a/tests/sav/error_visibility_protected_alt9.res b/tests/sav/error_visibility_protected_alt9.res
new file mode 100644 (file)
index 0000000..1b7fa04
--- /dev/null
@@ -0,0 +1 @@
+alt/error_visibility_protected_alt9.nit:20,2--8: Error: intrude is not a legal visibility for properties.
diff --git a/tests/sav/nitc/fixme/error_visibility_protected_alt8.res b/tests/sav/nitc/fixme/error_visibility_protected_alt8.res
new file mode 100644 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1
diff --git a/tests/sav/nitc/fixme/error_visibility_protected_alt9.res b/tests/sav/nitc/fixme/error_visibility_protected_alt9.res
new file mode 100644 (file)
index 0000000..d00491f
--- /dev/null
@@ -0,0 +1 @@
+1