[windup-dev] Windup API for Eclipse Plugin Suggesitons

Ondrej Zizka ozizka at redhat.com
Wed Jun 18 09:30:36 EDT 2014


Copied to WINDUP-91


On 18.6.2014 01:16, Ondrej Zizka wrote:
> Just few notes, inline.
>
> On 16.6.2014 16:07, Ian Tewksbury wrote:
>> All,
>>
>> Pete asked me to send out some of the ideas I have had about what the 
>> Eclipse plugin would like to see from the Windup core project as far 
>> as API goes.
>>
>> *ProgressMonitor*
>>
>> I would suggest basing this off the Eclipse IProgressMonitor API. I 
>> do not think it would make sense to actually use the Eclipse API 
>> because then Windup would be dependent on Eclipse. But if Windup had 
>> a similar interface I could use it to convert form a Windup 
>> ProgressMonitor to an Eclipse IProgressMonitor and report status back 
>> to the user. For Windup's long running actions this is very important.
> By nature, the engine core can't tell what the progress is, other than 
> number of processed vs. remaining rules.
> The rules might provide some metadata about how long they expect to run.
> But they don't know until the previous rules are done.
> So I guess this will be a bit of guesstimate - perhaps based on some 
> simple value based on "typical" duration, given by rules as metadata.
>
>>
>> *WinupdEngine*
>>
>> I think it is important a single instance of the Windup Engine is 
>> reusable and can be run multiple times on the same project or on 
>> different projects. But if for whatever reason it is only one time 
>> use only that needs to be well documented in the API. Currently with 
>> legacy windup I only create one copy of the Engine
>>
>> WindupEngine#setSettings(WindupEnvironment env) - set the windup options
>>
>> WindupEngine#process(File parentProject, ProgressMonitor monitor) - 
>> runs windup on a parent folder and generates all the metadata
> Looks like a subset of input. So this would fill one app dir to input 
> and run, up to, excluding, the report phase.
>> WindupEngine#generateReport(File parentProject, ProgressMonitor 
>> monitor) - generates a windup report based on all the metadata that 
>> is created by the #process(File parentFolder). This could either 
>> error out if the parentFolder has not yet been processed or could 
>> automatically process it
> This might need change in current runner, to resume from the REPORTING 
> phase.
>
>> WindupEngine#getRuleMatches(File file) - Should return a list of 
>> RuleMatch objects, one for every rule match on a given file that can 
>> then be used to access any needed information about that rule match 
>> determined from all of the generated metadata
> That would probably be a matter of a query to the graph, in the ideal 
> case.
>
>>
>> *RuleMatch*
>> *
>> *
>> This should be the class that is used to give API users all the 
>> information that was determined about a given resource. I would 
>> suggest most of this information if not all of it be lazily loaded 
>> and not pre populated. I do not know what your plan is for the 
>> storage of the windup model you will build on a given project. I hope 
>> there is some plan to not just keep it all in memory all the time and 
>> there will be some sort of file backend. An application like Eclipse 
>> is already a memory hog, to have to store the possibly infinite size 
>> of the windup model for all the projects in the workspace in memory 
>> all the time could get way out of proportion quickly. My suggestion 
>> would be this model would get saved to disk and then classes like the 
>> RuleMatch could query the model which would in turn query the disk 
>> for information. At the very least if the model is not saved to disk, 
>> then at least text and description from rules should only be loaded 
>> from disk when requested. So when loading a custom rule you have to 
>> load the matcher from disk as you process, but no need to load the 
>> description or other information until someone actually requests it, 
>> and even then that information should not be kept in memory by windup 
>> when requested, it should be returned and forgotten. I could go on an 
>> on on this subject, and it maybe a topic for another email or 
>> discussion at some point, but wanted to lay down some of my 
>> suggestions as it relates to this API.
>>
>> I would also assume that the report generator for Winup would be 
>> using this same API to generate the report. I see the Windup Report 
>> generator and the Eclipse plugin as siblings, both using the same API 
>> to display the same information in different ways.
>>
>> RuleMatch#getTitle() - a short description title of the match
>>
>> RuleMatch#getLongDescription() - a more verbose description of the 
>> match. this could possible contain some level of markup/simple html 
>> for basic formatting
>>
>> RuleMatch#getAdditionalReadingLinks() - returns list of links to 
>> externally extensible information relevant to the match
>>
>> RuleMatch#getLocation() - returns a location object that will contain 
>> the line number and character start and end locations on that line of 
>> the match. If the match if for the entire file there should be some 
>> way of describing that as well.
>>
>> RuleMatch#getCategory() - I am guessing rules will be provided in 
>> sets, JEE, WebSphere, Wildfly, or something that groups rules 
>> together in logical sets, this would be nice for reporting
>>
>> RuleMatch#getSeverity() - I would suggest a three level system, info, 
>> warning, error.
>>
>> RuleMatch#getFix() - Should return a block of text that can replace 
>> the matched block of text as a quick fix for the match. If you want 
>> to get really fancy these fixes should be able to match on parts of 
>> the match and inject them into the quick fix block. EX: if replacing 
>> one method call with another and there are parameters being passed 
>> the fix should be able to have some way of referencing those 
>> parameters so it can use them in its fix. This would all have to be 
>> done on the Windup side and likely all programmaticly by giving the 
>> rule writers access to the source they matched on so they can parse 
>> it for use in their fix code
> This should become part of the graph model. Perhaps not directly in a 
> FramedVertex. Could need some DTO to be prepared for this purpose.
>
> Ondra
>>
>> ----------------------
>>
>> That is all I can think of for now. I hope this helps describe the 
>> kind of things Eclipse will be looking for in terms of API.
>>
>> Blue Skies,
>> ~Ian
>>
>>
>> _______________________________________________
>> windup-dev mailing list
>> windup-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/windup-dev
>
>
>
> _______________________________________________
> windup-dev mailing list
> windup-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/windup-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/windup-dev/attachments/20140618/29e87d09/attachment.html 


More information about the windup-dev mailing list