[jbosstools-dev] Question about org.jboss.tools.common.refactoring.MarkerResolutionUtils

Alexey Kazakov akazakov at exadel.com
Thu Jun 26 18:15:10 EDT 2014


On 06/26/2014 03:09 PM, Xavier Coulon wrote:
> Alexey,
>
> Thanks for your response !
> It's done: https://issues.jboss.org/browse/JBIDE-17708 + 
> https://github.com/jbosstools/jbosstools-base/pull/291
>
> Please, beware that since I have TP/build issues on my machine, I 
> could not run an 'mvn clean verify' before submitting the PR.
No problem, I should run maven build/tests anyway. And it will take some 
time because I have to run all components that depends on this code too 
(javaee, jst).




>
>
> Best regards,
> /Xavier
>
>
>
> On 26 Jun 2014, at 23:27, Alexey Kazakov <akazakov at exadel.com 
> <mailto:akazakov at exadel.com>> wrote:
>
>> Hi,
>>
>> Yes, it makes sense. Please go ahead and open a JIRA with your PR.
>>
>> On 06/26/2014 09:22 AM, Xavier Coulon wrote:
>>> Hello,
>>>
>>> I'm writing a JUnit test to verify that a quickfix for a JAX-RS 
>>> problem works fine, but my test fails because the change is not 
>>> applied during the call to Change#perform().
>>> When digging into the code, I found that my problem is in the 
>>> following method of 
>>> org.jboss.tools.common.refactoring.MarkerResolutionUtils:
>>>
>>>
>>> @SuppressWarnings("unchecked")
>>> *public* *static* <T *extends* IJavaElement> T 
>>> findWorkingCopy(ICompilationUnit compilationUnit, T element) 
>>> *throws* JavaModelException{
>>> *if*(element *instanceof* IAnnotation){
>>> IJavaElement parent = findWorkingCopy(compilationUnit, 
>>> element.getParent());
>>> *if*(parent *instanceof* IAnnotatable){
>>> *for*(IAnnotation a : ((IAnnotatable)parent).getAnnotations()){
>>> *if*(a.getElementName().equals(element.getElementName()))
>>> *return* (T)a;
>>> }
>>> }
>>> }*else* *if*(element *instanceof* ILocalVariable && 
>>> ((ILocalVariable) element).isParameter()){
>>> IJavaElement parent = findWorkingCopy(compilationUnit, 
>>> element.getParent());
>>> *if*(parent *instanceof* IMethod){
>>> *for*(ILocalVariable parameter : ((IMethod)parent).getParameters()){
>>> *if*(parameter.getElementName().equals(element.getElementName()) && 
>>> parameter.getTypeSignature().equals(((ILocalVariable)element).getTypeSignature()))
>>> *return* (T)parameter;
>>> }
>>> }
>>> }*else*{
>>> IJavaElement[] elements = compilationUnit.findElements(element);
>>> *if*(elements != *null*){
>>> *for*(IJavaElement e : elements){
>>> *if*(e.getClass().equals(element.getClass()))
>>> *return* (T)e;
>>> }
>>> }
>>> }
>>> *return**null*;
>>> }
>>>
>>>
>>>
>>> In the code above, the last if/else block checks if 
>>> e.getClass().equals(element.getClass()), which does not work in my 
>>> case because I have org.eclipse.jdt.internal.core.SourceTypevs 
>>> org.eclipse.jdt.internal.core.ResolvedSourceType. I wonder if we 
>>> should not replace this part with a comparison of a comparision of 
>>> getHandleIdentifier() of both elements, which would make more sense, 
>>> I believe.
>>> For example, in my unit tests, it would be: 
>>> =org.jboss.tools.ws.jaxrs.tests.sampleproject/src\/main\/java<org.jboss.tools.ws.jaxrs.sample.services{BAZ.java[BAZin 
>>> both cases ;-)
>>> WDYT ?
>>>
>>> If the change I suggest makes sense, I'll be more than happy to open 
>>> a JIRA and attach a PR to it ;-)
>>>
>>> Thanks.
>>>
>>> Best regards,
>>> /Xavier
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> jbosstools-dev mailing list
>>> jbosstools-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>>
>> _______________________________________________
>> jbosstools-dev mailing list
>> jbosstools-dev at lists.jboss.org <mailto:jbosstools-dev at lists.jboss.org>
>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jbosstools-dev/attachments/20140626/ec842051/attachment.html 


More information about the jbosstools-dev mailing list