(final Class<?> sender, final Class<?> receiver, final String name)
| 2127 | } |
| 2128 | |
| 2129 | private Object getClassProperty(final Class<?> sender, final Class<?> receiver, final String name) throws MissingPropertyException { |
| 2130 | try { |
| 2131 | MetaClass cmc = registry.getMetaClass(Class.class); |
| 2132 | return cmc.getProperty(Class.class, receiver, name, false, false); |
| 2133 | } catch (MissingPropertyException ignored) { |
| 2134 | } |
| 2135 | |
| 2136 | try { |
| 2137 | // try $static_propertyMissing / throw MissingPropertyException |
| 2138 | return invokeStaticMissingProperty(receiver, name, null, true); |
| 2139 | } catch (MissingPropertyException missing) { |
| 2140 | if (isGroovyObject()) { // GROOVY-11823, et al. |
| 2141 | var outerClass = getNonClosureOuter(theClass); |
| 2142 | if (outerClass != null && sender.isNestmateOf(outerClass)) { |
| 2143 | try { |
| 2144 | MetaClass omc = registry.getMetaClass(outerClass); |
| 2145 | return omc.getProperty(sender, outerClass, name, false, false); |
| 2146 | } catch (MissingPropertyException mpe) { |
| 2147 | missing.addSuppressed(mpe); |
| 2148 | } |
| 2149 | } |
| 2150 | } |
| 2151 | throw missing; |
| 2152 | } |
| 2153 | } |
| 2154 | |
| 2155 | private Object getOuterProperty(final Class<?> sender, final Object object, final String name, final MissingPropertyException mpe) { |
| 2156 | if (sender == theClass ? isGroovyObject() : GroovyObject.class.isAssignableFrom(sender)) { |
no test coverage detected