WWDC2004 Session 628
Transcript
Kind: captions Language: en we'd like to welcome wiley Hodges senior project of developer products at Apple good afternoon things I deal with that Apple are related to development and developer products and a very critical part of that is Java one of the most important and for me exciting java development products that's available today on Mac OS 10 is a cliff I'm very pleased to be able to welcome John Wiegand and Erich gamma to tell us more about eclipse on Mac OS 10 so with no further ado thank you thanks for that I'll go one more step in terms of introduction Erich gamma is the JDC lee lee to the java development tools but that's really a significant understatement of where Eric's involved he's part of the platform pmc has insights into how compare should work leads to compare team in fact search team the team is involved in doing the back work in addition a lot of the UI principles and ideas are greatly influenced by Eric so so then let me return it and this is tommy guns he is the flash from leap however he's fierce of influence it's kate to platform so he is an old java compiler guy and of course they're still very positive influences on the child development tooling so we can work together without stepping on each other toes so that's that's good news once the compiler guy always compiler guy it's hard to leave that behind give you a little bit of a flavor of our plan for this afternoon I'm going to probably just a brief overview of what eclipse is all about I'm confident that many of you have at least heard of eclipse so we won't go into great detail there we'll try this flavor and where the Java development tool fits in then we'll do a quick demo and then transition into what we've done new in 30 turns out we've got a little bit of a precursor of s will show some of the 30 stuff early but but that's the overall in time buy yourself some exercises well how many of you are using a quiz how many of you have written plugin for Eclipse see when you leave the room we have doubled this number okay how many of you have a product gonna quit well good still so I can't promise e double D's it in a session but it's a good thing to do so so what is the club the first question this is our famous quote we've used this repeatedly for the last three years universal tool platform and open expense lady for anything but nothing in particular this is an important theme it's we have good Java development tools but it's much more than that so let's look at the building blocks here we start with a runtime very small less than a megabyte knows about the notion of plugins and nothing else built on top of that is a window toolkit and then a UI library so this is our generic application platform knows nothing about tools even this is just the core base can be used for any application you choose so it's leading to two layers no swt is just vanilla widget and chase a high level application level functionality like if you connect to which is to your to your model behind that this kind of stuff in chasing so it's to explain it to two layers now has the notion of tools on top of that we have a project model that we add health facilities an update mechanism text infrastructure compare search to bug all the specific stuff that makes it a tool platform so all that's layered on top those are optional components they can actually get leveraged for someone who's built using it as a general-purpose application platform as well and what you see on celtic ide stack you see now we have basically language neutral layer you have searched debug compare text that its infrastructure is not language specific and what you will see now when you go to the next layer in JDT we built on top of those and as chawla specific search shallow specific compare shallow specific editing right that's the model so the j-e-t-s knowledge of Chawla to the platform that the core platform doesn't know about Charla which means for us jay-z developers we get no privileges on the platform right which is the hell you think because this gives us it's fair play and insurers good API right so we were kind of over the pioneers of the whole Asian extension story and what's really health experience to go through a period of frictions right we want based on the platform you know you cannot have it so that's how we will JT so we're really going to focus in the JDC area for the most part this afternoon will show the breath but JCC is going to be our primary focus on the platform through JDT perspective so we had three primary goals when we set out to do a cliff the first called the open platform we want to work on a wide range of platforms showing Mac Windows Linux Solaris the full gamut and besides working on this platforms we want to be able to leverage the facilities that those platforms provide so it looks like a Windows app on Windows and it looks like in is a mac app on the match next school is eric already alluded to we want to build good java development tools but that doesn't want to be our center our centers were a platform and we make it possible so you can build a see development environment java development web tooling whatever makes sense all this can result so the model is and we have some solutions nothing about different this different artifacts extensive platform with knowledge about the particular artifact are you flirting XML cluing you plug in each ad tooling to make the platform aware of these artifacts that's a model so then once you put these tools in place we want it to be such that you don't look at it as a user you've got this wide range of tools that have nothing to do with each other but rather you've got a seamless whole so this seamless integration is really important both in terms of the product you get the Eclipse based product initially but also any extensions to get added later it feels like all parts of a single all so our background you see it's not our first attempt to build an IDE if you look at the whole knowledge which you have in our team on different tools you see me a small dark we have television technology which likes for java TV c++ tool so some of these projects are more successful some of them less successful some of them even died but I think the key point here we really try to say eclipse is our last chance to get things right so we hope it succeeded partially so we think we've really leveraged our experience and the other thing that sets our community grows we've brought many more different areas of background to play over time as well so we're seeing more teams and our roots are broadening so what is the clips again look at it from a different perception extensible tools platform out of the box function we didn't really talk about this yet but we wanted eclipse when you get it you take that initial download it's something that's interesting and it's useful so the Java development tools was a good test case of the platform but it's also useful function so if you take that with the plug-in development vironment on top of it you can build plug into your own immediately so within minutes and one of the things we're going to show today is how easy that is to do so the trick here is there actually you want to get your Christmas presents that you haven't forgotten to put the batteries in there so it's not just good technology but it's being applied so we have a close foundations been established there's on the order 50 major organizations involved they're building real products based on a cliff that real feedback is very valuable and puts it's a serious product level use but not just product level you we really care about the open source community and the open source project is basically our lifeblood and then that's where we spend our our time listening and responding and working together and also to make open source even see where we want to do we ask first class integration of open source tools like and CBS j unit that you can really work in open source environment in a seamless and productive manner so what is JDT screenshot but i think the screenshot is not too interesting huh so what I want to do is I will go through some demo I must confess I don't daily code on the Mac so some of my keystrokes might slip and I claim my wife is guilty for that because she says having a mac right but she only borrowed it to me on Saturday morning when she goes shopping so I've really limited training experience so what I will show yes thank you so i will show how some code explorations and as we go i will show you some new stuff i have also show you some old stuff wow you can still profit from it first of all let me start with something I guess example one word about example hm let's get rid of this guy here the example is j hofstra which is a drawing framework which is based on hofstra which was initially built to oregon can tech and this is basically some sample code I wrote when I still talk about design patterns right who wants to know about that anymore but it's really good science them let's first start with some fish is really invisible but which i think is where we have a big advantage over over many other tools it's a feature I don't want to miss which I don't see in other platforms which is incremental compilation in the background so how compiler technology maybe Johnny can say something about it while I try to open something here one of the things that we've done from the beginning with our compiler is we use our compiler both to do the build engine but also for all of our tools are built on top of the same piece we get the same exact characteristics between the two so our recovery mechanisms etc all leverage the same pieces I feel like this is unfair we need something to make it a little more challenging no no I want to wait I like to search I want to show you what i would go look our goal was you change a massive body and below one second you should be able to run again okay so if you have to watch fast I think we're done now we need to can we run this up battery todd just to make it a little bit so well we have the progress you here let's just drag it that you can at least see your building watch quickly right so you won't have something more advanced you want to change a comment for instance so you see incremental building hi sophisticate Vanek wanted quick turnaround one thing which is also special we come from explorative environment sean even more than i do and no small talk which is a highly optimistic language which means what our compiler can do which I don't know if any other one which can do that it can generate code even when you have errors in your source right if I have one message in error for all the other mathema files code gets still generated which means I can execute curly there earth which is just great now if you have a large piece of soft you want to port so I want to run it without having kind of having done the Big Bang approach so that's just some in heritage from our exploration day no small talk which was just given debugging is also very important so let's do some debugging here and so have to run this thing don't be confused about the package name it's old code CH steps of this one shoulder off shore drive via via run it in debugger now and we debug it as a java application there you go I want to just make a little bit more interesting and add some data that's the most critical part of the demo since I can easily get lost on the disk it happens to me captain now Charlie filthy need to talk so then again notice we're using the native controls as we work through here this shows the native control integration we leverage those pieces ago and I'm I save you chump so here we go Francis's from the young times when you had loved the Sun so not only drawing two hotels animation so now I run an indie debugger and you know usually you use them use tool palettes to change colors except holy get boring so we can do better than that getattribute I think that's another one by one gets to color can you imagine what I'm up to go to the break point here we are in the debugger now so we look at what is in this dual color just get the expression and inspect it so that's something you will be off with a new religion I we work with these lightweight dialogues which means really we don't want to distract stuff so we often work which is code assist like that's lightweight dialogue that's what you see here right this is the inspector but it's really lightweight and you can still have the full functionality there are some color stuff here now we want to be mean let's continue running what we will do now a little I'll have to remove the break point I will be better so guess what i'm up to now I don't use the pellet to change the color i just changed code so I'm sort of restarting the program you're just changing analytes apple style huh correct and here's rare so now what I will do it I will save oops so what happened right I saved in the background the code compiled the change code cuz updated into the running vm and of course it could do that without so the next feet just to show you know structure is really important to us so i made it change the method that's awesome heritage from small soft bring small talk you could be fine grained history method level so i can still do this now so i want to go back to the previous stuff but I don't want to code it instead I want to use local history and that they replace with and then I get the local history but just off the single method so on the fly you know we parse out the structure things like that we replace ladies and you're happy again ok so just to reiterate they're all this is built on top of the language neutral structure right so this is Java static function that's layered on top so let's look a lil bit refactoring refactoring its course I think one of the most production productivity increasing ideas and tools these days and that i think the different stairways to heaven when you think about respecting so the first step is now we can rename an ass or a method and it sings get updated references that's the first step the next step is you can do kind of structural manipulations like extract the method then the third step to me is the really interesting refactorings like extract interface you have a type you extract an interface and you change all the code which could use this interface to research this new interface now this is based on more interesting algorithms like em we are using type constraints which have published oops law last year and then the fourth level is where it gets really interesting desperate start not only refactor but first of all you can also update derived resources like child ox comments or you can allow others to participate like an updated JSP or you can update derive stuff like variable name I change a class name i also want to update variable names that researches class main things like that so we are up here at level three on the move to level four so let me show you something some smell detection let's go ahead and bookmark here and that's a good one let's just do a reference to it should wear this election is used where is this guy used without this for factoring support people tend to live with programs that are wrong it's just not worth the effort of fixing them up but with this you just naturally keep your programs with better hygiene so I see this expression along North s collection contains so that's kind of some code smell I want to extract it as a method or just can do that too let's call the respecting many which is context-sensitive and I want to do extract method however what is interesting here is this little checkbox right when I extract its method we will go in and find others place in your code very use the same code to duplication and we will reflect it as well for you right this is kind of smell detection we not only do what you want we also help you detect all the smells in your code in this case duplication of office of this method so let's do that the disease that I didn't lie to you contains sugar and let's do the preview here then you see replace duplicate code fragments to go in and other stuff another place in your code in the opposite is as well you're contending that you can go in further with that so but that's kind of where it's your exacting it's going resetting a javadoc as i mentioned derived data refactoring let's maybe add some java daxing here leather have a parameter let's just add you didn't really draw much attention eric to the the context sensitivity let me just mention you went by that because we're used to it but what happens on the pop-up is the JDT is finding the refactor ease that are appropriate so instead of seeing the long list of all the possible refactorings you're seeing the ones that make sense in that context so again it's helping you do the work you need to do and behind this is a quite a machinery right there is always an abstract in texture you have to have to make these decisions so i want to show javadoc updating for instance yeah I've added a javadoc tag I just go in i renamed this parameter to figure who and if the child doc is not all getting updated since you all never has a representation of these comments in our AST so next thing is what about what I want to show you is coding assistance of course we do all kind of code assist stuff which it just expected a from an IDE doing you ash mess is good so when you do that you will import but you have gone a little bit beyond sir now we also offer what we call quick assist which helps you with tedious coding tasks for instance now I have to type the object i want to create i have to type it such as to control one and i can now assign the state into new local variable and of course the system will come in and infer which Titus's help me with the name of hash map is better so which time should have well okay that's the clipping book so i want to lose the collection all right a mess a map is good I don't want use the concrete as I used to map but you see we help you with editing the Sorvino of you know your program very well in fact we like we like codices that much that we have all extended it to also be part of our dialogue so for instance when you change when you have been to enter a class name you also be decoded this in dialogue and I guess it's just a homogeneous experience want to use to not type anymore you really wanna have it everywhere so dislike solve this indicator and of course you are not only do this for classes it's also really helpful when you do a regular expressions right who knows this index of regular expressions I don't but of course the code is this you can get the same so these are some of the ideas yet here um so coding huh so template is very interesting stuff for really boring a lightweight over an array with and with a collection things are linked together actually I can I go back Kenny even know what I chose this I have something cooler for you I want to hit rate over collection because then the system will has to be smart either either so what it is an object things like that right you don't have to type if you get stuff with links editing very important when you do test first development XP practices you often write code test first and a rocket test first you write some method which doesn't exist yet and of course you can also get support for creating this message but from unknowns references so and what you see here is a preview we always can show you the preview of what will generate for you that's also pretty neat technology because it requires that we can do what if analysis of an abstract syntax tree so click this there are some fun ones that I'd like to show you for instance some new ones which we have imagined you want to add a new constructor here and the constructor you now 3d we also have a depth argument so I sedative argument to the constructor but of course now I want to have to assign it to a field I have to declare the field all the stuff so you dissolve or you can just control warm and safe and parameter to a new field and this will give you the option to change the name the name is okay yeah and type is ok well maybe take a long right things like that so really helpful when it comes to adding new code and consistent with that one of our nicer quick fixes is what is a good example I looked up a loose collection a good one so if I add another parameter here no no no no at the call sign right I just see this message I change it here at the call time taken additional parameter the system can help me to the chest to also change the calling side is really do what I mean right exchange to call and quick assist quick fix will help me to fix up the code so i can say Nia I want actually changed the method to have this additional parameter as you see highlighted here exedy poof I think poof disturber to swing okay searching quickly what's new there is research in the background you have this new nice responders infrastructure as a possible search vector do I have a vector somewhere I have to look something which takes a little bit longer vector how here you go so back to let's the reference to search see that's when I sleep I sleep I didn't get it come on a references in the workspace and now you see I have the option to run in the background and then i can continue working Wow looks too fast keep it slow with that machine I returned on my ID and think back to add plenty of time to talk you have to look for a string no strings you from facility so i would like to show it i will concurrency story but i will do it in another another example to pass so buddy TV you can run in the background you can continue working and you can group your result in different presentations things like that what's also coordinates we have opened up search so we do a thorough search you can now have the option to plug in additional sources to be looked up so if you have for instance to JSP development you can hook into the channel search so say when you look for reference to java class you can also look in your chase piece and give us a result alright so this is kind of sanity of opening up to the different hand will not only to our architect so searching well call hierarchy something new we have the hood of sexually the drawing patrol all you all ok call hierarchy I want to show it like nice to show the call hierarchy is because this is something you wouldn't have done because i think in over option system call higher cases they were diverse thing to look at because it's oh so complicated but someone has written a nice call hierarchy plugin and in fact these are so good that we decided to take it so that's nice how open source stuff work okay now let's move to something which i think it's pretty fun and i will back around this we came for more I want naturally exploration how we explore code how we can navigate code we don't know yet so we conference for small from small talk and what we have offered here is now when you come from small he has typically hierarchical browsing alright so do I get some types here yeah right you do some hierarchical top-down browser that's cool but what we found what really helps also need a more exploratory on the Cenacle program you want to do it way more edit eccentric you want to really have just two editor open it's everything you want to be at your fingertips okay so let's go bien show you how we do that so our new look also helps us with that so we can really that's how I were hurt everything is the editor everything else is either collapsed here without you minimizing feature and then you look or I have fast use on the side and that's my folks is really in the code so must example ever I want to go to hear i havta yeah that's not fair so first of all know if I want to navigate inside to file of course I have it's quick navigation I can go to get type whatever I want if I want to also see the inherited code I can choose to do it twice and then I get the inherited methods as well if I want to understand how something over Asian I haven't in place tight hierarchy which shows me what I in heard it from how it is Method overridden of course you are folding folding the air is also for that because basically what you want is when you work edit eccentric you want to often hide child or comment so we can do that out of the box when you open the file we collect our documents that you can really focus on your coat so we have folding we have in place stuff i showed you in the debugger we do the same thing just in place this basically now when i type hear something I don't have to go to compare you to find out what I change which is sure we hear this change for oh well that's something i will show you later and in a change bar I can see what change and can retrieve my stuff if I want to I can revert it to what it was before so that's the same thing right you wanna make it every everything editor centrix you don't have to do lots of humping around to find what's available similarly we have these occurrences highlighting this mark occurrences feature here which basically behind the scenes we know the structure of your program so the idea is whenever you click somewhere we can tell you more information about what have come to click that for instance you click on parameter we show you where this parameter used our diversity result computed it gets highlighted immediately or similarly here is an exception versus exception thrown you just click at it and all the place where this exception is thrown is highlighted or you go on to return type you click on it and all the exit points of the methods are highlighted and of course we go on we will go on with that now you click on an interface and you will highlight all the methods implement this interface things like that you will see 3d point and click the other thing is linking so if you just want to see what something is right you have this link view below right i click somewhere and immediately see the Declaration of it and that's Lee again I don't have to do anything I can just by clicking I've all the context to do my stuff or is a click on a variable I see the Declaration I'm pretty sure all right this guy here yeah it shows you the Declaration say Majella doc if I'm more document or documentation oriented I will see the javadoc below as I click around interesting point to mention here this is Safari right so we have a native in this our riches story we natively integrated the platform which means on the Mac when you're on the max we integrate with safari or to WebKit so just if you're overwhelmed with all this function you actually don't need to remember everything that Eric's playing here the tips and tricks section goes through and enumerate both the nuclear billions of the other existing stuff so there's a lot of things at your fingertips ringing navigation at your fingertips now if you want to go quickly to another open editor it's just one keystroke away and i'll open editors channel draw stuff like that so each other's interaction codices like feel free to type this is used heavily so that's I think you're not for now well oh no I want to show you one thing and then i will stop how are we doing with the time okay i have to find some documentation that's kinda documentation of sure so we do a lot of validation as you type so we have added many options and completion know as more as the more validation that you type the better your code gets so we have rejected some unused code new in through your witty texts Charl doc problems so when you have a missing tag and have the wrong tack we will select that and the other thing we have added we try to help you as much as you can so why should we stopped checking with the code we can also help you checking the command again you see the wiggly line here so our spell checkers founded in this comment I have mistyped this control one and the same thing as quick fix kind of lunatic strong code it can also help you fix your comment so I change it back to content or edit to my dictionary so beyond that there's janitors and integration time for some slight break [Applause] it is kind of harsh to only let you demo that little amount of function because if you look at the amount of things that were done in Eclipse 30 there were on the order of if you look at the the pile of enhancements and bug fixes in the last year 10,000 line items were addressed so lots of things this gives you a flavor of the biggest one lots of stuff occurred so let's put JDT in place again it's a set of plugins built on top of the platform and what we're going to do now is look at plug-in architecture itself a little bit more closely so everything in Eclipse is a plug-in look at a plug-in as a set of contributions you look at it ranging from an HTML editor set of things the Java development tools it can be a simple contribution to be just a menu entry with an action for that menu entry so the full range of things can be contributed the plug into finds its implementation its prerequisites and it has this ability to define an extension point which is a named entity so it names a concept that can be contributed to so we've got a very simple story or plugins define extension points then other plugins find contributions for those extension points and then the platform connects them together so that is our extensibility model in a nutshell so one thing I'd like to make here is it was important other stations have plug-in architecture as well like you start knocking again plugging well it's really different eclipse is that we have thought about from the beginning how can we scale up if you have lots of plug-in and the extension extension point story is our mechanism how we can scale up to hundreds even thousands plugins and ideas we don't have to load everything since the node extension points what they do you can present them without having to load code that's really important characteristic if you compare our plugins story with the one from our system you want to give us a quick look at what PD you could do I love to do that ok well you're setting that up will switch over what will show now is just a quick overview will show the the steps that one goes through to build a plug-in will do the I Istanbul nothing special just the same workspace and when you get a clip ship you get also some simple tools to help you with the plug in writing that's pde plug and development environment so the only thing you have to know one plugin corresponds to one project in the IDE so here we start I created plugin pro check [Music] jaw literally DC image view so the wizard help you to create stuff in which you I want to create the plugin with of you there is some way that helps me to do that but it could generates very little code so as you'll see again this is the community helping ourselves because we're building a lot of plugins we need to build tools to make it easier for us to build plugins we're just kind of kept making this better and better so basically this extent extension point model is declarative which means we declare the information you need to sis needs to know about extension extension points in an XML file which is called a plug in XML and we provide you with ways to edit it in a convenient way for instance EVC the extension we define here in this case will define one extension which is the sample view and you see what extension has to do it will has a name it has an icon as the category life is needed because you want to be able to present it without having to load the code of the instruments that implements the view so here you see that's how we can present views and give the information in the plug in XML we can do that without loading code the word of the code come in there is a class attribute and this class attribute will be responsible to implement the actual behavior once the user has activated the contribution but not before so of course is linked let's look at this code so what I haven't told you what I want to build so this is true story so we were hacking away Kent Beck and I were have reaction today and he came in one of these small talk here's one of his small talk retro attacks no we want to find an image he said see in small talk I would have just written plug some code and would ever get in the view which shows in all the damages and of course a well the candidate eclipse as well and five minutes later we had it so I replay this experience now for you and I hope I don't wake and you crow I want to have a table with all the images that are used in equipped so it's all the standard images so that's basically two things you have to know there is a content provider this is the guy who defines what is the data you show interview there's the label provider and this is the guy that knows how to render your option your your data okay so currently if there's just the string 1 2 3 not very interesting so what do you want to do is you want to render here all the images so it's come here so you will recognize some of the stuff I've shown before you already please i want to collect all these images court i'm lazy I don't touch the stuff myself fine while I'm still alive I use a collection so then I will iterate over its rato the collection so again the flavor here is we've got the template generated the plug-in created the view and now Eric's just putting the contents in for dispute so you have a class the shared image class that has all these static fields in it you're going to collect all their icons clan I know it will cool bum so where did I screw up and over so actually I was like why did I worry everything was fine so so I iterate over the guy enjoyed over the array the temporal herbal I know there's a class shared images so i go to the class and I want to get it feels because all the images are loading fields there and get feel okay the array type well I'm too tired to type that so let you eclipse no set yet the fields that's right ok here we go and then you have to add it you have to add it to our list and what's the guy yeah sure the array element they want to do it so boring boring and you return the stuff we turn this to Ray ok so let's do some cleanup here and that's a bad name list that's basically feel right we may be fine it should be feel alright again we have some code smell here top duplication let's just extracted quickly what is it so let's just extract it quickly respect the method field so by putting this function right in your fingertips you're naturally inclined to clean up your career after and you will see you be many play code like plastics they're easy again it s is code there's a duplicate code fragments of course is your brief fix as well so okay now have to get the image that will just show you them object to string should do it and now this code is almost right right I want to pass in the name of the image and it should be should it should return it from me from this call but it's too specific is called it has a hard-coded parameter so let's fix that and two objects to string and we want to hear using other refactorings we want to introduce a parameter I want to make make this maximal general so I say here just introduce a parameter and the parameters Cal field name access code exists as the lamp tells me here but a very helpful field name okay so you see what's happened is here an additional parameter got added and to call the parameter got all the fixed up at the call side so i don't need the object parameter anymore so we do just the other refactoring change method signature and remove this time okay so i think we should be able to run now so let's do it in the butter just to be careful so we're on the workbench on data presley bugger from can't quite focus primary I did do it did I do a search so it should be up somewhere here we go so I've added with you it should show up now sample category sample you and I will get this nice table with all the images 0 hey this is beyond their program you program altogether okay but I can't let it go like that so we ran out we got to label but we didn't get the Danai like on himself the name right I have to put the name of the field here so so I compile safe till I close and reopen did you notice I didn't restart right and with jyoti Naidu plugging development big system hot code applies relievers and it can happen Oh depending on the quality of EVM I can work for a full day without them to restart three depends on the strength of you vm i know one vm which is really good that can almost a wise one day of coding so that gives you the flavor what's more to move on to the next part but thank you the flavor how easy it is to start in build a plug-in and and make things happen so there's more of the world than just plug in there's cases where you want to be able to attack additional function on on to a plug-in so logically there's the notion of a plugin but there's fragments where you can provide platform specific function you can provide translation or subsets of translations and there's cases where you need to be able to provide auxiliary function for other other means so logically we think of this as part of the plugin but just to show you there's more there so it's plugins plus fragments equal to logical unit so that's the basically what the runtime operates in plugins in fragments then we have a notion of features which is the other way this is the deployment unit so you deploy sets of plugins and fragments this group's them into logical chunks that make sense at the user level so as developers we build plugins that's too small of a unit for forgiving to our end users so we have this notion of feature for deployment purposes should i click into a feature to me Nick look let's keep moving on this we can come back at at the end if we get my next life I will demo it for you it kind of had a sec so that gives the flavor of how all our pieces come together and just to reiterate everything from the bottom to the top of this picture we have the runtime everything above that is constructed on a plugin so the kinds of tools that Eric was showing here we can leverage those for building f TT jphayes all these pieces and all the pieces above it so transitioning on to what's new in 30 now Eric leaked a lot of what's new entry already so stop being boring right thing too boring enough to hide it from you so so I didn't want to hold it so what will give you a flavor of what happened over the course of the last year we started off listening to what what issues are important to the community so back up a year 15 months and the kinds of comments we were hearing are things like this I'm lost in all these contributions you know i love this plugin for you guys have but I've got a lot of plugins and now there's more function I can't navigate my way through all of it so basis media here is and chosen via toting platform and what we see observe let's be self alum it's the tools are getting bigger and bigger and bigger I want to have thousands of plugins and they all want to show the self in the UI you get lost considered Business Process Model ER right since the surface modeling is also plugging the clips the business process model will be exposed to Java right that's kind of not what they want in fact it's confusing to them so you have to think about how to scale up the really large-scale application and that's the problem that you pointed out to us now the next one Eric's already shown us the fix for which is I don't want to be blocked when I'm doing operation hey B or C so I'm doing searches or I'm doing repository synchronization and I'm stuck waiting all the time this is in the past people were stuck waiting and they want to get that fixed what this can't be true it was a year ago this statement was being made so people wanted to see more it says if we like what we're seeing you're on a good path we want more we'd like to see more coolness I mean he it could steer the third class of feedback it is very interesting the community went off and started they took a clip they were using it as their ide and they said I really like some of the things I'm seeing here so the the way the UI presents itself this plug-in architecture this is something I can leverage in my own application so it's great as a tool but I'd actually like to leverage some of this code as as the basis for for my my development work so the first few things that happened is people took the plugins they threw some away they modified a bit of code and then they kind of set this cookbook around to other people say here's the kinds of things we needed to do to make this work and we went from that cookbook into a rich client platform so before we look at the response point here it this is just to give you the flavor there's lots of input and lots of different ideas so we structured these ideas into a set of themes that we could work on and the the kinds of themes that we flavored that we worked on as mature the platform so improve the user experience make things more responsive one big area enhance the job ID which actually has many facets to it Eric you want to talk about the range of things you had in mind on on the platform it's not just the things that Eric demoed it's JDT as a platform in its own right at this point right I will get rid later okay you'll come back to that and then the rich client piece so we'll walk through these and we'll we may or may not interspersed a few demos we're actually moving through the certainly to gamma yet so we'll get some fast down okay so I'll go very fast in the description here and then we get quick demo so the prom with large product now we have to help the user find their way into it so it can important how you welcome them to you to the product so we all think if the platform supports that it's even better than just letting each product invent how we want to welcome its users so that's why we come with the standard welcome frameworks others can plug in and we support different learning styles demo in two minutes chichi complex workflows complex products have complex workflows like the web service know me and no one likes to go to 12 pages of wizard that's kind of really moat full you won't have a more guided way but less multiple ways to do complex stuff and that's what you teach is for demos in one mystery and capabilities I've already shown me that so the demo yet seeing for that no I haven't shown that the problem is exactly the Business Process Model er they don't want to teach our so we want they wanted the shower gets hidden from them now that imagine the Business Process Model that learns Charla how can it is covered that resolves a Chow in eclipse the capabilities are our means to do that and okay the last one in this improve the user experience area is our work on responsiveness we've already demo'd this as well with the search facilities so basically we're stuck in this modal world and we got we got rid of the modality number one number two we did such a good job of getting rid of the modality the the users didn't realize things were happening in the background so then there was did I do it and then you found the build build build characteristics that we needed to do another iteration on how the user experience work to make sure the user was in control of what was happening they understood i was working i think in fact at least four iterations right so till we got this right that we really felt that use in control it was really it's one of the most challenging things you have so inept is crinkly and prickly welcome I matching i will not do now you just got up your screen for the first time so you get the Welcome experienced developer experience it's kind of you can count you to it now you can count be documentation to over you tutorials for the different learning styles pretty nice eye candy samples that's interesting examples get fetched from an update side installs and emily on your on your workspace so they can explore them or if it's just bored of the stuff you can just go to the work spanish right okay so that's the welcome the nice thing is it's extendable you can define and you have a mechanism to current view to this in the platform chichis so this is nan modal multi-step operation so let's do it tell the world application GG that's not the typical application consider making a building a web service something really complex multi-step so here's my cheat cheat cheat sheets are modeless interview they are they guide you through stuff and they have their active right some steps they provide you with actions that you have to fill in I when I create a hello world project I have to create my hello world project so hello world finish the nice thing is now the user think in control hello so it's folder so you see how to basically works right you have always access to documentation you have active links you know we're done if you want you can go back and revisit it to stuff things like that what's nice is it's very easy to build this teaches it's really mostly a configuration tasks on the coding test so basically describe an XML orders what the steps are define the actions that should be called out and a few have you teach it must less much less program is involved income of the wizard okay what was it capabilities capabilities next again it's your transition capabilities facilities are all facilities provided by the platform that plug-in developers can leverage and the users gain the advantages of so capability it's almost too simple in eclipse because the clips now has about 60 70 plugins by now a real rich product can go to one hundred five hundred thousand plugins which is south south and features so in eclipse the basics group the functionality into capabilities development team support right when I don't use CBS I don't want to see CBS in the UI at all so princess plugging development i will disable it now because when i chose to child element i don't wanna be bothered by plugging development so i disabled disabled it and the thing is now hiding function is easy how does it use the discover it once it's hidden so for fixing death we have a trigger point which in each visit for instance penetrating using the plugin protea is a trigger point i still see it it's an intentional fill the bath but when i say next the system will remind me hey this is actually a capability unit you haven't seen yet do you want me to enable it when you say yes then all the contributions will show up in the UI okay so that's basics how it works at ideas reuse overload of many toolbar in a featured feature oriented way back to the presentation so enhance the JDT we've went through for the most part so I'm gonna go through this pretty quickly and you can talk as fast as you want and I'm going to keep flicking know guys who solve it I have some sháá families that's another thing one system shower you notice when you do develop today yes other artifacts which which refer to each other when you do strops that a lot when you have class names in X in this truck description files we need it will develop over a new JSP so we have thought they have really have to support that so we open up we allow others to participate in our stuff and see I heard that much I'm talking around life looks okay still so we have to handle jsps and other stuff and reach your API you want to make change here reach a platform if you want too many put you on a right tool that manipulates our source we have extended it now we have added abstract syntax tree API which not only allow you to analyze java code but also to modify it if an AC rewriting a peon we make our function our own function open that you can extend it quick assist quick fix you can compute to death by extension points and what's very important and that you see our design style we start pioneering new stuff in che dici and over time you push it down into the lair it is language into a layer so others can also be cool alright so the linking stuff the external link editing is was pushed down one layer below that other tools like the sea development tools that you also have any clips 10 leverages as well good refactoring support just the same theme participations enhanced raditi you have seen that life which reusable yes hinges we didn't talk about this one yet um the the work for j2se 1.5 has been ongoing throughout 30 development cycle we decided somewhere in the spring time frame it didn't make sense to try to release that with 30 but the works in progress you can download it we've codenamed the effort cheetah and it's going to be we're going to be working on it um well from when we started early this year through through the summer and fall the primary effort so far has been in the compiler and extending the compiler region but it turns out there's lots of tooling opportunity but ronique ago the one week ago most of us folks I'm compiler that's a sense of shape co everybody with eager to do new stuff so I guess by midnight tonight if you go to the update side you get a known your core compiler plugin without you i plug in and with this you can already browse kovash users want to fly features and i also checked the jdk coverage and we are now at ninety-seven percent so it's tremendous progress but the nice thing is we leverage our plugging story to not risk the main three old stream for now but now offers eoe we will immediately merge the stream and work on on the 15 support so we've done this demo already so move on to the rich rich client is a wide range of a comments from the community on this one so the first is I've got all these plugins in Eclipse more than I need so i'd like to feel to get rid of some of them the second although you've given me too much some of these are not i beez ide specific so it's kind of talked about optional plugins already so you get the flavor of that and the third is just the request I'd really like to be able to build my application on top of the clips so what did we do I'm just going to give you a little bit of a philosophy statement here and then we'll run a brief demo first we remember we're a tools platform we started off tool centric we didn't want to lose that so that's quite important however some of our decisions or ide centric so we wanted to remove that predisposition and move that to a separate layer so we'll have a generic work bench with a separate layer that has the ID specific characteristics in then an implementation detail we also knew about projects well project Phil make sense that's the wrong data model for a rich client application so we needed to break that linkage and then provide optional components so that's what we set out to do the simple version given we have no time anyway as we just took the UI plugin carved it in half so we took it it was ID specific we made it a generic workbench so generic component then we layered on top of that the idea specific stuff so it was my name is Jay your names on that okay so basically the show is now how you can little stock eclipse to run really simple stuff but still having all eclipse plugin infrastructure in your in your hands so i will run this famous HP 35hp 35 is the famous calculator and you're going to carry a computer museum it can even calculate a 9 enter 9 plus great so what you see here that's an eclipse application but you see there is no project management there's no build its really post opted to vanilla application right so you have the choice you can basically read little socket you almost nothing and the nice thing about our rich prime placement stories everything is optional you want to have health sure install the plugin you want to get some resources support install the resources plugins they can grow and there is a spectrum of functionality can get from eclipse but the key point is you always get the component model the plugin model with your application which is a think a really good thing to have so the last thing I not should run now we getting ready advance so what I want to show you is we have a new runtime we have built the ransom in 30 on top of a standard component model osgi and the idea was for 301 a half dynamic plugin which means plugins which can dynamically comment go and I will show you that so first let's look at the plugins which you currently have okay we have 15 plugins now installed ohg i guess is called a bundle and i will now go in and install another one and then see what happens in d1 so i need to file one so one of the characteristics who got when we moved to OS g is the ability to dynamically add plugins and technically we're able to remove plugins from the system so what Eric's doing now is he's going in pointing to an area in the file system saying there's a plug in here let's install it please so he can type to pass directly bound lady 16 now we start it and you have to watch over here so basically I have done a plug-in which extends to calculate with a new operator so I start 16 books okay dynamically the plugin gets loaded will be all this low plugins dynamically but we now have mechanisms to also update the presentation the UI of your plotting dynamically and John lets me I even calculate with it once well yes you're right x 800 okay he said stop me we're good go back to the slides so a reminder Clips 30 available today turns out the final bites went up on Friday and they're available for everyone to put to use