Hi Tudor,
 

Very interesting. This is the first time I heard of lombok, and I would have to look into it more closely. What I find strange is that you get to visit the method (this is where you get the unresolved method declaration from) even if the method does not exist. I am sure I do not understand something. Would you like to open an issue for this?



Actually the lombok issue resolved itself. I found out that lombok provides a delombok functionality (https://projectlombok.org/features/delombok.html): 
"Delombok [...] allows you to use lombok with these tools by preprocessing your java code into java code with all of lombok's transformations already applied. [...] Delombok's standard mode of operation is that it copies an entire directory into another directory, recursively, skipping class files, and applying lombok transformations to any java source files it encounters."

So I just have analyse my delomboked source files instead of the original source files and everything will be fine.

 
> The cause of the next problem is that we have multiple smaller applications (e.g. backoffice and frontend) which are separate applications but share a common db. Some of these services have classes with the same class and packagename (e.g. an annotation WebController). This lead to the following error message:
> unresolved annotation type declaration - WebController - c:\data\moose\....\WebController.java - line 12
> I had to start the debugger to find the issue. I found it because AnnotationTypeDeclaration.parent.problems = "Pb(323) The type WebController is already defined"
> If the package names are different the problems disappears. Then I only get the the lombok errors. As a solution I will create unique base package names for my projecfs (which makes sense anyway).

Indeed. The only other solution for this problem is to analyze each sub-project separately. Also, perhaps I can manage to create a better log statement for this case. Would you like to open an issue on github for this?


> Note that you could the following example to you README of jdt2famix to show how to download the dependencies for gradle projects:
>
> task copyDependencies(type: Copy) {
>     from configurations.compile
>     from configurations.testCompile
>     into 'dependencies’
> }

Thanks!

Could you also tell me how to actually add this to a gradle script and invoke it? I tried a variation of this (without configurations.testCompile), but I did not manage to run it. I am likely missing something basic here, and perhaps if you would walk me through a concrete example, I could make some progress :). For example, what steps would you use for downloading the dependencies of https://github.com/spring-projects/spring-framework ?

Cheers,
Doru


Actually I tested it with the spring gradle file and it worked. The spring build file is a little bit more complicated, because it is a multimodule project. Basically an easy way to find the right place is to define it directly after the dependencies of the java projects. I added it as follows to the configure (allprojects) section:

configure(allprojects) { project ->
group = "org.springframework"
version = qualifyVersionIfNecessary(version)
         // ....

         task copyDependencies(type: Copy) {
            from configurations.compile
            into 'dependencies'
         }
  }

If you have a simple project (not a multi module one), there won't exist such a configure method. Then you can define it directly (e.g. after the dependencies). I attached my spring gradle build file to this mail. In my company project, which is a multi module project too, I added it to a configure method which is used for all java projects (we have some non java projects too). If I added to a configure method which is called for all projects due to the non java projects I would get an error. So it seems as if you always have to change you build files and as if there doesn't exist a general solution (like there exists one for maven). But I'm not a gradle expert, so there might exist a better solution.

Best regards
Meinert