#1648 F4 - Fantom IDE for Eclipse 1.0 Released

andrey Wed 21 Sep 2011

Hi folks,

Xored released Fantom IDE for Eclipse (F4). Please download it here: http://www.xored.com/f4 and happy coding!

Kind Regards, Xored

DanielFath Wed 21 Sep 2011

Awesome :D any new important features (i.e. is the fandoc new-line working properly).

rfeldman Wed 21 Sep 2011

Congrats on the launch!

How cool is it that Fantom has two IDEs competing already? ;)

jessevdam Thu 22 Sep 2011

Yeh :) jippie, thanks a lot for the great work. Will download it and try it.

ttmrichter Fri 23 Sep 2011

Is there any way to make F4 an add-on to an existing Eclipse installation? All I see are whole-program downloads.

ivan Fri 23 Sep 2011

yes, F4 can be installed into Eclipse 3.6 or Eclipse 3.7 from http://dl.xored.com/f4/1.0/repository/

go4 Sat 24 Sep 2011

How to import the existing fantom src. I don't create project at existing location. Thanks.

DanielFath Sat 24 Sep 2011

@go4. Well in that case create a new project and copy the files manually.

I'd like to ask the kind guys that work on F4 to use util::PathEnv or fanr::FanrEnv to make a common place for all pods compiled with F4. I'm asking this because whenever I change my interpreter (which changes often along with Fantom) I need to copy my old pods into the new fantom directories. This isn't too big of a deal for me but will definitely turn away new-commers that want to update their F4.

Other than that and documentation, I have no big complaints. I really dig your new icon style guys.

ivan Sun 25 Sep 2011

@go4, Does creating project at existing location fail for you? I've just verified that it I can, for instance, create a project compiler with sources from Fantom distribution basically in few clicks:

Compiler project

@Daniel, I completely agree, that would be really helpful and I've tracked your request here - http://jira4.xored.com/browse/IDE-102. And thanks for noticing icons - I'll cheer up our designer tomorrow :)

Oh, and by the way new F4 feature requests and bug reports now can be posted to support.xored.com

go4 Mon 26 Sep 2011

I can open the compiler. But my code:

java.lang.reflect.InvocationTargetException
  at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:421)
  at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:1029)
  at org.eclipse.dltk.ui.wizards.NewElementWizard.performFinish(NewElementWizard.java:130)
  at org.eclipse.dltk.ui.wizards.ProjectWizard.performFinish(ProjectWizard.java:67)
  at org.eclipse.jface.wizard.WizardDialog.finishPressed(WizardDialog.java:827)
  at org.eclipse.jface.wizard.WizardDialog.buttonPressed(WizardDialog.java:432)
  at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:624)
  at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:240)
  at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
  at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
  at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
  at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
  at org.eclipse.jface.window.Window.runEventLoop(Window.java:825)
  at org.eclipse.jface.window.Window.open(Window.java:801)
  at org.eclipse.ui.internal.actions.NewWizardShortcutAction.run(NewWizardShortcutAction.java:135)
  at org.eclipse.jface.action.Action.runWithEvent(Action.java:498)
  at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584)
  at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501)
  at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411)
  at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
  at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
  at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4165)
  at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3754)
  at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
  at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
  at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
  at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
  at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
  at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
  at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
  at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
  at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
  at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
  at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
  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.equinox.launcher.Main.invokeFramework(Main.java:622)
  at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
  at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Caused by: sys::NullErr: Coerce to non-null
  at fan.sys.NullErr.make(NullErr.java:25)
  at fan.sys.NullErr.makeCoerce(NullErr.java:38)
  at fan.f4core.FantomProject$makeFromProject$0.call(FantomProject.fan:73)
  at fan.sys.Func$Indirect2.call(Func.java:173)
  at fan.sys.List.reduce(List.java:743)
  at fan.f4core.FantomProject.makeFromProject$(FantomProject.fan:73)
  at fan.f4core.FantomProject.makeFromProject(FantomProject.fan:29)
  at fan.f4core.FantomProjectManager.addProject(FantomProjectManager.fan:141)
  at fan.f4core.FantomProjectManager.doGet(FantomProjectManager.fan:173)
  at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  at java.lang.reflect.Method.invoke(Method.java:597)
  at fan.sys.Method.invoke(Method.java:558)
  at fan.sys.Method$MethodFunc.callOn(Method.java:230)
  at fan.sys.Method.callOn(Method.java:139)
  at fan.f4core.FantomProjectManager.receive(FantomProjectManager.fan:51)
  at fan.concurrent.Actor._dispatch(Actor.java:225)
  at fan.concurrent.Actor._work(Actor.java:196)
  at fan.concurrent.ThreadPool$Worker.run(ThreadPool.java:255)

