Fix bug 488942: [extract method] Extract method fails to handle side
effect in loops

- Add re-entry analysis for nested loops in InputFlowAnalyzer.
  This works for all loop types (for, enhanced_for, do and while loops.)
- Add a test "A_test735" for the bug that is fixed.

Before only iterating the outermost loop was analyzed. Therefore it was
not discovered that variables changed in the extracted code inside a
nested loop could be read in the next iteration of the inner loop.

For variables declared outside the outermost loop this was saved by the
re-entry analysis of the outermost loop, as the changed variable is also
read in the re-entry of the outermost loop (in the initial iteration of
the nested loop).
Therefore the end result was OK, even though it did not pick up the read
of the variable on re-entry of the nested loop.

However for variables declared inside the outermost loop the variable
goes out of scope and a new instance is used in the re-entry of the
outermost loop. Therefore only a re-entry analysis of the nested loop
itself can discover that the changed variable is read.

Change-Id: I1152af0c52a6ac01e71a7d5e5a0aa079b4a777a6
Signed-off-by: Dan N. Christensen <dan@celticdanes.net>
4 files changed
tree: f62fe90e1995ae1020085b0fcb7289fb71c9dd81
  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. CONTRIBUTING
  24. LICENSE
  25. NOTICE
  26. pom.xml
  27. 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