[jbosstools-dev] Problem with CDI Builder creating new 'A' type

Xavier Coulon xcoulon at redhat.com
Wed Aug 1 05:46:41 EDT 2012


Well, at the end of the day, excluding the 'package-info.java' files turns out to be the easiest way. 
Checking for element.exists() does not work in all circumstances :-/

Best regards,
/Xavier



On Aug 1, 2012, at 10:05 AM, Xavier Coulon wrote:

> Denis, Viacheslav,
> 
> Thanks for your replies. I'm going to look at checking if the created type really exists - I think it works: element.exist() returned false for the class 'A', I'm doing more testing today. 
> Otherwise, I'll skip events related to any 'package-info.java' resource. 
> 
> Best regards,
> /Xavier
> 
> 
> 
> On Aug 1, 2012, at 2:42 AM, Denis Golovin wrote:
> 
>> Xavier,
>> 
>> Looked through the code and didn't find better way to handle annotation type resolution ether. 
>> I guess you can check compilation unit name and skip units with name "package-info.java".
>> 
>> Denis
>> 
>> On 07/31/2012 01:46 PM, Viacheslav Kabanovich wrote:
>>> Hello Xavier,
>>> 
>>> This class is temporary created in a working copy that is discarded in the same method in order to get IType as context for resolution of referenced types. For example, package-info.java may have this content
>>> 
>>> @Named
>>> package cdi.test.alternative.case1;
>>> import javax.inject.*;
>>> 
>>> Neither interface ICompilationUnit, nor IPackageDeclaration have method resolveType(String) which is needed to resolve 'Named' into 'javax.inject.Named'. I could not find a better solution than creating a temporary IType. It is never added to the actual Java model of the project, it exists only in a working copy that is discarded.
>>> 
>>> Java model listeners may get the event on creating this type, but they also should get the event on its discarding. 
>>> 
>>> Best regards,
>>> Slava
>>> 
>>> On 07/31/2012 06:34 AM, Xavier Coulon wrote:
>>>> 
>>>> Hello Daniel,
>>>> 
>>>> As I'm trying to fix https://issues.jboss.org/browse/JBIDE-12095, I found something a bit strange in the CDIBuilderDelegate when editing a 'package-info.java' file (just adding a space char):
>>>> At line 90, the CDIBuilderDelegate#build() method calls the PackageDelegate#setPackage() method below which creates a 'class A {}' as shown below.
>>>> 
>>>>  public void setPackage(IPackageDeclaration pkg, IRootDefinitionContext context) {
>>>>  qualifiedName = pkg.getElementName();
>>>>  IType contextType = null;
>>>>  ICompilationUnit u = null;
>>>>  if(pkg.getParent() instanceof ICompilationUnit) {
>>>>  try {
>>>>  u = ((ICompilationUnit)pkg.getParent()).getWorkingCopy(new NullProgressMonitor());
>>>>  contextType = u.createType("class A {}", null, false, new NullProgressMonitor());
>>>>  } catch (JavaModelException e) {
>>>>  
>>>>  }
>>>>  }
>>>>  super.setAnnotatable(pkg, contextType, context, 0);
>>>>  if (u != null) {
>>>>  try {
>>>>  u.discardWorkingCopy();
>>>>  } catch (JavaModelException e) {
>>>>  
>>>>  }
>>>>  }
>>>>  } 
>>>> 
>>>> The JAX-RS plugin catches an event for this type creation but fails later. I can add some tests to verify that the type really exist, but still, is this necessary (just asking, don't take is bad) ?
>>>> 
>>>> 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
>>> https://lists.jboss.org/mailman/listinfo/jbosstools-dev
>> 
> 

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


More information about the jbosstools-dev mailing list