ivan Tue 27 Sep 2011

go4,

Looking at the stack trace it looks like that build.fan contents of your project cannot be parsed (more precisely - F4 cannot understand the depends field). Could you post your build.fan here?

go4 Tue 27 Sep 2011

I think I caught it.

depends = [ "sys 1.0", "other 1.0", ]

I have a comma at the last of list literal.

Thank you, ivan

ivan Tue 27 Sep 2011

Great! I have created an issue for displaying more user-friendly message in such case

Jens Sat 8 Oct 2011

This is my list for the most important features for code editing in my view. F4 seems to have almost all of them, only two more is on my which list: Quick Type Hierarchy and Rename.

It looks very good, almost everything there and only version 1.0!

Source generation:

  • MAYBE NEEDED: "using" organisation This seems to be less a problem in Fantom than in Java, .
  • DONE Content Assist

Navigation:

  • DONE Open Type
  • DONE Open Declaration
  • DONE Quick Outline
  • WISH: Quick Type Hierarchy, to jump quickly to sub- and supertypes.

Refactorings:

  • WISH: Rename. Its in the refactorings menu but does not seem to be working?

Other (minor things):

  • WISH: Show Tooltip Description (F2). Exists, but doesn't appear to be working.
  • WISH: Select enclosing element, Select next element. I find those very nice in Java.

yliu Thu 13 Oct 2011

A "Run as.. Fantom .pod" that could find the most recently built pod depending on the current interpreter would be convenient. It wasn't obvious right off the bat where the pod was being compiled.

ivan Fri 14 Oct 2011

Jens,

I've tracked your wishes in our jira:

I am not sure what do you mean about "show tooltip descrption" - currently we always show API tooltips when we can find sources (though we need to switch to fandoc API, it is tracked as IDE-35). Another disadvantage is that we don't support cross-references in docs as Java does. Or did you mean something else?

yliu,

Currently launching mechanism we use is pretty simple – right-clicking on editor and secting run as -> fantom class in editor triggers the following actions:

  • define current class at cursor
  • if class has main slot, or extends util::AbstractMain, try to find existing launch configuration. If not found create new one.
  • launch class (basically just by executing fan pod::class)

The compilation targets to <interpreter dir>/lib/fan by default, if not overridden by setting outDir in build.fan explicitly. Thus, setting outDir to some non-default location most likely will "break" launching – either pod will not be found, or older version of pod will be used.

The shift to custom environment and smarter management of compiled pods is one of the most important things in my opinion, pods from workspace should belong to workspace and not deploy into fan/lib/fan automatically.

Jens Fri 14 Oct 2011

Ivan,

About Show Tooltip Description: This actually works fine. The problem was Ubuntu's white-on-black colour theme, I got black text on black background.

Another very useful, but not essential feature that's high on my prio list is Call hierarchy. Which I just now discovered is already in place!

DONE: Call hierarchy

Brilliant work!

The debugger seemed a little more experimental. But it was impressive that you could step from Fantom code to Java code and back again without a problem.

qualidafial Sat 15 Oct 2011

Regarding the debugger, I found myself wishing I could skip the redirection boilerplate of the Func class, such that when I step into a function call, it goes straight to the function body and not the Func.call method.

ivan Sun 16 Oct 2011

I've created IDE-147 Improve user experience during debugging for further work.

Also built-in Java step filtering might slightly improve redirection situation, though not remember exactly whether it will affect this particular case with Func.call:

  1. Go to Window -> Preferences -> Java -> Debug -> Step Filtering
  2. Check Use Step Filters and Filter synthetic methods (requires VM support)
  3. Optionally add filter like fan.sys.*

yliu Mon 17 Oct 2011

Ivan,

A-Ha, I apologize, I didn't understand how the run as.. Fantom Class worked and assumed it would just run as a script. Also my project was not running because my external files were in the wrong location. (doh)

I'm so happy I can develop in eclipse now...

Many many thanks. bow/applaud

ivan Tue 18 Oct 2011

Great, glad to hear! Looks like we definitely need to work on documentation, at least in format of FAQ.

Login or Signup to reply.