Authors:
FraG
Apache

Code Navigator

Vendor: Frank Gerberding

Email: N/A

Website: N/A

SourceCode: link

Description:

Understanding other people's code or your own code in complex systems is a challenging problem in software development. This plugin supports developers in learning the dependencies and couplings in object oriented systems. Three major plugin-functions can be used:
  • class cloud diagram
  • graphical navigation between dependent classes
  • creation of UML diagrams
The class cloud diagram should be used as a first step when trying to understand an object oriented system. It shows all project classes in a single diagram as a cloud, very similar to tag clouds known from web-applications. Some of the most important classes can such be found by using the class cloud to be further investigated by using the graphical navigator or the source code. Graphical navigation can be used to find aCnd understand all dependencies (using classes, used classes, extending classes and extended classes of some subject class). As soon as the developer has understood which classes interact in which way, UML diagrams should be created that condense this knowledge. Though it is really helpful to have at least some UML diagrams, many software systems are not documented well or the existing diagrams are totally outdated. This plugin helps to create static class diagrams that always can be kept in sync with the current state of a system. The new functions can be accessed by a new menu item in the Analyze menu of the main menu bar (Analyze Class Cloud) and two new menu items in the project view and editor popup menus (Show in Graphical Navigator and Add to UML Diagram).
Downloads: 14124
Rating:
Participated in rating: 24
Version Since Build Until Build File/URL Size (Kb) Date Dependency
1.26. 75.7590. 75.7999. Download 3858.4. 2008-12-18 18:40:27 .
1.26_8. 80.8858. . Download 3880.61. 2008-12-18 18:28:08 .
1.25_8. 80.8858. . Download 3880.37. 2008-12-11 23:00:32 .
1.25. 75.7590. 75.7999. Download 3858.56. 2008-12-11 22:47:00 .
1.24_8. 80.8858. . Download 3179.88. 2008-10-24 13:34:31 .
1.24. 75.7590. 75.7999. Download 3147.02. 2008-10-24 13:26:46 .
1.23_8. 80.8858. . Download 3177.58. 2008-10-14 23:30:43 .
1.23. 75.7590. . Download 3143.95. 2008-10-14 23:28:11 .
1.22_8. 80.8858. . Download 3176.55. 2008-10-05 18:14:01 .
1.22. 75.7590. . Download 3142.64. 2008-10-05 17:58:56 .
1.21. 75.7590. . Download 961.58. 2008-10-01 12:57:39 .
1.20. 75.7590. . Download 875.69. 2008-09-29 23:14:35 .
1.16_8. 80.8792. . Download 579.69. 2008-09-23 03:12:53 .
1.16. 75.7590. . Download 603.13. 2008-09-23 03:10:36 .
1.15_8. 80.8792. . Download 576.98. 2008-09-15 23:54:13 .
1.15. 75.7590. . Download 575.61. 2008-09-15 15:44:49 .
1.14. 75.7590. . Download 553.07. 2008-09-12 13:00:40 .
1.13. 75.7590. . Download 524.25. 2008-09-11 02:32:53 .
1.12. 75.7590. . Download 456.83. 2008-09-09 02:35:19 .
1.11. 75.7590. . Download 205.44. 2008-09-08 13:57:05 .
1.10. 75.7590. . Download 204.4. 2008-09-07 21:45:05 .
1.04. 75.7590. . Download 159.01. 2008-08-31 20:06:15 .
1.03. 75.7590. . Download 123.61. 2008-08-25 10:15:49 .
1.02. 75.7590. . Download 115.76. 2008-08-24 18:31:39 .
1.01. 75.7590. . Download 115.65. 2008-08-24 15:04:52 .
1.0. 75.7590. . Download 114.93. 2008-08-24 00:53:36 .
. .
Code Navigator
Code Navigator
Code Navigator

Recent change notes:

Version 1.26(_8):
  • fixed: Path2D.Float is not used anymore, so Mac OS X users should be happy, again.
Version 1.25(_8):
  • fixed: minor bug fixes.
  • added: many NotNull- and Nullable-checks to further improve stability.
  • added: Thumbnail generation for diagrams and graphs
  • added: Source code, generated javadoc and UML class diagrams
Version 1.24(_8):
  • added: search scope can be chosen for class cloud analysis.
  • added: UML diagrams can now be saved as graphml-files (to be opened and layouted with tools like yed, see www.yworks.com).
  • changed: recompiled all classes with target 1.5, so plugin should be usable for Mac OS X users, too.
