Bug 351410 - Improving performance for simple cases

Refactor rename on methods with common names, e.g. getName() can take
very long. The rename is done mainly in two parts. A workspace search
for methods with matching signatures, and a check to find out which of
those methods are actually to be renamed.

A large portion of the computations is done in the latter part. I.e. to
determine the search-matching methods that are affected by the rename.
Specifically, the rename will look for cases such as:

interface I { void a() }
interface J { void a() }
class A implements I, J

Renaming I.a must also affect J.a due to A. Type J is considered a
married alien type, as A implements both I and J.

The check for married alien types can be very expensive, as in worst
case it involves a type hierarchy computation for each search match (for
common names, there can be thousands of matches).

This change improves simple cases, where its not necessary to
look for alien types. This is done by examining the hierarchy of the
method under rename, and checking whether any subtype has a super type
which is not in this hierarchy. If not, the expensive alien types
computation is omitted, since no alien types can exist.

With this change, we observe roughly 4x performance gain for common,
simple cases of renaming methods.

Change-Id: I5aea126f715e8b98ef7c9bb6123535b3d1b5a668
Signed-off-by: Simeon Andreev <simeon.danailov.andreev@gmail.com>
1 file changed
tree: f5022bbde33e1f6fa639fd49e90edcc50c7d13e0
  1. org.eclipse.jdt.astview/
  2. org.eclipse.jdt.astview.feature/
  3. org.eclipse.jdt.core.manipulation/
  4. org.eclipse.jdt.jeview/
  5. org.eclipse.jdt.jeview.feature/
  6. org.eclipse.jdt.junit/
  7. org.eclipse.jdt.junit.core/
  8. org.eclipse.jdt.junit.runtime/
  9. org.eclipse.jdt.junit4.runtime/
  10. org.eclipse.jdt.junit5.runtime/
  11. org.eclipse.jdt.text.tests/
  12. org.eclipse.jdt.ui/
  13. org.eclipse.jdt.ui.examples.javafamily/
  14. org.eclipse.jdt.ui.examples.projects/
  15. org.eclipse.jdt.ui.tests/
  16. org.eclipse.jdt.ui.tests.refactoring/
  17. org.eclipse.ltk.core.refactoring/
  18. org.eclipse.ltk.core.refactoring.tests/
  19. org.eclipse.ltk.ui.refactoring/
  20. org.eclipse.ltk.ui.refactoring.tests/
  21. tests-pom/
  22. .gitignore
  23. pom.xml
  24. README.md
README.md

Contributing to JDT UI - Java development tools UI

Thanks for your interest in this project.

Project description:

The JDT UI implements the user interface for the Java IDE. This includes views like Package Explorer and JUnit, the Java and properties files editors, Java search, and refactorings. Website: http://www.eclipse.org/jdt/ui/

How to contribute:

Contributions to JDT UI are most welcome. There are many ways to contribute, from entering high quality bug reports, to contributing code or documentation changes. For a complete guide, see the [How to Contribute] 1 page on the team wiki.

Developer resources:

Information regarding source code management, builds, coding standards, and more.

Contributor License Agreement:

Before your contribution can be accepted by the project, you need to create and electronically sign the Eclipse Foundation Contributor License Agreement (CLA).

Forum:

Public forum for Eclipse JDT users.

Search for bugs:

This project uses Bugzilla to track ongoing development and issues.

Create a new bug:

Be sure to search for existing bugs before you create another one. Remember that contributions are always welcome!

Contact:

Contact the project developers via the project's “dev” list.

License

Eclipse Public License (EPL) v1.0