You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Martin Skurla (JIRA)" <ji...@apache.org> on 2018/05/07 13:20:00 UTC

[jira] [Commented] (GROOVY-8572) Groovy 2.4.12 Static compiler fails on nonsense type inference error

    [ https://issues.apache.org/jira/browse/GROOVY-8572?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16465902#comment-16465902 ] 

Martin Skurla commented on GROOVY-8572:
---------------------------------------

Groovy class:
{code:java}
package apollosoft.build.support.gradle.assets


import groovy.transform.CompileStatic
import groovy.transform.TupleConstructor


@CompileStatic
@TupleConstructor
class ApolloAssetCategory {
    final String name
    final List<String> includes
    final boolean cleanExecutableFlag

    @Override
    String toString() {
        "($name includes: $includes, cleanExecutableFlag: $cleanExecutableFlag)"
    }
}

@CompileStatic
@TupleConstructor
class ApolloAssetSvnRepository {
    static final String DEFAULT_SVN_USER     = 'apollo'
    static final String DEFAULT_SVN_PASSWORD = 'apollo'

    final String name
    final String url
    final String user
    final String password

    @Override
    String toString() {
        "($name url: $url, user: $user, password: $password)"
    }
}

@CompileStatic
class ApolloAssetsDSLExtension {
    final List<ApolloAssetCategory>      categories      = []
    final List<ApolloAssetSvnRepository> svnRepositories = []

    final Map<String, ApolloAssetCategory>      categoriesMap      = [:]
    final Map<String, ApolloAssetSvnRepository> svnRepositoriesMap = [:]

    boolean hardCopy       // writeable property
    boolean overwriteFiles // writeable property

    private static final String INCLUDES_PARAM_NAME             = 'includes'
    private static final String CLEAN_EXECUTABLE_FLAG_PARAM_NAME= 'cleanExecutableFlag'

    void categories(Closure closure) {
        closure.resolveStrategy = Closure.OWNER_FIRST
        closure.delegate = new Object() {
            @Override
            Object invokeMethod(String methodName, Object args) {
                Map<String, Object> paramMap = ((Map) args)[0] as Map

                if (!paramMap.containsKey(INCLUDES_PARAM_NAME))
                    throw new IllegalApolloAssetsDSLNotationException("Category declaration does not contain '$INCLUDES_PARAM_NAME' parameter!")

                ApolloAssetCategory category = new ApolloAssetCategory(methodName,
                                                                       (List<String>) paramMap[INCLUDES_PARAM_NAME],
                                                                       // because of the Groovy's truth, it has to be written in this stupid way
                                                                       paramMap[CLEAN_EXECUTABLE_FLAG_PARAM_NAME] == true ? true : false)

                categories << category
                categoriesMap.put methodName, category
            }
        }
        closure.call()
    }

    void svnRepositories(Closure closure) {
        closure.resolveStrategy = Closure.OWNER_FIRST
        closure.delegate = new Object() {
            @Override
            Object invokeMethod(String methodName, Object args) {
                ApolloAssetSvnRepository svnRepository = new ApolloAssetSvnRepository(methodName,
                                                                                      (String) ((Map) args)[0]['url'],
                                                                                      (String) ((Map) args)[0]['user']     ?: ApolloAssetSvnRepository.DEFAULT_SVN_USER,
                                                                                      (String) ((Map) args)[0]['password'] ?: ApolloAssetSvnRepository.DEFAULT_SVN_PASSWORD)
                svnRepositories << svnRepository
                svnRepositoriesMap.put methodName, svnRepository
            }
        }
        closure.call()
    }
}

{code}

> Groovy 2.4.12 Static compiler fails on nonsense type inference error
> --------------------------------------------------------------------
>
>                 Key: GROOVY-8572
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8572
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static Type Checker
>    Affects Versions: 2.4.12
>            Reporter: Martin Skurla
>            Priority: Major
>
> I am using Gradle which internally currently uses Groovy 2.4.12.
> I am getting the following error:
> {code:java}
> martin@martin-desktop:~/devel/apollo/buildteam/gradle_plugins(master)$ ./gradlew clean test
> > Task :compileGroovy
> startup failed:
> /home/martin/devel/apollo/buildteam/gradle_plugins/src/main/groovy/apollosoft/build/support/gradle/assets/ApolloAssetsDSLExtension.groovy: 54: [Static type checking] - Cannot use diamond <> with anonymous inner classes
>  @ line 54, column 28.
>            closure.delegate = new Object() {
>                               ^
> 1 error
> {code}
> It looks like it is wrong, I am not specifying any diamond operator anywhere.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)