--- a/openide.loaders/src/org/openide/loaders/FolderLookup.java Tue Jul 23 10:04:56 2013 +0200 +++ a/openide.loaders/src/org/openide/loaders/FolderLookup.java Wed Jul 24 10:56:52 2013 +0200 @@ -414,6 +414,10 @@ return; } + if (template.getType().getSimpleName().contains("LookupProvider")) { + System.err.println("trying to obtain " + template.getType()); + } + // do not wait in folder recognizer, but in all other cases if ( !FolderList.isFolderRecognizerThread() && --- a/openide.util.lookup/src/org/openide/util/lookup/ProxyLookup.java Tue Jul 23 10:04:56 2013 +0200 +++ a/openide.util.lookup/src/org/openide/util/lookup/ProxyLookup.java Wed Jul 24 10:56:52 2013 +0200 @@ -539,6 +539,19 @@ * @return the collection or set of the objects */ private Collection computeResult(int indexToCache, boolean callBeforeLookup) { + Collection c = computeResultIMpl(indexToCache, callBeforeLookup); + if (this.weakL.result.template.getType().getSimpleName().contains("LookupProvider")) { + System.err.print("lookup: " + this.weakL.result.proxy.getClass()); + System.err.println("@" + Integer.toHexString(System.identityHashCode(this.weakL.result.proxy))); + System.err.println(" thread: " + Thread.currentThread().getName()); + for (Lookup lkp : this.data.getLookups(false)) { + System.err.println(" delegates to " + lkp.getClass() + "@" + Integer.toHexString(System.identityHashCode(lkp))); + } + System.err.println(" ret: " + c); + } + return c; + } + private Collection computeResultIMpl(int indexToCache, boolean callBeforeLookup) { Collection cachedResult = null; synchronized (proxy()) { Collection[] cc = getCache(); --- a/settings/src/org/netbeans/modules/settings/RecognizeInstanceObjects.java Tue Jul 23 10:04:56 2013 +0200 +++ a/settings/src/org/netbeans/modules/settings/RecognizeInstanceObjects.java Wed Jul 24 10:56:52 2013 +0200 @@ -113,7 +113,7 @@ private final String path; public OverObjects(String path) { - super(delegates(path)); + super(delegates(null, path)); this.path = path; try { ModuleSystem ms = Main.getModuleSystem(false); @@ -135,7 +135,7 @@ } @SuppressWarnings("deprecation") - private static Lookup[] delegates(String path) { + private static Lookup[] delegates(Lookup prevFolderLkp, String path) { ClassLoader loader = Lookup.getDefault().lookup(ClassLoader.class); LOG.log(Level.FINEST, "lkp loader: {0}", loader); if (loader == null) { @@ -157,12 +157,20 @@ } else { s = path; } - return new Lookup[] {new org.openide.loaders.FolderLookup(DataFolder.findFolder(fo), s).getLookup(), base}; + if (prevFolderLkp == null) { + prevFolderLkp = new org.openide.loaders.FolderLookup(DataFolder.findFolder(fo), s).getLookup(); + } + return new Lookup[] {prevFolderLkp, base}; + } + + Lookup extractFolderLkp() { + Lookup[] arr = getLookups(); + return arr.length == 2 ? arr[0] : null; } @Override public void propertyChange(PropertyChangeEvent ev) { - setLookups(delegates(path)); + setLookups(delegates(extractFolderLkp(), path)); } @Override @@ -191,7 +199,7 @@ } private void ch(FileEvent e) { if ((e.getFile().getPath() + "/").startsWith(path)) { // NOI18N - setLookups(delegates(path)); + setLookups(delegates(extractFolderLkp(), path)); } }