diff -r 4028502c3333 java.source/src/org/netbeans/modules/java/source/usages/RepositoryUpdater.java --- a/java.source/src/org/netbeans/modules/java/source/usages/RepositoryUpdater.java Fri Aug 01 12:37:04 2008 +0400 +++ b/java.source/src/org/netbeans/modules/java/source/usages/RepositoryUpdater.java Fri Aug 01 12:55:50 2008 +0200 @@ -171,6 +171,7 @@ static final String SOURCE_LEVEL_ROOT = "sourceLevel"; //NOI18N static final String EXTRA_COMPILER_OPTIONS = "extraCompilerOptions"; //NOI18N static final String CLASSPATH_ATTRIBUTE = "classPath"; //NOI18N + static final String DIGEST = "digest"; //NOI18N //non-final, non-private for tests... static int DELAY = Utilities.isWindows() ? 2000 : 1000; @@ -1788,7 +1789,22 @@ Iterable children, Iterable virtualChildren, boolean clean, ProgressHandle handle, JavaFileFilterImplementation filter, Map> resources, Set compiledFiles, Set toRecompile, - Map> misplacedSource2FQNs, boolean allowCancel, boolean generateVirtual) throws IOException { + Map> misplacedSource2FQNs, boolean allowCancel, boolean generateVirtual) + throws IOException + { + parseFiles(root, classCache, isInitialCompilation, children, + virtualChildren, clean, handle, filter, resources, compiledFiles, + toRecompile, misplacedSource2FQNs, allowCancel, generateVirtual, + true, null); + } + + private void parseFiles(URL root, final File classCache, boolean isInitialCompilation, + Iterable children, Iterable virtualChildren, + boolean clean, ProgressHandle handle, JavaFileFilterImplementation filter, + Map> resources, Set compiledFiles, Set toRecompile, + Map> misplacedSource2FQNs, boolean allowCancel, boolean generateVirtual, + boolean digestChanged, File folderFile) throws IOException { + assert !allowCancel || compiledFiles != null; LOGGER.fine("parseFiles: " + root); final FileObject rootFo = URLMapper.findFileObject(root); @@ -1876,6 +1892,14 @@ if (uqImpl == null) { //IDE is exiting, indeces are already closed. return; + } + if (clean == false && digestChanged == false) { + // no need to recompile whole root and no change detected + // in source root. + return; + } + if (resources == null && folderFile != null) { + resources = getAllClassFiles(classCache, FileObjects.getRelativePath(rootFile, folderFile), true); } SourceAnalyser sa = uqImpl.getSourceAnalyser(); assert sa != null; @@ -2174,15 +2198,10 @@ Map> resources = Collections.>emptyMap(); final FileList children = new FileList(folderFile); Set compiledFiles = new HashSet(); - children.getJavaFiles(); - if (children.digestChanged()) { - resources = getAllClassFiles(classCache, FileObjects.getRelativePath(rootFile, folderFile), true); - parseFiles(root, classCache, isInitialCompilation, - children.getJavaFiles(), children.getVirtualJavaFiles(), - clean, handle, filter, resources, compiledFiles, null, misplacedSource2FQNs, false, true); - } else { - ClassIndexManager.getDefault().createUsagesQuery(root, true); - } + parseFiles(root, classCache, isInitialCompilation, + children.getJavaFiles(), children.getVirtualJavaFiles(), + clean, handle, filter, null, compiledFiles, null, misplacedSource2FQNs, + false, true, children.digestChanged(), folderFile); if (!misplacedSource2FQNs.isEmpty()) { if (LOGGER.isLoggable(Level.FINE)) { @@ -2753,25 +2772,23 @@ private void computeDigest(File root, final List javaFiles) { StringBuilder sb = new StringBuilder(200); - sb.append(SourceLevelQuery.getSourceLevel(FileUtil.toFileObject(root))); for (File f : javaFiles) { sb.append(f.getPath()).append(f.lastModified()); } try { - MessageDigest md5 = MessageDigest.getInstance("MD5"); + MessageDigest md5 = MessageDigest.getInstance("MD5"); // NOI18N byte[] b = sb.toString().getBytes(); byte[] digest = md5.digest(b); URL rootUrl = root.toURI().toURL(); - Properties prop = loadProperties(rootUrl); - String data = prop.getProperty("digest"); - if (data != null) { + String data = getAttribute(rootUrl, DIGEST, null); + if (data != null && getAttribute(rootUrl, DIRTY_ROOT, null) == null) { String newDigest = printDigest(digest); if (data.equals(newDigest) == true) { digestChanged = false; + return; } } - prop.put("digest", printDigest(digest)); - storeProperties(rootUrl, prop); + ensureAttributeValue(rootUrl, DIGEST, printDigest(digest), true); } catch (IOException e) { } catch (NoSuchAlgorithmException ex) { Exceptions.printStackTrace(ex);