[ https://issues.apache.org/jira/browse/GROOVY-9081?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Sun updated GROOVY-9081: ------------------------------- Description: This cloned issue is to cover the rest part of case ② as mentioned in GROOVY-8339. h4. 1) Sub-class derives the public members from {{package-private}} class, but invoke the members on the sub class instances, e.g. [https://github.com/apache/groovy/blob/master/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy#L532] *This case is almost fixed except for using category:* [https://github.com/apache/groovy/blob/master/src/spec/test/TraitsSpecificationTest.groovy#L835] h4. 2) Sub-class derives the {{protected}} members from public class, *2.0) Invoke the members on the sub class instances, e.g.* [https://github.com/apache/groovy/blob/master/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy#L31-L40] We are considering to generate stub/bridge methods automatically. *2.1) Clone array via {{clone}} method of {{java.lang.Object}} ( Note: the method is {{protected}} ), e.g.* [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/transform/ImmutableTransformTest.groovy#L163-L180] we have to find a solution to fix, as {{clone}} method of array can not be found via {{arrayClazz.getMethods()}} *2.2) Access the overrided {{protected}} method of sub-class(Truely illegal access, we should fix our code), e.g.* [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/transform/classloading/TransformsAndCustomClassLoadersTest.groovy#L124] {{AppClassLoader}} derives {{ClassLoader}}, but {{Class<?> loadClass(String cn, boolean resolve)}} of {{AppClassLoader}} is still {{protected}}, we should not access it if we do not want warnings. *2.3) Access the {{protected final}} method(Truely illegal access, we should fix our code), e.g.* [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/reflection/SecurityTest.java#L243-L258] {{protected final Class<?> defineClass(String name, java.nio.ByteBuffer b, ProtectionDomain protectionDomain)}} of {{ClassLoader}} h4. 3) Access {{public}} members of {{private}} class, e.g. [https://github.com/apache/groovy/blob/master/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy#L235] {{java.util.Collections.UnmodifiableMap::toString}} We should try to find the overrided member of its base class and access(virtual invocation will happen eventually) h4. 4) Favor the method with more accurate parameter type even if it is not visible, e.g. {{EnumMap::equals(EnumMap<?,?>)}} [https://github.com/apache/groovy/blob/master/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy#L271] When comparing two {{ClassNode}} instances, {{ClassNode.transformInstances}} will be compared, their type is {{EnumMap}} was: This cloned issue is to cover the rest part of case ② as mentioned in GROOVY-8339. h4. 1) Sub-class derives the public members from {{package-private}} class, but invoke the members on the sub class instances, e.g. [https://github.com/apache/groovy/blob/master/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy#L532] *This case is almost fixed except for using category:* [https://github.com/apache/groovy/blob/master/src/spec/test/TraitsSpecificationTest.groovy#L835] h4. 2) Sub-class derives the {{protected}} members from public class, *2.0) Invoke the members on the sub class instances, e.g.* [https://github.com/apache/groovy/blob/master/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy#L31-L40] We are considering to generate stub/bridge methods automatically. *2.1) Clone array via {{clone}} method of {{java.lang.Object}} ( Note: the method is {{protected}} ), e.g.* [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/transform/ImmutableTransformTest.groovy#L163-L180] we have to find a solution to fix, as {{clone}} method of array can not be found via {{arrayClazz.getMethods()}} *2.2) Accessing the overrided {{protected}} method of sub-class(Truely illegal access, we should fix our code), e.g.* https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/transform/classloading/TransformsAndCustomClassLoadersTest.groovy#L124 {{AppClassLoader}} derives {{ClassLoader}}, but {{Class<?> loadClass(String cn, boolean resolve)}} of {{AppClassLoader}} is still {{protected}}, we should not access it if we do not want warnings. *2.3) Accessing the {{protected final}} method(Truely illegal access, we should fix our code), e.g.* https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/reflection/SecurityTest.java#L243-L258 {{protected final Class<?> defineClass(String name, java.nio.ByteBuffer b, ProtectionDomain protectionDomain)}} of {{ClassLoader}} h4. 3) Access {{public}} members of {{private}} class, e.g. https://github.com/apache/groovy/blob/master/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy#L235 {{java.util.Collections.UnmodifiableMap::toString}} We should try to find the overrided member of its base class and access(virtual invocation will happen eventually) h4. 4) Favor the method with more accurate parameter type even if it is not visible, e.g. {{EnumMap::equals(EnumMap<?,?>)}} [https://github.com/apache/groovy/blob/master/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy#L271] When comparing two {{ClassNode}} instances, {{ClassNode.transformInstances}} will be compared, their type is {{EnumMap}} > CLONE - Fix warning "An illegal reflective access operation has occurred" > ------------------------------------------------------------------------- > > Key: GROOVY-9081 > URL: https://issues.apache.org/jira/browse/GROOVY-9081 > Project: Groovy > Issue Type: Improvement > Components: groovy-jdk > Affects Versions: 2.4.11, 2.4.15 > Environment: >gradle --version > Gradle 4.2 > Build time: 2017-09-20 14:48:23 UTC > Revision: 5ba503cc17748671c83ce35d7da1cffd6e24dfbd > Groovy: 2.4.11 > Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015 > JVM: 9 (Oracle Corporation 9+181) > OS: Windows 10 10.0 amd64 > Reporter: Benjamin Roedell > Priority: Major > Labels: security > > This cloned issue is to cover the rest part of case ② as mentioned in > GROOVY-8339. > h4. 1) Sub-class derives the public members from {{package-private}} class, > but invoke the members on the sub class instances, e.g. > [https://github.com/apache/groovy/blob/master/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy#L532] > *This case is almost fixed except for using category:* > > [https://github.com/apache/groovy/blob/master/src/spec/test/TraitsSpecificationTest.groovy#L835] > h4. 2) Sub-class derives the {{protected}} members from public class, > *2.0) Invoke the members on the sub class instances, e.g.* > > [https://github.com/apache/groovy/blob/master/subprojects/groovy-swing/src/test/groovy/groovy/beans/BindableSwingTest.groovy#L31-L40] > We are considering to generate stub/bridge methods automatically. > *2.1) Clone array via {{clone}} method of {{java.lang.Object}} ( Note: the > method is {{protected}} ), e.g.* > > [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/transform/ImmutableTransformTest.groovy#L163-L180] > we have to find a solution to fix, as {{clone}} method of array can not be > found via {{arrayClazz.getMethods()}} > *2.2) Access the overrided {{protected}} method of sub-class(Truely illegal > access, we should fix our code), e.g.* > > [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/transform/classloading/TransformsAndCustomClassLoadersTest.groovy#L124] > {{AppClassLoader}} derives {{ClassLoader}}, but {{Class<?> loadClass(String > cn, boolean resolve)}} of {{AppClassLoader}} is still {{protected}}, we > should not access it if we do not want warnings. > *2.3) Access the {{protected final}} method(Truely illegal access, we should > fix our code), e.g.* > > [https://github.com/apache/groovy/blob/master/src/test/org/codehaus/groovy/reflection/SecurityTest.java#L243-L258] > {{protected final Class<?> defineClass(String name, java.nio.ByteBuffer b, > ProtectionDomain protectionDomain)}} of {{ClassLoader}} > h4. 3) Access {{public}} members of {{private}} class, e.g. > [https://github.com/apache/groovy/blob/master/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy#L235] > {{java.util.Collections.UnmodifiableMap::toString}} > We should try to find the overrided member of its base class and > access(virtual invocation will happen eventually) > h4. 4) Favor the method with more accurate parameter type even if it is not > visible, e.g. {{EnumMap::equals(EnumMap<?,?>)}} > [https://github.com/apache/groovy/blob/master/subprojects/parser-antlr4/src/test/groovy/org/apache/groovy/parser/antlr4/util/ASTComparatorCategory.groovy#L271] > When comparing two {{ClassNode}} instances, {{ClassNode.transformInstances}} > will be compared, their type is {{EnumMap}} -- This message was sent by Atlassian JIRA (v7.6.3#76005)