I prefer more reliable ways as this does not imply that non-android
projects do not contain such tasks. That is, I would rather catch the
`UnknownModelException` than check for such a task. This is a minor issue
though.


2013/8/26 alex.ruiz.05 [via Gradle] <
ml-node+s1045684n5711755...@n5.nabble.com>

> You can figure out it is an AndroidProject or not by querying the tasks.
> Android projects have at least one task that starts with "android".
>
>
> On Sun, Aug 25, 2013 at 12:22 PM, kelemen <[hidden 
> email]<http://user/SendEmail.jtp?type=node&node=5711755&i=0>
> > wrote:
>
>> A small request for change before release: This is nothing big but can
>> you add `org.gradle.tooling.BuildController.tryGetModel` instead of
>> `org.gradle.tooling.BuildController.getModel` where `tryGetModel` returns
>> null when the model is not found? This is because a model not being
>> available can be totally expected. For example, I can only determine that a
>> project is an Android project by querying `AndroidProject`.
>>
>>
>> 2013/8/23 Kelemen Attila <[hidden 
>> email]<http://user/SendEmail.jtp?type=node&node=5711754&i=0>
>> >
>>
>>> The reasons are listed as benefits. I would like to highlight that model
>>> queries cannot have an argument. Not having an argument has obvious
>>> limitations. Another very important reason: Currently, if I want to add a
>>> new model, it incurs a lot of overhead because I have to convience others
>>> (for example, you) that the new model is something worth to add. This - of
>>> course - helps with the quality of the model but slows down development. If
>>> I was able to add models dynamically, then there is no reason to worry too
>>> much about quality because even if I create a not so good model, I can just
>>> create a new, discard the old one and forget about it. This is currently
>>> not the case, if I screw up a model then we have to live with the mistake
>>> forever (even though review, assuming that the model is perfect is just
>>> unreasonable). In this case, you can even consider the IDE as an incubator
>>> of new models where the model can show its worth.
>>>
>>> Also, I find the comparison with private fields a little unfair. There
>>> isn't anything unspecified, undocument thing I want to access. That is, I
>>> just want to rely on API, you already have to keep compatible due to the
>>> build scripts out there. There is no strong coupling here. I admit that
>>> this changes the original meaning of the model but this shouldn't
>>> necessarily be bad. As for comparison: Gradle currently allows to download
>>> a plugin from an external Maven repository (like the Android plugin) which
>>> then can add a model builder. It does not allow to download this from the
>>> IDE. This feels as saying that the IDE is less trustworthy than an
>>> arbitrary Maven repository.
>>>
>>> If this feature does not get added, I will need an awkward workaround
>>> where I will have to solve problems you already solve (discovering jars,
>>> although it is easier for me to do). This is the workaround, I'm planning:
>>>
>>> 1. Serialize the instance of `ToolingModelBuilder` and save it to a
>>> temporary location.
>>> 2. Create a gradle script which adds a `ToolingModelBuilderRegistry`
>>> which will rely on the saved `ToolingModelBuilder`.
>>> 3. Adjust the build script to put some jars on its classpath.
>>> 4. Specify the script as an init script before querying the models
>>> through the new API.
>>> 5. Query the model provided by the serialized `ToolingModelBuilder`.
>>> 6. Delete the serialized instance of `ToolingModelBuilder`.
>>>
>>> As you can see, it is technically possible to solve the same thing
>>> through legal calls. This means, that what you consider "coupling" is
>>> already there, only it is awkward to do. If the new API will not directly
>>> allow me to do this now, then I will have to support the above way forever
>>> (to avoid regression for 1.8). That is, I will have to resort doing this
>>> because I (currently) don't agree with the academical reason, therefore I
>>> need at least a single example of what problem this can cause in the future
>>> (still, it can be measured agains the benefits). The gain in the IDE
>>> support just feels too much to be ignored for reasons I don't understand.
>>>
>>>
>>> 2013/8/23 Adam Murdoch [via Gradle] <[hidden 
>>> email]<http://user/SendEmail.jtp?type=node&node=5711754&i=1>
>>> >
>>>
>>>  Hi,
>>>>
>>>> Thanks for the offer, but I'm pretty reluctant to make this change. I
>>>> really don't want to couple the tools and the build model together. To me,
>>>> this is similar to, for example, using reflection to mess with the private
>>>> fields of an object rather than using its interface. Usually a bad idea,
>>>> particularly when either party can change at arbitrary points in time.
>>>>
>>>> So, let's step back. What's the actual problem you're trying to solve
>>>> here? That is, what would you use such a builder for? Let's see if there's
>>>> another way to solve this.
>>>>
>>>>
>>>> On 22/08/2013, at 6:39 AM, kelemen <[hidden 
>>>> email]<http://user/SendEmail.jtp?type=node&node=5711750&i=0>>
>>>> wrote:
>>>>
>>>> Hi Adam,
>>>>
>>>> It would be a very benefical to allow providing a (serializable)
>>>> implementation of `ToolingModelBuilder` through `BuildActionExecuter`
>>>> for
>>>> future evolution of the Tooling API. Adding it now would be a lot more
>>>> convenient than adding it after 1.8 was released (less backward
>>>> compatibility issue). If you allow me to do so, I will implement it
>>>> myself
>>>> and send a pull request (or a patch).
>>>>
>>>> Benefits of dynamically added `ToolingModelBuilder`
>>>> ---------------------------------------------------
>>>>
>>>> - Allows to develop models and release new models independently of
>>>> Gradle
>>>> release schedule. This simply allows creating a jar containing
>>>> ToolingModelBuilder implementations on which all IDE can rely on, so
>>>> anyone
>>>> can use them.
>>>> - It is possible to more easily effectively deprecate models by
>>>> releasing
>>>> another jar. Although such deprected models still need to be supported
>>>> but
>>>> new clients of the Tooling API does not have to know about the
>>>> deprecated
>>>> models (less conceptual overhead).
>>>> - You can specify arguments when requesting models. Currently with
>>>> ToolingModelBuilder you can only have a fixed set of models. For
>>>> example,
>>>> one might want to allow the users to resolve (and get the resolved
>>>> artifacts) a particular configuration by name. Or someone might not
>>>> want to
>>>> resolve the sources or javadoc (note that each boolean argument would
>>>> increase the required number of models exponentially).
>>>> - It is easier to prototype new models this way when developing IDE
>>>> integration.
>>>> - Unused ToolingModelBuilder instances do not cause needless overhead.
>>>> - The ToolingModelBuilder interface allows for implementations scaling
>>>> quadratically with the number of model builders. Adding
>>>> ToolingModelBuilder
>>>> dynamically, it would be relatively simple to design an API on the top
>>>> of it
>>>> which scales well. This new API can be released in later versions of
>>>> Gradle.
>>>>
>>>>
>>>> Disadvantages
>>>> -------------
>>>>
>>>> - Additional work to implement.
>>>> - Might need some additional maintainence cost.
>>>>
>>>>
>>>> I hope you also find this new addition to be useful.
>>>>
>>>> bye,
>>>> Attila Kelemen
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://gradle.1045684.n5.nabble.com/Proposal-for-retrieving-multiple-types-of-models-from-a-project-in-a-single-pass-using-the-Tooling-AI-tp5711516p5711744.html
>>>>
>>>> Sent from the gradle-dev mailing list archive at Nabble.com.
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe from this list, please visit:
>>>>
>>>>    http://xircles.codehaus.org/manage_email
>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Adam Murdoch
>>>> Gradle Co-founder
>>>> http://www.gradle.org
>>>> VP of Engineering, Gradleware Inc. - Gradle Training,
>>>> Support, Consulting
>>>> http://www.gradleware.com
>>>>
>>>> Join us at the Gradle eXchange 2013, Oct 28th in London, UK:
>>>> http://skillsmatter.com/event/java-jee/gradle-exchange-2013
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> ------------------------------
>>>>  If you reply to this email, your message will be added to the
>>>> discussion below:
>>>>
>>>> http://gradle.1045684.n5.nabble.com/Proposal-for-retrieving-multiple-types-of-models-from-a-project-in-a-single-pass-using-the-Tooling-AI-tp5711516p5711750.html
>>>>  To unsubscribe from Proposal for retrieving multiple types of models
>>>> from a project in a single pass, using the Tooling API, click here.
>>>> NAML<http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>>>
>>>
>>>
>>
>> ------------------------------
>> View this message in context: Re: Proposal for retrieving multiple types
>> of models from a project in a single pass, using the Tooling 
>> API<http://gradle.1045684.n5.nabble.com/Proposal-for-retrieving-multiple-types-of-models-from-a-project-in-a-single-pass-using-the-Tooling-AI-tp5711516p5711754.html>
>>  Sent from the gradle-dev mailing list 
>> archive<http://gradle.1045684.n5.nabble.com/gradle-dev-f1436218.html>at 
>> Nabble.com.
>>
>
>
>
> ------------------------------
>  If you reply to this email, your message will be added to the discussion
> below:
>
> http://gradle.1045684.n5.nabble.com/Proposal-for-retrieving-multiple-types-of-models-from-a-project-in-a-single-pass-using-the-Tooling-AI-tp5711516p5711755.html
>  To unsubscribe from Proposal for retrieving multiple types of models from
> a project in a single pass, using the Tooling API, click 
> here<http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5711516&code=YXR0aWxhLmtlbGVtZW44NUBnbWFpbC5jb218NTcxMTUxNnwtMTMxMjM2NTcwMA==>
> .
> NAML<http://gradle.1045684.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>




--
View this message in context: 
http://gradle.1045684.n5.nabble.com/Proposal-for-retrieving-multiple-types-of-models-from-a-project-in-a-single-pass-using-the-Tooling-AI-tp5711516p5711756.html
Sent from the gradle-dev mailing list archive at Nabble.com.

Reply via email to