Version 1.23(_8):
  • added: undo in diagram creation step editor
Version 1.22(_8):
  • changed: class cloud and graphical navigator graphs are saved with same writer as used for UML diagrams so always a good image quality is achieved
  • added: class cloud diagrams, graphical navigator graphs and UML diagrams can now be saved as SVG files. These vector graphics files can be opened by tools like Inkscape (see www.inkscape.org)
Version 1.21:
  • changed: if diagrams are saved to image files (JPG, PNG, GIF), the images will have a resolution that matches the diagrams size in world coordinates and thus are always readable
  • added: dialog to manually edit diagram creation steps for UML diagrams
Version 1.20:
  • added: class cloud diagram that shows all classes of complete project in a single diagram to find starting points for graphical navigations in order to understand dependencies. Works similar to tag clouds, but for classes.
  • added: class cloud tool window will be opened on demand after a class cloud is computed. If a user selects "Analyze Class Cloud" from the main analyze-menu, all dependencies between all classes will be analyzed and a new tool window will be opened.
  • added: navigation from class in class cloud to graphical navigator
  • added: tool tips in class cloud show fully qualified class name
  • added: navigation from class in class cloud to source code (class source will be shown in editor)
  • added: text input field in class cloud can be used to highlight macthing classes in class cloud
  • added: added reset view button to class cloud toolbar
  • changed: added new settings for class cloud and rearranged settings dialog
  • changed: no new layout will be computed automatically when removing classes from UML diagrams
Version 1.17:
  • changed: UML diagrams will now be updated for rename class/package and move class/package refactorings and for corresponding undo operations of rename and move refactorings
Version 1.16:
  • fixed: some minor bugs
  • changed: suggested diagram name for new UML diagrams is now based on selected classes
Version 1.15:
  • fixed: in some cases on slow machines, the graphical navigator did not repaint node labels at the end of an animation
  • fixed: graphical navigator did not always repaint properly on first opening tool window
  • added: new action "jump to graphical navigator" jumps directly to chosen class, shortcut is "ctrl alt shift G"
  • added: graphical navigator draws direct cyclic dependencies between classes in red. Can be disabled in settings dialog.
  • added: visibility of field and method compartments can be changed via node popup menu in UML diagrams.
Version 1.14:
  • fixed: saved diagrams could only be loaded explicitely, if at least one diagram existed
  • added: UML diagram node popup menu items for connecting nodes with more control
  • added: UML diagram edge popup menu items for removing multiple edges at once
  • changed: reorganized UML diagram node popup menu
  • added: if a package is added to a UML diagram, all contained classes are added instead
  • changed: if an openend diagram already exists, the user will be asked whether to replace, skip or rename the diagram instead of always renaming it
  • fixed: rename button in UML diagram tool window toolbar throwed exception, if no diagram existed
  • fixed: "add to new diagram" menu item throwed exception, if IDEA does not use JDK 6 (for example on Macs)
  • added: "add to new diagram" menu item and "show in graphical navigator" menu item are now also accessible from editor tab popup menu
Version 1.13:
  • changed: persistence of settings and diagrams now uses PersistentStateComponent instead of JDOMExternalizable
  • added: added access to settings dialog from graphical navigator and UML diagram tool windows
  • added: one or all diagrams can now be explicitely saved to diagram creation command sequence files as XML
  • added: diagrams can now be explicitely loaded from diagram creation command sequence files
  • added: class in current editor is shown in graphical navigator, if tool window is opened for the first time instead of showing an empty graphical navigator window
  • changed: classes in UML diagrams now show self references for fields
Version 1.12:
  • changed: icon handling refactored
  • added: Help Dialogs in Graphical Navigator tool window and UML Diagrams tool window
Version 1.11:
  • changed: multiple selected classes in project view can be added to UML diagrams with a single action
  • fixed: default colors for classes, interfaces, abstract classes and enums fixed
Version 1.10:
  • added: printing and print preview of graphical navigator
  • added: UML diagram generator
Version 1.04:
  • fixed: graph was not repainted when stepping back or forward in navigation history with animations turned off
  • changed: settings moved from project to application
  • changed: refactoring of action handling
  • added: export of current graph as image (PNG, GIF, JPEG)
