Search code examples
javagradlebuild.gradlegradle-eclipse

Gradle complains it can't convert long to int even while the method takes long as parameter


When running "gradle build" I got the following error with one of our projects, couple of the classes get the following compile error:

cannot be applied to given types;
                this._logFilter.setFirstResult(firstResult);
                               ^
  required: int
  found: long
  reason: actual argument long cannot be converted to int by method invocation conversion

Even though, the method setFirstResult takes a long as parameter. Here is the code:

public void setFirstResult(long firstResult) {
    this._firstResult = firstResult;
}

I have tried --refresh-dependencies and cleared out cache etc. None of those worked for me. In addition, this project was a maven project, I converted it over to use gradle instead.

Edit:

I'm adding additional context here per the request from the comments:

Here is the source code for the this._logFilter

public class GlobalMessageLogFilter {
    private long _firstResult = 0L;

    private long _maxResults = 100L;

    private Application _application;

    private SeverityLevelEnum _severityLevel;

    private EnvironmentEnum _environment;

    private String _userName;

    private Category _category;

    public EnvironmentEnum getEnvironment() {
        return this._environment;
    }

    public void setEnvironment(EnvironmentEnum environment) {
        this._environment = environment;
    }

    public long getFirstResult() {
        return this._firstResult;
    }

    public void setFirstResult(long firstResult) {
        this._firstResult = firstResult;
    }

    public long getMaxResults() {
        return this._maxResults;
    }

    public void setMaxResults(long maxResults) {
        this._maxResults = maxResults;
    }

    public Application getApplication() {
        return this._application;
    }

    public void setApplication(Application application) {
        this._application = application;
    }

    public SeverityLevelEnum getSeverityLevel() {
        return this._severityLevel;
    }

    public void setSeverityLevel(SeverityLevelEnum severityLevel) {
        this._severityLevel = severityLevel;
    }

    public String getUserName() {
        return this._userName;
    }

    public void setUserName(String userName) {
        this._userName = userName;
    }

    public Category getCategory() {
        return this._category;
    }

    public void setCategory(Category category) {
        this._category = category;
    }
}

Here is the full stack-trace

λ gradle build
:compileJava
C:\Java Source\wicket\administration\GlobalMessageLogProvider.java:36: error: method setFirstResult in class GlobalMessageLogFilter cannot be applied to given types;
                this._logFilter.setFirstResult(firstResult);
                               ^
  required: int
  found: long
  reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\GlobalMessageLogProvider.java:37: error: method setMaxResults in class GlobalMessageLogFilter cannot be applied to given types;
                this._logFilter.setMaxResults(maxResults);
                               ^
  required: int
  found: long
  reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\users\UserSecurityProvider.java:35: error: method setFirst in class UserSearchFilter cannot be applied to given types;
                this._filter.setFirst(first);
                            ^
  required: int
  found: long
  reason: actual argument long cannot be converted to int by method invocation conversion
C:\Java Source\wicket\administration\users\UserSecurityProvider.java:36: error: method setCount in class UserSearchFilter cannot be applied to given types;
                this._filter.setCount(count);
                            ^
  required: int
  found: long
  reason: actual argument long cannot be converted to int by method invocation conversion

Edit: added the source code of GlobalMessageLogProvider

public class GlobalMessageLogProvider extends SortableDataProvider<GlobalMessageLog, String>
{
    @SpringBean
    private GlobalMessageLogRepository _globalMessageLogRepository;
    private GlobalMessageLogFilter _logFilter;
    private boolean _searchAllowed = false;


    public GlobalMessageLogProvider(GlobalMessageLogFilter globalMessageLogFilter)
    {
        Injector.get().inject(this);
        this._logFilter = globalMessageLogFilter;
    }


    @Override
    public Iterator<? extends GlobalMessageLog> iterator(long firstResult, long maxResults)
    {
        this._logFilter.setFirstResult(firstResult);
        this._logFilter.setMaxResults(maxResults);
        Iterator<GlobalMessageLog> results = Arrays.<GlobalMessageLog> asList().iterator();

        if (this._searchAllowed)
        {
            if (super.getSort() == null)
            {
                results = this._globalMessageLogRepository.search(this._logFilter, "id", false).iterator();
            } else
            {
                results =
                        this._globalMessageLogRepository.search(this._logFilter,
                                super.getSort().getProperty(),
                                super.getSort().isAscending()).iterator();
            }
        }
        return results;
    }
}

Solution

  • I found out the issue and I was able to get it resolved. Majority comment pointed out the setFirstResult(int firstResult) is the wrong version of class it been using. they are correct.

    Bascially, the GlobalMessageLogProvider was been changed, but the latest verison of jar has never been pushed to the Nexus sever(our own private third party dependency server). so, whenever I pull the jar down, it always reference the old one.

    After manually push the latest jar to the Nexus server and i was able to successfully build the project with gradle without error.

    So Take-away from this question: We need create a build process that will automatically build/push latest version of jar to the Nexus server. I'm thinking about create the build/push process through our TeamCity build server with some customized command/script. (Please feel free to provide any better suggestion/practice tips if there are).

    Thank you everyone for the kindness help, I sincerely appreciated.