You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2018/09/13 06:46:45 UTC

[2/2] groovy git commit: Documentation updated: added static methodMissing and propertyMissing variants description (closes #794)

Documentation updated: added static methodMissing and propertyMissing variants description (closes #794)


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/80fcaf6b
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/80fcaf6b
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/80fcaf6b

Branch: refs/heads/GROOVY_2_5_X
Commit: 80fcaf6b2b0da8fc21330939132b31ad129fd4d9
Parents: 1283ff4
Author: Szymon Stępniak <sz...@gmail.com>
Authored: Mon Sep 10 19:42:49 2018 +0200
Committer: Paul King <pa...@asert.com.au>
Committed: Thu Sep 13 16:46:33 2018 +1000

----------------------------------------------------------------------
 src/spec/doc/core-metaprogramming.adoc          | 22 +++++++++++--
 ...icPropertyMissingAndMethodMissingTest.groovy | 33 ++++++++++++++++++++
 2 files changed, 52 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/80fcaf6b/src/spec/doc/core-metaprogramming.adoc
----------------------------------------------------------------------
diff --git a/src/spec/doc/core-metaprogramming.adoc b/src/spec/doc/core-metaprogramming.adoc
index da25e57..dc165d9 100644
--- a/src/spec/doc/core-metaprogramming.adoc
+++ b/src/spec/doc/core-metaprogramming.adoc
@@ -187,9 +187,25 @@ include::{projectdir}/src/spec/test/metaprogramming/MethodPropertyMissingTest.gr
 As with `methodMissing` it is best practice to dynamically register new properties at runtime to improve the overall lookup
 performance.
 
-[NOTE]
-`methodMissing` and `propertyMissing` methods that deal with static methods and properties can be added via
-the <<core-metaprogramming.adoc#metaprogramming_emc,ExpandoMetaClass>>.
+=== static methodMissing
+
+Static variant of `methodMissing` method can be added via the <<core-metaprogramming.adoc#metaprogramming_emc,ExpandoMetaClass>>
+or can be implemented at the class level with `$static_methodMissing` method.
+
+[source,groovy]
+----
+include::{projectdir}/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy[tags=static_method_missing,indent=0]
+----
+
+=== static propertyMissing
+
+Static variant of `propertyMissing` method can be added via the <<core-metaprogramming.adoc#metaprogramming_emc,ExpandoMetaClass>>
+or can be implemented at the class level with `$static_propertyMissing` method.
+
+[source,groovy]
+----
+include::{projectdir}/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy[tags=static_property_missing,indent=0]
+----
 
 === GroovyInterceptable
 The gapi:groovy.lang.GroovyInterceptable[] interface is marker interface that extends `GroovyObject` and is used to notify the Groovy runtime that all methods should be intercepted through the method dispatcher mechanism of the Groovy runtime.

http://git-wip-us.apache.org/repos/asf/groovy/blob/80fcaf6b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
----------------------------------------------------------------------
diff --git a/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
new file mode 100644
index 0000000..dbeff95
--- /dev/null
+++ b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
@@ -0,0 +1,33 @@
+package metaprogramming
+
+class StaticPropertyMissingAndMethodMissingTest extends GroovyTestCase {
+
+    void testStaticMethodMissing() {
+        assertScript '''
+            // tag::static_method_missing[]
+            class Foo {
+                static def $static_methodMissing(String name, Object args) {
+                    return "Missing static method name is $name"
+                }
+            }
+
+            assert Foo.bar() == 'Missing static method name is bar'
+            // end::static_method_missing[]
+'''
+    }
+
+    void testStaticPropertyMissing() {
+
+        assertScript '''
+            // tag::static_property_missing[]
+            class Foo {
+                static def $static_propertyMissing(String name) {
+                    return "Missing static property name is $name"
+                }
+            }
+
+            assert Foo.foobar == 'Missing static property name is foobar'
+            // end::static_property_missing[]
+'''
+    }
+}