Version 1.03:
  • added: buttons to zoom in, zoom out, fit contents
  • added: hand cursor on nodes and edges indicates possible clicks
  • added: tooltips on nodes show fully qualified class names
  • fixed: graph is immediately updated after class visibility (non-project classes or test classes) changes
Version 1.02:
  • fixed: non-project classes no longer show other non-project classes as used classes
Version 1.01:
  • added: setting "show non-project classes"
  • added: setting "show test classes"
  • fixed: classes that contained inner class, that use the subject class where added as using classes

Comments:

FraG
Rated: noRate
2010-01-26 03:27:55
Unfortunately I found not enough time to maintain the plugin.
Since it's open source, everyone is welcome to fix bugs or add new features.
.
Anonymous
Rated:
2010-01-25 17:07:16
I just can't work without it!

It needs to be maintained, or given to the community
.
dragisak
Rated:
2009-12-09 02:27:09
This is probably one of the best plugins for Idea. Sadly, it doesn't seem that it's maintained any more.
.
Anonymous
Rated: noRate
2009-06-24 10:16:50
no more updates after contest?
.
Roar
Rated:
2009-06-16 00:27:09
thank you very much!
.
Anonymous
Rated:
2009-03-04 09:28:33
very good plugin
.
Anonymous
Rated:
2009-03-04 09:21:43
can not launch idea if Code Navigator plugin is checked enable. and will pup up a alert window with following message, then shotdown idea:

Plugin code navigator failed to initialize and will disabled:
Arguments 0 for @NotNull parameter of de/frag/umlplugin/setting/Settings.parseColor must not be null
Please restart IntelliJ IDEA.



Idea version: 9742
Code Navigator version: 1.26_8


any solution for this ? thanks a lot !
.
reggie
Rated: noRate
2009-02-19 05:47:22
I got an exception in IDEA and the popup said blame Code Navigator:

java.lang.NullPointerException
at de.frag.umlplugin.actions.FitContentAction.update(FitContentAction.java:39)
at com.intellij.openapi.actionSystem.AnAction.beforeActionPerformedUpdate(AnAction.java:210)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.processAction(IdeKeyEventDispatcher.java:171)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.d(IdeKeyEventDispatcher.java:166)
at com.intellij.openapi.keymap.impl.IdeKeyEventDispatcher.dispatchKeyEvent(IdeKeyEventDispatcher.java:170)
at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:211)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:217)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:176)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
2009-02-18 18:40:42,203 [28790066] ERROR - llij.ide.plugins.PluginManager - IntelliJ IDEA 8.1 Build #9732
2009-02-18 18:40:42,204 [28790067] ERROR - llij.ide.plugins.PluginManager - JDK: 1.5.0_16
2009-02-18 18:40:42,204 [28790067] ERROR - llij.ide.plugins.PluginManager - VM: Java HotSpot(TM) Client VM
2009-02-18 18:40:42,204 [28790067] ERROR - llij.ide.plugins.PluginManager - Vendor: Apple Inc.
2009-02-18 18:40:42,204 [28790067] ERROR - llij.ide.plugins.PluginManager - OS: Mac OS X
2009-02-18 18:40:42,204 [28790067] ERROR - llij.ide.plugins.PluginManager - Last Action: GotoClass
.
Anonymous
Rated:
2009-02-13 15:34:57
It's great and so usefull!
.
Anonymous
Rated:
2009-02-10 00:32:22
Great plugin. I have a suggestion though: diagrams would be more informative if associations and aggregations were labeled in some way. E.g. the name of the property could be used if the relationship is an aggregation.
.
palob
Rated:
2009-02-09 14:52:28
This is great plugin! I am currently analysing unknown project and it helps me a lot.

One feature I miss is possibility to add a Note that can be attached to a class. That would help me to put gained knowledge into diagram or event to create the documentation :-)
.
Anonymous
Rated:
2009-02-06 19:07:30
Would it be possible to (yfiles) write wmf to import graph into ppt, word? Is the source of the actual release available anywhere?
.
Anonymous
Rated:
2009-02-06 18:55:17
The tool I looked for plenty of years. Wonderful.

Nice enhancement would be: Show the classes inside of a box representing the Idea Module the class comes from.
.
Boomah
Rated: noRate
2009-02-05 11:22:52
Hi. This looks good but whenever I expand the graphical navigator or uml diagram the window comes out half the way, my CPU shoots through the roof and idea hangs for 10 seconds and then it works fine. This is on a small project using sun update 10 on ubuntu.
.
AlexLin
Rated: noRate
2009-01-14 05:50:05
When some classes are referenced by some jsp, JspClass will be added into UML Diagram but it is not able to be removed.

