Lines 59-64
import java.io.BufferedReader;
Link Here
|
59 |
import java.io.BufferedReader; |
59 |
import java.io.BufferedReader; |
60 |
import java.io.File; |
60 |
import java.io.File; |
61 |
import java.io.FileInputStream; |
61 |
import java.io.FileInputStream; |
|
|
62 |
import java.io.FileNotFoundException; |
62 |
import java.io.FileOutputStream; |
63 |
import java.io.FileOutputStream; |
63 |
import java.io.IOException; |
64 |
import java.io.IOException; |
64 |
import java.io.InputStream; |
65 |
import java.io.InputStream; |
Lines 72-77
import java.net.URISyntaxException;
Link Here
|
72 |
import java.net.URISyntaxException; |
73 |
import java.net.URISyntaxException; |
73 |
import java.net.URL; |
74 |
import java.net.URL; |
74 |
import java.nio.charset.Charset; |
75 |
import java.nio.charset.Charset; |
|
|
76 |
import java.security.MessageDigest; |
77 |
import java.security.NoSuchAlgorithmException; |
75 |
import java.util.ArrayList; |
78 |
import java.util.ArrayList; |
76 |
import java.util.Arrays; |
79 |
import java.util.Arrays; |
77 |
import java.util.Collection; |
80 |
import java.util.Collection; |
Lines 232-238
public class RepositoryUpdater implement
Link Here
|
232 |
public Map<URL,List<URL>> getDependencies () { |
235 |
public Map<URL,List<URL>> getDependencies () { |
233 |
return new HashMap<URL,List<URL>> (this.deps); |
236 |
return new HashMap<URL,List<URL>> (this.deps); |
234 |
} |
237 |
} |
235 |
|
238 |
|
236 |
private synchronized void open () throws IllegalStateException { |
239 |
private synchronized void open () throws IllegalStateException { |
237 |
if (notInitialized) { |
240 |
if (notInitialized) { |
238 |
try { |
241 |
try { |
Lines 1750-1756
public class RepositoryUpdater implement
Link Here
|
1750 |
final URL rootURL = it.previous(); |
1753 |
final URL rootURL = it.previous(); |
1751 |
it.remove(); |
1754 |
it.remove(); |
1752 |
if (!oldRoots.remove(rootURL) && !RepositoryUpdater.this.scannedRoots.contains(rootURL)) { |
1755 |
if (!oldRoots.remove(rootURL) && !RepositoryUpdater.this.scannedRoots.contains(rootURL)) { |
1753 |
long startT = System.currentTimeMillis(); |
1756 |
long startT = System.currentTimeMillis(); |
1754 |
updateFolder (rootURL,rootURL, true, false, handle); |
1757 |
updateFolder (rootURL,rootURL, true, false, handle); |
1755 |
long time = System.currentTimeMillis() - startT; |
1758 |
long time = System.currentTimeMillis() - startT; |
1756 |
if (PERF_TEST) { |
1759 |
if (PERF_TEST) { |
Lines 2164-2176
public class RepositoryUpdater implement
Link Here
|
2164 |
} |
2167 |
} |
2165 |
final File classCache = Index.getClassFolder(rootFile); |
2168 |
final File classCache = Index.getClassFolder(rootFile); |
2166 |
final Map<URI, List<String>> misplacedSource2FQNs = new HashMap<URI, List<String>>(); |
2169 |
final Map<URI, List<String>> misplacedSource2FQNs = new HashMap<URI, List<String>>(); |
2167 |
Map <String,List<File>> resources = getAllClassFiles(classCache, FileObjects.getRelativePath(rootFile,folderFile),true); |
2170 |
Map <String,List<File>> resources = Collections.<String, List<File>>emptyMap(); |
2168 |
final FileList children = new FileList(folderFile); |
2171 |
final FileList children = new FileList(folderFile); |
|
|
2172 |
children.getJavaFiles(); |
2169 |
Set<File> compiledFiles = new HashSet<File>(); |
2173 |
Set<File> compiledFiles = new HashSet<File>(); |
2170 |
parseFiles(root, classCache, isInitialCompilation, |
2174 |
if (children.digestChanged()) { |
2171 |
children.getJavaFiles(), children.getVirtualJavaFiles(), |
2175 |
resources = getAllClassFiles(classCache, FileObjects.getRelativePath(rootFile,folderFile),true); |
2172 |
clean, handle, filter, resources, compiledFiles, null, misplacedSource2FQNs, false); |
2176 |
parseFiles(root, classCache, isInitialCompilation, |
2173 |
|
2177 |
children.getJavaFiles(), children.getVirtualJavaFiles(), |
|
|
2178 |
clean, handle, filter, resources, compiledFiles, null, misplacedSource2FQNs, false); |
2179 |
} else { |
2180 |
ClassIndexManager.getDefault().createUsagesQuery(root, true); |
2181 |
} |
2174 |
if (!misplacedSource2FQNs.isEmpty()) { |
2182 |
if (!misplacedSource2FQNs.isEmpty()) { |
2175 |
if (LOGGER.isLoggable(Level.FINE)) { |
2183 |
if (LOGGER.isLoggable(Level.FINE)) { |
2176 |
LOGGER.log(Level.FINE, "misplaces classes detected"); |
2184 |
LOGGER.log(Level.FINE, "misplaces classes detected"); |
Lines 2697-2702
public class RepositoryUpdater implement
Link Here
|
2697 |
private final List<File> javaFiles = new LinkedList<File>(); |
2705 |
private final List<File> javaFiles = new LinkedList<File>(); |
2698 |
private final List<File> virtualJavaFiles = new LinkedList<File>(); |
2706 |
private final List<File> virtualJavaFiles = new LinkedList<File>(); |
2699 |
private boolean initialized; |
2707 |
private boolean initialized; |
|
|
2708 |
private boolean digestChanged = true; |
2700 |
|
2709 |
|
2701 |
public FileList (final File root) { |
2710 |
public FileList (final File root) { |
2702 |
assert root != null; |
2711 |
assert root != null; |
Lines 2717-2724
public class RepositoryUpdater implement
Link Here
|
2717 |
private synchronized void init () { |
2726 |
private synchronized void init () { |
2718 |
if (!initialized) { |
2727 |
if (!initialized) { |
2719 |
collectFiles (root, javaFiles, virtualJavaFiles); |
2728 |
collectFiles (root, javaFiles, virtualJavaFiles); |
|
|
2729 |
computeDigest(root, javaFiles); |
2720 |
initialized = true; |
2730 |
initialized = true; |
2721 |
} |
2731 |
} |
|
|
2732 |
} |
2733 |
|
2734 |
private boolean digestChanged() { |
2735 |
return digestChanged; |
2736 |
} |
2737 |
|
2738 |
private void computeDigest(File root, final List<File> javaFiles) { |
2739 |
StringBuilder sb = new StringBuilder(200); |
2740 |
sb.append(SourceLevelQuery.getSourceLevel(FileUtil.toFileObject(root))); |
2741 |
for (File f : javaFiles) { |
2742 |
sb.append(f.getPath()).append(f.lastModified()); |
2743 |
} |
2744 |
try { |
2745 |
MessageDigest md5 = MessageDigest.getInstance("MD5"); |
2746 |
byte[] b = sb.toString().getBytes(); |
2747 |
byte[] digest = md5.digest(b); |
2748 |
URL rootUrl = root.toURI().toURL(); |
2749 |
Properties prop = loadProperties(rootUrl); |
2750 |
String data = prop.getProperty("digest"); |
2751 |
if (data != null) { |
2752 |
String newDigest = printDigest(digest); |
2753 |
if (data.equals(newDigest) == true) { |
2754 |
digestChanged = false; |
2755 |
} |
2756 |
} |
2757 |
prop.put("digest", printDigest(digest)); |
2758 |
storeProperties(rootUrl, prop); |
2759 |
} catch (IOException e) { |
2760 |
} catch (NoSuchAlgorithmException ex) { |
2761 |
Exceptions.printStackTrace(ex); |
2762 |
} |
2763 |
} |
2764 |
|
2765 |
private String printDigest(byte[] digest) { |
2766 |
StringBuilder sb = new StringBuilder(); |
2767 |
for (int i = 0; i < digest.length; i++) { |
2768 |
String hex = Integer.toHexString(0xFF & digest[i]); |
2769 |
if (hex.length() == 1) { |
2770 |
sb.append('0'); |
2771 |
} |
2772 |
sb.append(hex); |
2773 |
} |
2774 |
return sb.toString(); |
2722 |
} |
2775 |
} |
2723 |
|
2776 |
|
2724 |
private static void collectFiles (final File root, final List<? super File> javaFiles, |
2777 |
private static void collectFiles (final File root, final List<? super File> javaFiles, |