You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Keegan Witt (Jira)" <ji...@apache.org> on 2021/02/03 04:08:00 UTC
[jira] [Updated] (GROOVY-9927) Stub qualified class for inner java
class when importing outer class
[ https://issues.apache.org/jira/browse/GROOVY-9927?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Keegan Witt updated GROOVY-9927:
--------------------------------
Description:
Here's a failing test, demonstrating the problem
{code:groovy}
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.codehaus.groovy.tools.stubgenerator
class InnerJavaClassOuterImportInGroovy extends StringSourcesStubTestCase {
Map<String, String> provideSources() {
[
'model/Logger.java': '''
package model;
public class Logger {
public enum Level {
DEBUG, INFO, WARN, ERROR
}
}
''',
'service/LoggerLevelDescriber.groovy': '''
package service
import model.Logger
class LoggerLevelDescriber {
String describeLevel(Logger.Level loggerLevel) { return loggerLevel.name }
}
'''
]
}
void verifyStubs() {
def stubSource = stubJavaSourceFor('service.LoggerLevelDescriber')
assert stubSource.contains(' describeLevel(model.Logger.Level ')
// TODO: should this be tested too?
// def classLoader = new URLClassLoader([targetDir.toURI().toURL()] as URL[], loader)
// classLoader.loadClass('model.Logger')
// classLoader.loadClass('model.Logger.Level')
// classLoader.loadClass('service.LoggerLevelDescriber')
}
}
{code}
If you instead do {{import model.Logger.LogLevel}} instead of {{import model.Logger}}, it prints the qualified name in the stub.
Also if you put the qualified name in Groovy ({{String describeLevel(model.Logger.Level loggerLevel)}}), that also works.
was:
Here's a failing test, demonstrating the problem
{code:java}
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.codehaus.groovy.tools.stubgenerator
class InnerJavaClassOuterImportInGroovy extends StringSourcesStubTestCase {
Map<String, String> provideSources() {
[
'model/Logger.java': '''
package model;
public class Logger {
public enum Level {
DEBUG, INFO, WARN, ERROR
}
}
''',
'service/LoggerLevelDescriber.groovy': '''
package service
import model.Logger
class LoggerLevelDescriber {
String describeLevel(Logger.Level loggerLevel) { return loggerLevel.name }
}
'''
]
}
void verifyStubs() {
def stubSource = stubJavaSourceFor('service.LoggerLevelDescriber')
assert stubSource.contains(' describeLevel(model.Logger.Level ')
// TODO: should this be tested too?
// def classLoader = new URLClassLoader([targetDir.toURI().toURL()] as URL[], loader)
// classLoader.loadClass('model.Logger')
// classLoader.loadClass('model.Logger.Level')
// classLoader.loadClass('service.LoggerLevelDescriber')
}
}
{code}
> Stub qualified class for inner java class when importing outer class
> --------------------------------------------------------------------
>
> Key: GROOVY-9927
> URL: https://issues.apache.org/jira/browse/GROOVY-9927
> Project: Groovy
> Issue Type: Bug
> Components: Stub generator / Joint compiler
> Affects Versions: 3.0.7
> Reporter: Keegan Witt
> Priority: Major
>
> Here's a failing test, demonstrating the problem
> {code:groovy}
> /*
> * Licensed to the Apache Software Foundation (ASF) under one
> * or more contributor license agreements. See the NOTICE file
> * distributed with this work for additional information
> * regarding copyright ownership. The ASF licenses this file
> * to you under the Apache License, Version 2.0 (the
> * "License"); you may not use this file except in compliance
> * with the License. You may obtain a copy of the License at
> *
> * http://www.apache.org/licenses/LICENSE-2.0
> *
> * Unless required by applicable law or agreed to in writing,
> * software distributed under the License is distributed on an
> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> * KIND, either express or implied. See the License for the
> * specific language governing permissions and limitations
> * under the License.
> */
> package org.codehaus.groovy.tools.stubgenerator
> class InnerJavaClassOuterImportInGroovy extends StringSourcesStubTestCase {
> Map<String, String> provideSources() {
> [
> 'model/Logger.java': '''
> package model;
> public class Logger {
> public enum Level {
> DEBUG, INFO, WARN, ERROR
> }
> }
> ''',
> 'service/LoggerLevelDescriber.groovy': '''
> package service
> import model.Logger
> class LoggerLevelDescriber {
> String describeLevel(Logger.Level loggerLevel) { return loggerLevel.name }
> }
> '''
> ]
> }
> void verifyStubs() {
> def stubSource = stubJavaSourceFor('service.LoggerLevelDescriber')
> assert stubSource.contains(' describeLevel(model.Logger.Level ')
> // TODO: should this be tested too?
> // def classLoader = new URLClassLoader([targetDir.toURI().toURL()] as URL[], loader)
> // classLoader.loadClass('model.Logger')
> // classLoader.loadClass('model.Logger.Level')
> // classLoader.loadClass('service.LoggerLevelDescriber')
> }
> }
> {code}
> If you instead do {{import model.Logger.LogLevel}} instead of {{import model.Logger}}, it prints the qualified name in the stub.
> Also if you put the qualified name in Groovy ({{String describeLevel(model.Logger.Level loggerLevel)}}), that also works.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)