Illuminated Cloud is developed by Scott Wells, a 20+ year veteran software developer and architect and unabashed development tool snob. In 2010 I began working with the Force.com Platform-as-a-Service as a key component of a composite Software-as-a-Service architecture. While impressed with how Force.com effectively commoditizes a vast number of otherwise complex technical components, like many others I was disappointed with the lack of modern development tools for the platform, in particular for Apex and Visualforce development. Illuminated Cloud was born out of this productivity paradox.

As a long-time user of JetBrains IntelliJ IDEA for Java development, I started toying with the idea of a custom language plugin that would ultimately bring the same modern feature set and near-telepathic capabilities of IDEA's Java IDE to Apex and Visualforce developers. As Illuminated Cloud was being developed, I cataloged what I perceived to be the most critical features of the Java editor: completion, navigationformattingdocumentation, and validation. These along with Salesforce metadata Deployment and Retrieval operations became the initial feature set for Illuminated Cloud.

Since the release of Illuminated Cloud 1.0 I've steadily refined and enhanced Illuminated Cloud based on both my own experiences as a daily user of the tool and on input from the Illuminated Cloud user community via the public issue tracker, discussion groups, email threads, and in-person chats. Ever since starting on this project, though, I've yearned to move on to a second generation of IDE features for Salesforce development including refactoring capabilities, deep client-side code analysis and assistance via code inspections and intentions, time-saving smart code generation, and even more intelligent code completion capabilities. Illuminated Cloud 2 represents the first major step along that path, but by no means is it the last.

What's Next?

My "short list" of additional refactorings, code inspections and intentions, code generation features, etc., is perhaps ten or twenty printed pages in length! In my experience, Illuminated Cloud 2 has reached the point where enough of IntelliJ IDEA's Java editor behavior is present that I often reach for features that aren't yet implemented. As I do so, those features go immediately onto my backlog. The more frequently I look for something and find it missing, the higher its priority. In short, I continue toward my ultimate goal of narrowing the gap between the experience offered for Salesforce development by Illuminated Cloud and that offered for Java development by IntelliJ IDEA. As always, while I certainly have my own list of items I'd like to see, I also treasure input from other users who might have a different workflow and therefore prioritize other features or refinements.

When you combine the complexities of writing an IDE for a language with no published grammar or behavioral specification (and boy does it have some quirky behaviors!) with the complexities of refactorings and real-time static code analysis, bugs are inevitable. The good news is that I've tested these features against hundreds of thousands (perhaps millions now) of lines of Apex code and fixed the bugs uncovered by those projects. This has led to much more accurate and reliable reference injection and dynamic type inference implementations which are critical for features like refactoring and static code analysis. The reality, though, is that there is going to be source code that reveals bugs that I simply haven't yet encountered. My guess is that these will take the form of false positives and negatives reported by Illuminated Cloud 2's code inspections or unexpected refactoring results. I will be collating bug reports for these types of issues and using that information to minimize and hopefully eliminate them. If you do run into such a problem, the best way to help me resolve it is to provide a standalone reproduction of the problem via the public issue tracker.

For what it's worth, my short-short-short list includes:
  • Multiple occurrences support for Introduce refactorings.
  • Additional Introduce refactorings, in particular Introduce Constant, Introduce Field, and Introduce Parameter. Introduce Method is very high on my list but requires and additional level of code path analysis, so I'll likely knock out some quick ones first.
  • Related item handling for the Rename refactoring, e.g., rename an Apex unit test class with the same base name, rename accessor methods for renamed fields, rename method parameters with the same name as renamed fields, etc.
  • Change Method Signature refactoring. I use this all the time in Java, so it's high on my list.
  • Transform option for Safe Delete to leave initializer method invocation while removing declaration.
  • Duplicate declaration detection code inspection.
  • Refactoring support in Anonymous Apex. This is due to a plugin SDK behavior and the way that IC hosts the Anonymous Apex editor with no file backing, and I believe I have a lead on how to address it already.
  • Extend the Illegal Assignment inspection for method invocation arguments vs. parameter types and relational expressions.
  • Smart code completion. This was on my original short list for Illuminated Cloud 2 but WebStorm support supplanted it.
  • Unresolvable declaration inspections for Visualforce, Lightning, and XML.
  • Better Rename behavior for resource files referenced in $Page, $Resource, etc.