# HG changeset patch # User ffjre@netbeans.org # Date 1344964074 0 # Node ID 89f814a402ebe9e30d071fbf9bf64ce241b4ba89 # Parent a7126bfc918b6f3c15d502a02a6c61f0b455b264 # Parent 4dbc678db09774e5f75908967358edd557c20c22 Merge of http://hg.netbeans.org/web-main/ diff --git a/.hgmail-web-main b/.hgmail-web-main --- a/.hgmail-web-main +++ b/.hgmail-web-main @@ -1,3 +1,4 @@ [usersubs] commits@php.netbeans.org=php*/*,hudson.php/*,languages.ini/*,languages.neon/*,languages.apacheconf/* dkonecny@netbeans.org=web*/*,j2ee*/*,maven.j2ee/*,coherence/*,cloud.*/*,extbrowser,javaee*/*,core.browser*/*,netserver +mentlicher@netbeans.org=web.webkit.debugging/*,web.javascript.debugger/* diff --git a/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/JPQLValidation.java b/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/JPQLValidation.java --- a/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/JPQLValidation.java +++ b/j2ee.jpa.verification/src/org/netbeans/modules/j2ee/jpa/verification/rules/entity/JPQLValidation.java @@ -84,7 +84,7 @@ public class JPQLValidation extends JPAClassRule implements CancelListener{ private ManagedTypeProvider mtp;//need to store as jpql validation may be too long and need to be cancelled if required - + private JPQLQueryHelper helper; /** Creates a new instance of NonFinalClass */ public JPQLValidation() { setClassContraints(Arrays.asList(ClassConstraints.ENTITY, @@ -132,10 +132,10 @@ } } } - JPQLQueryHelper helper = new JPQLQueryHelper(); + helper = new JPQLQueryHelper(); Project project = FileOwnerQuery.getOwner(ctx.getFileObject()); List problems = new ArrayList(); - mtp = new ManagedTypeProvider(project, jpaCtx.getMetaData()); + mtp = new ManagedTypeProvider(project, jpaCtx.getMetaData(), jpaCtx.getCompilationInfo().getElements()); for(int index=0;index types; + private final Map packages; private MetadataModelReadHelper> readHelper; private final ManagedTypeProvider mtp; - private AnnotationModelHelper amh; + private final Elements elements; - TypeRepository(Project project, ManagedTypeProvider mtp) { + TypeRepository(Project project, ManagedTypeProvider mtp, Elements elements) { this.project = project; this.mtp = mtp; + this.elements = elements; types = new HashMap(); + packages = new HashMap(); } @Override @@ -90,7 +84,30 @@ if(mainPart != null){ IType[] mainType = types.get(mainPart); if(mainType == null){ - fillTypeElement(mainPart); + //first check packages + int mainFirstPoint = mainPart.indexOf('.'); + int mainLastPoint = mainPart.lastIndexOf('.'); + + if(mainFirstPoint != mainLastPoint && mainFirstPoint>-1){ + //we have at least 2 points and at least one for package (we may have nested enums) + for(int packagePartIndex = mainFirstPoint;packagePartIndex-1;packagePartIndex = mainPart.indexOf('.', packagePartIndex+1)){ + String packageStr = mainPart.substring(0,packagePartIndex); + Boolean exist = packages.get(packageStr); + if(exist == null){ + packages.put(packageStr, elements.getPackageElement(packageStr)!=null); + exist = packages.get(packageStr); + } + if(Boolean.FALSE.equals(exist)){ + mainType = new Type[]{null}; + types.put(mainPart, mainType); + break; + } + } + } + // + if(mainType == null){ + fillTypeElement(mainPart); + } } mainType = types.get(mainPart); if(mainType[0] != null){ @@ -137,7 +154,7 @@ } ret = types.get(fqn); } - return ret[0]; + return ret!=null ? ret[0] : null; } @Override @@ -148,25 +165,10 @@ private void fillTypeElement(final String fqn){ types.put(fqn, new Type[]{null}); if(isValid()){ - getAnnotationModelHelper(); - if(amh != null && isValid()) { - try { - amh.runJavaSourceTask(new Callable() { - - @Override - public Void call() throws Exception { - if(isValid()) {//model will be filled with nulls after provider invalidation and with values only if valid provider - TypeElement te = amh.getCompilationController().getElements().getTypeElement(fqn); - if(te!=null) { - PersistentObject po = new PersistentObject(amh, te) {}; - types.put(fqn, new Type[]{new Type(TypeRepository.this, po)}); - } - } - return null; - } - }); - } catch (IOException ex) { - //TODO: any logging? + if(isValid()) { + TypeElement te = elements.getTypeElement(fqn); + if(te!=null) { + types.put(fqn, new Type[]{new Type(TypeRepository.this, te)}); } } } @@ -174,22 +176,13 @@ private void fillTypeElement(Class type){ types.put(type.getName(), new Type[]{new Type(TypeRepository.this, type)}); } - - AnnotationModelHelper getAnnotationModelHelper() { - if(amh == null) { - Sources sources=ProjectUtils.getSources(project); - SourceGroup groups[]=sources.getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA); - if(groups != null && groups.length>0){ - SourceGroup firstGroup=groups[0]; - FileObject fo=firstGroup.getRootFolder(); - ClasspathInfo classpathInfo = ClasspathInfo.create(fo); - amh = AnnotationModelHelper.create(classpathInfo); - } - } - return amh; - } + boolean isValid(){ return mtp.isValid(); } + + void invalidate() { + + } }