There are some buttons with odd name in Print Options and Print Preview.
.
Anonymous
Rated:
2009-01-06 11:29:13
great work, Frank!
.
AlexLin
Rated: noRate
2008-12-16 08:09:41
Now it is not compatible with Max OS X because it use "java/awt/geom/Path2D$Float" which is in JDK 1.6.
.
Anonymous
Rated: noRate
2008-12-04 00:48:42
Has anyone had issues in which showing the Graphical Navigator ONLY shows a class Foo, even if Foo uses Bar.

Every class in my project just comes up in the window by itself when I try to use this plugin (w/ 8.0).

Also, if I attempt to Analyze Class Cloud, I get an error stating "Selected scope does not contain any classes."

Any tips?

Thanks!
.
Anonymous
Rated: noRate
2008-10-29 11:59:12
The class cloud analysis may need a lot of memory in large projects. If You get an error message like "There's not enough memory to perform the requested operation..", You should increase the maximum heap size for IDEA (see idea.bat on windows).
.
Anonymous
Rated:
2008-10-29 01:44:40
Jn try to make class could it runs with:

There's not enough memory to perform the requested operation.
.
FraG
Rated: noRate
2008-10-24 13:05:56
I am really stupid: I will just use "-target 1.5" to recompile all classes for JDK 5 based Mac OS X Idea installations.
.
FraG
Rated: noRate
2008-10-23 12:11:26
I would recompile the plugin using JDK 5 but I found no way how to do it!
How do I compile a plugin that needs IDEA 7 using JDK 5 without using a MAC? On Windows IDEA 7 does not run under JDK 5.
.
Anonymous
Rated:
2008-10-23 05:47:46
Very slick.

Can you build it against JDK 5.

Intellij 7.0.4 doesn't run reliably on 6 and your plugin won't run if Intellij's running under JDK 5 (Unsupported class version error), since it seems to have been built on JDK 6.

thx

.
Anonymous
Rated:
2008-10-16 01:37:25
.
FraG
Rated: noRate
2008-10-15 01:47:36
Since I didn't find a way to listen to class selection in the project view, I was not able to implement Your requested feature to automatically update the graphical navigator each time a new class is selected in the project tree.
.
Anonymous
Rated:
2008-10-14 23:18:24
This plugin is simply great. Keep up the good work man.
.
Anonymous
Rated:
2008-10-08 11:40:15
Can you make an option that updates the Graphical Navigator as soon as I choose a new class in my project tree?
.
Anonymous
Rated:
2008-09-13 15:10:45
update failed for ActionGroup: de.frag.umlplugin.uml.actions.AddToNewDiagramAction@b6fb1b[New Diagram]: com.intellij.psi.PsiDirectory.getClasses()[Lcom/intellij/psi/PsiClass;
java.lang.NoSuchMethodError: com.intellij.psi.PsiDirectory.getClasses()[Lcom/intellij/psi/PsiClass;
at de.frag.umlplugin.ClassUnderCursorProvider.getPsiClass(ClassUnderCursorProvider.java:43)
at de.frag.umlplugin.uml.actions.AbstractAddToDiagramAction.update(AbstractAddToDiagramAction.java:49)
at com.intellij.openapi.actionSystem.impl.Utils.a(Utils.java:29)
at com.intellij.openapi.actionSystem.impl.Utils.a(Utils.java:56)
at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:67)
at com.intellij.openapi.actionSystem.impl.Utils.fillMenu(Utils.java:64)
at com.intellij.openapi.actionSystem.impl.ActionPopupMenuImpl$MyMenu.show(ActionPopupMenuImpl.java:39)
at com.intellij.ide.projectView.impl.AbstractProjectViewPane$2.invokePopup(AbstractProjectViewPane.java:1)
at com.intellij.ui.PopupHandler.mouseReleased(PopupHandler.java:54)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
at java.awt.Component.processMouseEvent(Component.java:6041)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at com.intellij.util.ui.Tree.processMouseEvent(Tree.java:76)
at com.intellij.ide.dnd.aware.DnDAwareTree.processMouseEvent(DnDAwareTree.java:35)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at com.intellij.ide.IdeEventQueue.c(IdeEventQueue.java:123)
at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:100)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:220)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)



