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)