This should be an ongoing post until Christmas. These are the things I’ve been wanting to see in Java/Groovy/Scala. (Tooling wise/language/etc)
- 
    
Better support/integration to show what lines of code haven’t been tested
 - 
    
Visualization of code execution within Threads.
 - 
    
A consistent templating solution to generate projects. (Maven needs a good cleaning on the templates)
 - 
    
Better organization of available libraries (Github repositories like awesome-java/groovy exist.. but they’re not great)
 - 
    
Better support for highlighting inefficient and duplicated bits of code.
- 
        
I.e. For loops having a suggestion to use Lambdas
 - 
        
Searches for logic that is often repeated, and suggestions for refactoring hotspots.
 
 - 
        
 - 
    
PMD and findbugs does this sometime. But it would be nice to encourage library creators (Commons or Guava) to create Findbugs/PMD rulesets.
 - 
    
A basic starting template for standard applications, REST Apps, or Web apps
- Should include testing, cucumber, the right plugins, etc
 
 - 
    
Lazy evaluation keyword in Groovy. (You can do that right now, but that relies on closures. In Scala, there is a lazy keyword.
 - 
    
Groovy: Lazy evaluation on collections (Built into the collections)
 - 
    
Groovy: Case Classes for Groovy (We’re close to it, but it’s not as concise)
 - 
    
Maven: Composable POMs
 - 
    
Scala: Better support amongst versions, and better support in Gradle to handle the Scala version to
 - 
    
Postgres/Hibernate: Support for dynamic data structure expansion.
- 
        
This is handy when you have an extra column that is of type of JSON or HStore)]
 - 
        
Think of a weak MongoDB-like ability for dynamic documents, but the explicitly define structure of a Postgres SQL database
 
 - 
        
 - 
    
Scala: Support for Scala only libraries that don’t involve bundling the Scala runtime. (These would be compiled into your project)
 - 
    
All libraries: More distributing the API interface separately over the implementation (This is necessary for avoiding transitive dependency conflicts.)