Fork me on Github

Frequently Asked Questions

Not finding what you're looking for? Ask on the mailing list or contact us directly.

eddy is a plugin for the IntelliJ IDEA Java IDE (including Android Studio) that helps you write code faster. It can auto-correct broken Java to legal Java, correcting syntax as well as many common semantic errors. No matter whether you're new to Java and figuring out its syntax, or whether you're a seasoned Java programmer who wants to write shorthand, eddy is for you. Even considering IntelliJ's advanced inspection and correction features, you will save a lot of time. For more information look at the instructions page.

This question is a little much for the FAQ, but we will write blog posts that explain the inner workings in more detail.

In broad strokes: eddy uses structured AI to find out what you mean when you write incomplete or broken code. It knows a lot about Java and about code, and it uses that knowledge to compute a probabilistic model of what you meant to write given what you actually typed.

Specifically, eddy parses what you wrote using an ambiguous grammar, and then tries to find an interpretation that makes sense (type-checks, and matches known programming patterns). eddy controls the exponential complexity of this process by looking at code much like a human would: it first looks at the most likely possibilities and explores ways to make them work. Only if simple fixes fail does it explore more esoteric solutions.

Sometimes, eddy will not understand something that should be obvious. It's early days, and eddy will only parse statements inside a code block. It also does not understand all Java constructs. In particular, it does not understand statements involving an anonymous class declaration or lambda expression, a method ref, or switch/case statements (although it understands statements inside those fine).

The culprit can also be a class which is not defined in Java, which eddy doesn't fully understand. A statement using such a class may not be understood by eddy.

Or maybe, what you were writing is not quite legal, for instance, you may be trying to use an inaccessible field or method. eddy tries hard to only produce legal code, and it may remain silent such cases.

eddy isn't perfect, but it is set up to learn over time. If you think that eddy should understand you and it doesn't, please submit a suggestion using the suggest solution intention action. Your suggestions help to improve eddy faster.

Please tell us what the correct solution would have been. You can use the `suggest solution` intention action any time while using eddy, or visit the mailing list. If you think you have found a bug, you can also add an issue.

While eddy will learn from general usage, suggestions that point out specific problems are valuable to us and help tremendously in improving eddy faster.

eddy inserts its fixes using IntelliJ's formatting settings, so if you are seeing bad formatting it is likely that IntelliJ is incorrectly configured. The settings can be adjusted in IntelliJ via "Preferences / Code Style / Java".

Note that changes made to the settings only take effect after a restart.

In order to suggest solutions, eddy scans libraries and project files for classes. eddy may not fully understand classes defined in non-Java files interpreted by other IntelliJ plugins (for instance, the Scala plugin). Therefore, eddy may not have suggestions for code involving classes defined in languages other than Java.

In some situations, interactions between eddy and other plugins (Scala in particular) will use up too much memory and cause editor lag. If this happens regularly, please file a Github issue so that we can diagnose at fix the problem. Until then, you can avoid the issue by increasing IntelliJ's memory limit (for IntelliJ itself, not the build process). We recommend a heap limit of 2 GB.
When it is installed, eddy asks whether it can log information about how it is used to a database. This logging is completely optional, and includes what input eddy sees, what suggestions are generated, and which suggestions you pick as correct. Eddy logs this information for each fragment of code that it sees, usually one line or statement at a time. This information is anonymous, and we will never attempt to de-anonymize or reconstitute larger pieces of source code from code fragments. We will use this information solely to improve eddy. For details, see our privacy policy.