java.lang.NoSuchMethodError: com.intellij.psi.PsiDirectory.getClasses()[Lcom/intellij/psi/PsiClass;
at de.frag.umlplugin.ClassUnderCursorProvider.getPsiClass(ClassUnderCursorProvider.java:43)
at de.frag.umlplugin.uml.actions.AbstractAddToDiagramAction.update(AbstractAddToDiagramAction.java:49)
at com.intellij.openapi.actionSystem.impl.Utils.a(Utils.java:29)
at com.intellij.openapi.actionSystem.impl.Utils.expandActionGroup(Utils.java:43)
at com.intellij.openapi.actionSystem.impl.Utils.fillMenu(Utils.java:64)
at com.intellij.openapi.actionSystem.impl.ActionMenu.f(ActionMenu.java:60)
at com.intellij.openapi.actionSystem.impl.ActionMenu.access$400(ActionMenu.java:69)
at com.intellij.openapi.actionSystem.impl.ActionMenu$MenuListenerImpl.menuSelected(ActionMenu.java:1)
at javax.swing.JMenu.fireMenuSelected(JMenu.java:1028)
at javax.swing.JMenu$MenuChangeListener.stateChanged(JMenu.java:1107)
at javax.swing.DefaultButtonModel.fireStateChanged(DefaultButtonModel.java:333)
at javax.swing.DefaultButtonModel.setSelected(DefaultButtonModel.java:215)
at javax.swing.JMenu.setSelected(JMenu.java:294)
at javax.swing.JMenu.menuSelectionChanged(JMenu.java:1175)
at com.intellij.openapi.actionSystem.impl.ActionMenu.menuSelectionChanged(ActionMenu.java:52)
at javax.swing.MenuSelectionManager.setSelectedPath(MenuSelectionManager.java:101)
at javax.swing.plaf.basic.BasicMenuUI$Handler.mouseEntered(BasicMenuUI.java:496)
at java.awt.Component.processMouseEvent(Component.java:6050)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
at java.awt.Component.processEvent(Component.java:5806)
at java.awt.Container.processEvent(Container.java:2058)
at java.awt.Component.dispatchEventImpl(Component.java:4413)
at java.awt.Container.dispatchEventImpl(Container.java:2116)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
at java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:4111)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3968)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
at java.awt.Container.dispatchEventImpl(Container.java:2102)
at java.awt.Window.dispatchEventImpl(Window.java:2440)
at java.awt.Component.dispatchEvent(Component.java:4243)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
at com.intellij.ide.IdeEventQueue.c(IdeEventQueue.java:123)
at com.intellij.ide.IdeEventQueue.b(IdeEventQueue.java:100)
at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:220)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)



.
merlin@ctco.lv
Rated: noRate
2008-09-11 19:05:21
Good work :) Do you have any plan for code analysis? For example: you could draw in red (as bad practice) classes with the cycle dependencies
.
constv
Rated:
2008-09-11 18:50:05
Also, it would be great to be able to select a whole package in the Project or packages view, right-click, and perform an operation on the package or packages, For example, create a UML class diagram that would include all the classes in the package. It seems that right now, the only way is to explicitly highlight the classes under the package and add them to the UML diagram.
.
constv
Rated:
2008-09-11 18:44:19
Great plug-in. Hope to see it updated to work with Diana (IDEA v. 8.x) soon.
.
FraG
Rated: noRate
2008-09-11 02:37:10
merlin@ctco.lv: thanks - as you can see in the change notes, I implemented one of your suggested features.
.
merlin@ctco.lv
Rated: noRate
2008-09-10 11:58:40
Another option. :) When you open the window - Graphical Navigator and no any class has been added to this window instead of showing blank window you could open it with the current class which is already open in java code editor.
.
merlin@ctco.lv
Rated:
2008-09-10 11:53:33
It's really nice plug-ig. I like it. May I suggest add some additional feature? :) When you in a window - Graphical Navigation it would be good to have possibility quickly navigate to class (for example using short cut: Ctrl + N, select class and open it in the window Graphical Navigation).
.
Anonymous
Rated:
2008-09-08 14:02:25
.
Anonymous
Rated:
2008-08-31 21:01:45
keep up the good work
.
Anonymous
Rated:
2008-08-25 02:52:39
.
Anonymous
Rated:
2008-08-25 02:51:56
.