Puck is an architecture refatoring tool focusing on dependency breaking. It dynamically generates a dependency graph viewable in an interactive UML-like format or using our graph explorer. It currently target only java programs.

Weland is a language interpreted by Puck to express coupling constraints. You can specify for each element of your program by whom it is accessible. You can easily browse through the constraint violations using filters based on violations sources or targets.

Download Puck

You can have a look at how to use Puck here and some case studies can be found here.
Puck's source code is available here.