Skip to content

Commit cd5c3f3

Browse files
committed
Failing test
May be a specific regression of https://issues.apache.org/jira/browse/GROOVY-9526 See https://github.com/apache/groovy/pull/1168/files for some original context Stacktrace when test is run: BUG! exception in phase 'semantic analysis' in source unit 'map://local/BaseClass.groovy' null BUG! exception in phase 'semantic analysis' in source unit 'map://local/BaseClass.groovy' null at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:869) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:660) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:634) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:365) at groovy.lang.GroovyClassLoader.lambda$parseClass$2(GroovyClassLoader.java:314) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) at org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:314) at groovy.util.GroovyScriptEngine$ScriptClassLoader.doParseClass(GroovyScriptEngine.java:231) at groovy.util.GroovyScriptEngine$ScriptClassLoader.parseClass(GroovyScriptEngine.java:218) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:263) at groovy.util.GroovyScriptEngine.loadScriptByName(GroovyScriptEngine.java:534) at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:321) at groovy.util.GroovyScriptEngineReloadingTest.testRecompilingWithGenericsTwoElectricBoogaloo(GroovyScriptEngineReloadingTest.groovy:210) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58) at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40) at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54) at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:568) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36) at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24) at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33) at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92) at jdk.proxy1/jdk.proxy1.$Proxy9.processTestClass(Unknown Source) at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:183) at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:132) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:103) at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:63) at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122) at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:72) at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69) at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74) Caused by: java.lang.UnsupportedOperationException at java.base/java.util.AbstractMap.put(AbstractMap.java:209) at org.codehaus.groovy.control.ResolveVisitor.resolveGenericsHeader(ResolveVisitor.java:1452) at org.codehaus.groovy.control.ResolveVisitor.resolveGenericsHeader(ResolveVisitor.java:1409) at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1284) at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:258) at org.codehaus.groovy.control.CompilationUnit.lambda$addPhaseOperations$3(CompilationUnit.java:201) at org.codehaus.groovy.control.CompilationUnit$ISourceUnitOperation.doPhaseOperation(CompilationUnit.java:865) ... 59 more
1 parent b56ddca commit cd5c3f3

1 file changed

Lines changed: 33 additions & 0 deletions

File tree

src/test/groovy/groovy/util/GroovyScriptEngineReloadingTest.groovy

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,39 @@ final class GroovyScriptEngineReloadingTest {
182182

183183
}
184184

185+
@Test
186+
void testRecompilingWithGenericsAndConstants() {
187+
MapFileSystem.instance.modFile('BaseClass.groovy', 'class BaseClass<T> {}', gse.@time)
188+
189+
def tertiaryClassText = '''
190+
class NotGeneric {
191+
/**
192+
* Not typed on purpose - if typed as String then NotGeneric is no longer a dependency of
193+
* ParameterisedClass for some reason...
194+
*/
195+
public static final Object CONSTANT = "not generic"
196+
}
197+
'''
198+
MapFileSystem.instance.modFile('NotGeneric.groovy', tertiaryClassText, gse.@time)
199+
200+
def subClassText = '''
201+
class SubClass extends BaseClass<String> {
202+
public static final String CONSTANT = NotGeneric.CONSTANT
203+
}
204+
'''
205+
MapFileSystem.instance.modFile('SubClass.groovy', subClassText, gse.@time)
206+
207+
MapFileSystem.instance.modFile('scriptUsingGeneric.groovy', 'SubClass.CONSTANT', gse.@time)
208+
209+
210+
gse.loadScriptByName('scriptUsingGeneric.groovy')
211+
sleep 1000
212+
213+
// make a change to the sub-class so that it gets recompiled
214+
MapFileSystem.instance.modFile('SubClass.groovy', subClassText + '\n', gse.@time)
215+
gse.loadScriptByName('scriptUsingGeneric.groovy')
216+
}
217+
185218
@Test
186219
void testDeleteDependent() {
187220
sleep 10000

0 commit comments

Comments
 (0)