[
https://issues.apache.org/jira/browse/GROOVY-9927?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Keegan Witt updated GROOVY-9927:
--------------------------------
Summary: Stub not using fully qualified class for inner java class when
importing outer class (was: Stub qualified class for inner java class when
importing outer class)
> Stub not using fully 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}
> The stub has
> {code:java}
> public java.lang.String describeLevel(Logger.Level loggerLevel) { return
> (java.lang.String)null;}
> {code}
> With no import for {{Logger}}.
> If you instead do
> {code:groovy}import model.Logger.LogLevel{code}
> instead of
> {code:groovy}import model.Logger{code}
> it prints the qualified name in the stub.
> It also works if you put the qualified name in Groovy, that also works, like
> {code:groovy}String describeLevel(model.Logger.Level loggerLevel){code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)