Project U: CF Frameworks Explorer Released
May 6, 2007 · 46 Comments
On the first day of cfObjective() 2007 I released the top secret project called Project Unity. This project is easily described as a plugin for CFEclipse which displays an overview of any ColdFusion framework you happen to be using. It is highly configurable in that you can define your own framework if need be and add actions and labels to each of the nodes of a tree.
I shall be releasing more information over the coming days, but you can give it a try with your framework by updating cfeclipse and adding the CF Frameworks plugin from the extras directory.
Its in Alpha so dont complain too much!
Also, a new version of CFeclipse has been released, which should solve some of the errors that you guys have been having.
I shall be doing more release docs over the next few days when I get back from cfObjective()!
Tags: cfeclipse · cfObjective





46 responses so far ↓
1 Jeff Dugas // Sep 22, 2008 at 4:11 PM
The only workaround I have is to remove the DOCTYPE node. As soon as you do that and save the circuit file, the CF Frameworks Explorer refreshes itself and you can burrow down into that circuit's particular fuseactions.
Fantastic!. tx Mark!
2 Mark Drew // Sep 22, 2008 at 4:11 PM
On a side note, I am pretty sure that JDOM (the library I use for XML) ignores DTD's so I need to check what is happening.
3 Luis Majano // Sep 22, 2008 at 4:11 PM
I enjoy the Frameworks plugin more and more. I am finalizing the icons and actions for the ColdBox config file, but was wondering if there is a way to get the actual value of an xml element. Such as:
<MailServer>mymail.email.com</MailServer>
To get the XMLText. By using {attribute} you can get attributes, but is there a way to get the text?
Thanks!!
4 Mark Drew // Sep 22, 2008 at 4:11 PM
5 Luis Majano // Sep 22, 2008 at 4:11 PM
I will be finishing it up soon. Should I send it to you?
6 Mark Drew // Sep 22, 2008 at 4:11 PM
Let me know which node and what you want to do and I shall see if I can add it
MD
7 Ryan // Sep 22, 2008 at 4:11 PM
8 Peter Bell // Sep 22, 2008 at 4:11 PM
9 Rob Brooks-Bilson // Sep 22, 2008 at 4:11 PM
10 Mark Drew // Sep 22, 2008 at 4:11 PM
11 Thomas R?hl // Sep 22, 2008 at 4:11 PM
Does the plugin require a certain version of Eclipse or cfEclipse?
Is there any method in favor to submit bugs on the project?
Cheers, Thomas
12 Sammy Larbi // Sep 22, 2008 at 4:11 PM
13 Mark Drew // Sep 22, 2008 at 4:11 PM
14 Mark Drew // Sep 22, 2008 at 4:11 PM
15 Thomas R?hl // Sep 22, 2008 at 4:11 PM
And Mark, thanks for the info... I just want to say, that these requirements lock out all the users of FlexBuilder out there, since the standalone edition comes with Eclipse 3.1.2 initially. And I think, the latest build of cfEclipse does so as well.. after I updated to 1.3.1.4, it is having issues creating the editor pane. I think, I'll submit that on the trac site. :-/
However, I'm going to install a Eclipse now just for cfEclipse and the framework plugin.. :-)
Cheers, Thomas
16 Mark Drew // Sep 22, 2008 at 4:11 PM
there is a trac issue there. But after summer, I might not be supporting 3.1 at any rate (3.3 will be released)
17 Scott Stroz // Sep 22, 2008 at 4:11 PM
18 Ryan // Sep 22, 2008 at 4:11 PM
19 Chris H // Sep 22, 2008 at 4:11 PM
"Could Not Accept Changes
The currently displayed page contains invalid values"
error when i try to Configure. Then it just opens an empty Preferences window that won't let me do anything.
I'm running the latest eclipse and cfeclipse versions.
would love to use this great tool!
20 Chris H // Sep 22, 2008 at 4:11 PM
21 joel // Sep 22, 2008 at 4:11 PM
22 Mark Drew // Sep 22, 2008 at 4:11 PM
To give you a head start, you can look into <eclipse/plugins/org.cfeclipse.cfml.frameworks_1.0.2/config/
You will see three xml files in there:
framworks.xml - which defines which framworks it supports and the default folders it looks into for the xml config files. It also defines the names for each of the framwork's default files and which nodes are used to include files. The ignore tag defines which node it will skip (it will display the nodes below that though)
labels.xml - it defines the text and icon that is used for each node in the tree. the {something} token says which attribute from the node can be used
actions.xml - defines the right_click actions that appear when you click on a node. There is a lot more information I need to write about this since its a bit complicated. I shall be doing that tonight.
23 sal // Sep 22, 2008 at 4:11 PM
24 sal // Sep 22, 2008 at 4:11 PM
25 sal // Sep 22, 2008 at 4:11 PM
cheers!
26 Tom Chiverton // Sep 22, 2008 at 4:12 PM
I *guess* I need to fill in the 'template projects located in' section of the main cfeclipse prefs ? I *guess* I set it to this 'extras' directory ? Where would that be ?
27 Tom Chiverton // Sep 22, 2008 at 4:12 PM
Right.
You need to do tell Eclipse to 'find new features', not simply update.
28 Tom Chiverton // Sep 22, 2008 at 4:12 PM
java.lang.NullPointerException
at org.eclipse.swt.dnd.DropTarget.setTransfer(DropTarget.java:616)
at org.eclipse.jface.viewers.StructuredViewer.addDropSupport(StructuredViewer.java:548)
at org.cfeclipse.cfml.frameworks.views.FrameworksView.createPartControl(FrameworksView.java:278)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:332)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:197)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:566)
at org.eclipse.ui.internal.Perspective.showView(Perspective.java:1675)
at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:987)
at org.eclipse.ui.internal.WorkbenchPage.access$13(WorkbenchPage.java:968)
at org.eclipse.ui.internal.WorkbenchPage$13.run(WorkbenchPage.java:3514)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3511)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:3487)
at org.eclipse.ui.handlers.ShowViewHandler.openView(ShowViewHandler.java:148)
at org.eclipse.ui.handlers.ShowViewHandler.openOther(ShowViewHandler.java:104)
at org.eclipse.ui.handlers.ShowViewHandler.execute(ShowViewHandler.java:70)
at org.eclipse.ui.internal.ShowViewMenu$3.run(ShowViewMenu.java:114)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:539)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:488)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:400)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1085)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3180)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2856)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1930)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1894)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:422)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:95)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at org.eclipse.core.launcher.Main.main(Main.java:952)
29 Mark Drew // Sep 22, 2008 at 4:12 PM
I shall be working on this for the next few days so we can have a chat to make it work.
MD
30 Ali // Sep 22, 2008 at 4:12 PM
Just wondering what, if any, configuration is necessary to get this working
with my Fusebox projects.
I downloaded the update, but the explorer is empty and when I try configuring it,
I get a dialog box saying there was some error.
Then I tried going through the Eclipse menu Window > Preferences
and then clicking on CF Frameworks and I have no configurable options available
to me.
I would really like to check this out and get it working.
Thanks,
Ali
31 Tom Chiverton // Sep 22, 2008 at 4:12 PM
Drop me a skype when you've had some sleep.
.
.
.
You do sleep, right ?
:-)
32 Mark Drew // Sep 22, 2008 at 4:12 PM
(Info on the Stig http://en.wikipedia.org/wiki/The_Stig)
33 Ali // Sep 22, 2008 at 4:12 PM
I had the same problem as you did. How did you get it to work?
How do you set the files in teh Explorer View?
I can view my projects in my regular "Navigator" Tab. Do you just drage them
to the Frameworks Explorer?
When I do that, my Eclipse hangs, and then nothing....
Please advise,
Thanks,
34 Mark Drew // Sep 22, 2008 at 4:12 PM
http://www.cfeclipse.org/index.cfm?event=page&page=TV
I shall do another one tomorrow to explain more things about it.
35 Chris H // Sep 22, 2008 at 4:12 PM
36 Ali // Sep 22, 2008 at 4:12 PM
Muchas Gracias! Yeah I just had to click on the fusebox.xml
file and set it as the config file, so now when I double-click
to open it, it automagically shows it in the Frameworks explorer.
Kudos to Mark! This is wonderful Mark, thanks!
Excellent!
Beautiful!
37 Mark Drew // Sep 22, 2008 at 4:12 PM
38 Jamie Jackson // Sep 22, 2008 at 4:12 PM
I've got the same NPE bug in Linux. Ticket submitted:
http://trac.cfeclipse.org/cfeclipse/ticket/289
39 Mark Drew // Sep 22, 2008 at 4:12 PM
40 Daniel Lancelot // Sep 22, 2008 at 4:12 PM
Is there any way of getting it to "find" the circuit.xml.cfm files for shared circuits (those using a "/CF_Path/" as opposed to a relative path)?
Currently all my relative circuits are getting picked up fine, but I have nothing within the mapped circuits.
I have set the CFMapping on my project folder, (after reading this post: http://ray.camdenfamily.com/index.cfm/2007/5/6/Tip-for-CFEclipseCF-Frameworks-Explorer) - but this din't seem to make any difference...
41 Mark Drew // Sep 22, 2008 at 4:12 PM
You should expect and update very soon.
42 Daniel Lancelot // Sep 22, 2008 at 4:12 PM
43 Daniel Lancelot // Sep 22, 2008 at 4:12 PM
44 Jeff Dugas // Sep 22, 2008 at 4:13 PM
I'm still unable to use the Frameworks Explorer for Fusebox when the circuit files reference the circuit.dtd. However, at least one co-worker - using the same version of the Explorer (1.0.0), the same version of Eclipse (3.2.2), and the same source code - is using it with no troubles.
Go figure. Apparently it's 'just me' somehow; guess it's time to rebuild my environment!
Sorry to trouble,
Jeff D.
45 Janusz // Feb 13, 2009 at 10:23 AM
I wanted to try to use the CF Frameworks plugin, but it refuses to work. I have opened the window and get the No Project Selected, double clicking this brings up a NullPointerException. If i right click on it, i get the configure dialogue box.. if i select this, i get an error stating that the current display contains invalid values.... if i ok this then i get a blank window.
Having read previous posts, i then tried to right click on my config file for Mach-ii.xml to set it as a CF Frameworks configuration file.... the option of this doesnt even show up. Now, since my update, this used to at least appear.... but with all the same error as the above paragraph.
Im using Flex Builder 3, v3.0, with CFEclipse plugin on a Mac running OS X 10.5.
Hope someone can help, as my config files are very large!
46 janusz // Feb 13, 2009 at 10:48 AM
rg.jdom.IllegalDataException: The data "- NOTIFICATION " is not legal for a JDOM comment: Comment data cannot start with a hyphen..
at org.jdom.Comment.setText(Comment.java:120)
at org.jdom.Comment.<init>(Comment.java:86)
at org.jdom.DefaultJDOMFactory.comment(DefaultJDOMFactory.java:105)
at org.jdom.input.SAXHandler.comment(SAXHandler.java:839)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.comment(AbstractSAXParser.java:699)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanComment(XMLDocumentFragmentScannerImpl.java:776)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1730)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:453)
at org.jdom.input.SAXBuilder.build(SAXBuilder.java:891)
at org.cfeclipse.cfml.frameworks.parsers.GenericFrameworkParser.parse(GenericFrameworkParser.java:99)
at org.cfeclipse.cfml.frameworks.views.FrameworksContentProvider.initialize(FrameworksContentProvider.java:233)
at org.cfeclipse.cfml.frameworks.views.FrameworksContentProvider.getElements(FrameworksContentProvider.java:145)
at org.eclipse.jface.viewers.StructuredViewer.getRawChildren(StructuredViewer.java:937)
at org.eclipse.jface.viewers.ColumnViewer.getRawChildren(ColumnViewer.java:693)
at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1298)
at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:378)
at org.eclipse.jface.viewers.AbstractTreeViewer.getFilteredChildren(AbstractTreeViewer.java:615)
at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:581)
at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2500)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1829)
at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:704)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1804)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1760)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1746)
at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:1433)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1368)
at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:390)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1330)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1431)
at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:536)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1390)
at org.eclipse.jface.viewers.ContentViewer.setContentProvider(ContentViewer.java:229)
at org.eclipse.jface.viewers.StructuredViewer.setContentProvider(StructuredViewer.java:1583)
at org.eclipse.jface.viewers.AbstractTreeViewer.setContentProvider(AbstractTreeViewer.java:2244)
at org.eclipse.jface.viewers.TreeViewer.setContentProvider(TreeViewer.java:928)
at org.cfeclipse.cfml.frameworks.views.FrameworksView.editorActivated(FrameworksView.java:207)
at org.cfeclipse.cfml.frameworks.views.FrameworksView.createPartControl(FrameworksView.java:297)
at org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:370)
at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:227)
at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:592)
at org.eclipse.ui.internal.ViewReference.getView(ViewReference.java:194)
at org.eclipse.ui.internal.WorkbenchPage.findView(WorkbenchPage.java:1796)
at org.eclipse.ui.internal.dialogs.ViewLabelProvider.getForeground(ViewLabelProvider.java:112)
at org.eclipse.jface.viewers.WrappedViewerLabelProvider.getForeground(WrappedViewerLabelProvider.java:130)
at org.eclipse.jface.viewers.WrappedViewerLabelProvider.update(WrappedViewerLabelProvider.java:169)
at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:135)
at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:911)
at org.eclipse.jface.viewers.AbstractTreeViewer$UpdateItemSafeRunnable.run(AbstractTreeViewer.java:97)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.runtime.Platform.run(Platform.java:857)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:46)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:199)
at org.eclipse.jface.viewers.AbstractTreeViewer.doUpdateItem(AbstractTreeViewer.java:991)
at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:466)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)
at org.eclipse.core.runtime.Platform.run(Platform.java:857)
at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:46)
at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:199)
at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2026)
at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:806)
at org.eclipse.jface.viewers.AbstractTreeViewer$1.run(AbstractTreeViewer.java:781)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:67)
at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:755)
at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:627)
at org.eclipse.jface.viewers.AbstractTreeViewer.internalSetExpanded(AbstractTreeViewer.java:1933)
at org.eclipse.jface.viewers.AbstractTreeViewer.setExpandedElements(AbstractTreeViewer.java:2294)
at org.eclipse.ui.internal.dialogs.ShowViewDialog.restoreWidgetValues(ShowViewDialog.java:326)
at org.eclipse.ui.internal.dialogs.ShowViewDialog.createDialogArea(ShowViewDialog.java:158)
at org.eclipse.jface.dialogs.Dialog.createContents(Dialog.java:754)
at org.eclipse.jface.window.Window.create(Window.java:426)
at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1083)
at org.eclipse.jface.window.Window.open(Window.java:785)
at org.eclipse.ui.handlers.ShowViewHandler.openOther(ShowViewHandler.java:100)
at org.eclipse.ui.handlers.ShowViewHandler.execute(ShowViewHandler.java:77)
at com.adobe.flexbuilder.standalone.actions.FlexBuilderWorkbenchActionBuilder$8.run(FlexBuilderWorkbenchActionBuilder.java:1297)
at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:546)
at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490)
at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1495)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1519)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1504)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1295)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3350)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2950)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at com.adobe.flexbuilder.standalone.FlexBuilderApplication.start(FlexBuilderApplication.java:112)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
Leave a Comment