Lines 46-51
Link Here
|
46 |
import com.sun.source.tree.Tree; |
46 |
import com.sun.source.tree.Tree; |
47 |
import com.sun.tools.javac.api.JavacTaskImpl; |
47 |
import com.sun.tools.javac.api.JavacTaskImpl; |
48 |
import com.sun.tools.javac.code.Symbol.ClassSymbol; |
48 |
import com.sun.tools.javac.code.Symbol.ClassSymbol; |
|
|
49 |
import com.sun.tools.javac.code.Symbol.TypeSymbol; |
50 |
import com.sun.tools.javac.comp.AttrContext; |
51 |
import com.sun.tools.javac.comp.Enter; |
52 |
import com.sun.tools.javac.comp.Env; |
49 |
import com.sun.tools.javac.tree.JCTree; |
53 |
import com.sun.tools.javac.tree.JCTree; |
50 |
import com.sun.tools.javac.tree.JCTree.JCClassDecl; |
54 |
import com.sun.tools.javac.tree.JCTree.JCClassDecl; |
51 |
import org.netbeans.lib.nbjavac.services.CancelAbort; |
55 |
import org.netbeans.lib.nbjavac.services.CancelAbort; |
Lines 56-61
Link Here
|
56 |
import com.sun.tools.javac.util.MissingPlatformError; |
60 |
import com.sun.tools.javac.util.MissingPlatformError; |
57 |
import java.io.File; |
61 |
import java.io.File; |
58 |
import java.util.*; |
62 |
import java.util.*; |
|
|
63 |
import java.util.Map.Entry; |
59 |
import java.util.logging.Level; |
64 |
import java.util.logging.Level; |
60 |
import javax.annotation.processing.Processor; |
65 |
import javax.annotation.processing.Processor; |
61 |
import javax.lang.model.element.TypeElement; |
66 |
import javax.lang.model.element.TypeElement; |
Lines 103-109
Link Here
|
103 |
final LowMemoryWatcher mem = LowMemoryWatcher.getInstance(); |
108 |
final LowMemoryWatcher mem = LowMemoryWatcher.getInstance(); |
104 |
final DiagnosticListenerImpl dc = new DiagnosticListenerImpl(); |
109 |
final DiagnosticListenerImpl dc = new DiagnosticListenerImpl(); |
105 |
final LinkedList<CompilationUnitTree> trees = new LinkedList<CompilationUnitTree>(); |
110 |
final LinkedList<CompilationUnitTree> trees = new LinkedList<CompilationUnitTree>(); |
106 |
LinkedList<Pair<CompilationUnitTree, CompileTuple>> units = new LinkedList<Pair<CompilationUnitTree, CompileTuple>>(); |
111 |
Map<CompilationUnitTree, CompileTuple> units = new IdentityHashMap<CompilationUnitTree, CompileTuple>(); |
107 |
JavacTaskImpl jt = null; |
112 |
JavacTaskImpl jt = null; |
108 |
|
113 |
|
109 |
boolean nop = true; |
114 |
boolean nop = true; |
Lines 134-141
Link Here
|
134 |
for (CompilationUnitTree cut : jt.parse(tuple.jfo)) { //TODO: should be exactly one |
139 |
for (CompilationUnitTree cut : jt.parse(tuple.jfo)) { //TODO: should be exactly one |
135 |
trees.add(cut); |
140 |
trees.add(cut); |
136 |
if (units != null) { |
141 |
if (units != null) { |
137 |
Pair<CompilationUnitTree, CompileTuple> unit = Pair.<CompilationUnitTree, CompileTuple>of(cut, tuple); |
142 |
units.put(cut, tuple); |
138 |
units.add(unit); |
|
|
139 |
} |
143 |
} |
140 |
computeFQNs(file2FQNs, cut, tuple); |
144 |
computeFQNs(file2FQNs, cut, tuple); |
141 |
} |
145 |
} |
Lines 199-204
Link Here
|
199 |
mem.free(); |
203 |
mem.free(); |
200 |
return ParsingOutput.lowMemory(file2FQNs, addedTypes, createdFiles, finished, modifiedTypes, aptGenerated); |
204 |
return ParsingOutput.lowMemory(file2FQNs, addedTypes, createdFiles, finished, modifiedTypes, aptGenerated); |
201 |
} |
205 |
} |
|
|
206 |
Map<TypeElement, CompileTuple> clazz2Tuple = new IdentityHashMap<TypeElement, CompileTuple>(); |
207 |
Enter enter = Enter.instance(jt.getContext()); |
208 |
for (TypeElement type : types) { |
209 |
Env<AttrContext> typeEnv = enter.getEnv((TypeSymbol) type); |
210 |
if (typeEnv == null) { |
211 |
JavaIndex.LOG.log(Level.FINE, "No Env for: {0}", type.getQualifiedName()); |
212 |
continue; |
213 |
} |
214 |
clazz2Tuple.put(type, units.get(typeEnv.toplevel)); |
215 |
} |
202 |
jt.analyze(types); |
216 |
jt.analyze(types); |
203 |
if (context.isCancelled()) { |
217 |
if (context.isCancelled()) { |
204 |
return null; |
218 |
return null; |
Lines 208-220
Link Here
|
208 |
mem.free(); |
222 |
mem.free(); |
209 |
return ParsingOutput.lowMemory(file2FQNs, addedTypes, createdFiles, finished, modifiedTypes, aptGenerated); |
223 |
return ParsingOutput.lowMemory(file2FQNs, addedTypes, createdFiles, finished, modifiedTypes, aptGenerated); |
210 |
} |
224 |
} |
211 |
for (Pair<CompilationUnitTree, CompileTuple> unit : units) { |
225 |
for (Entry<CompilationUnitTree, CompileTuple> unit : units.entrySet()) { |
212 |
CompileTuple active = unit.second; |
226 |
CompileTuple active = unit.getValue(); |
213 |
if (aptEnabled) { |
227 |
if (aptEnabled) { |
214 |
JavaCustomIndexer.addAptGenerated(context, javaContext, active, aptGenerated); |
228 |
JavaCustomIndexer.addAptGenerated(context, javaContext, active, aptGenerated); |
215 |
} |
229 |
} |
216 |
List<TypeElement> activeTypes = new ArrayList<TypeElement>(); |
230 |
List<TypeElement> activeTypes = new ArrayList<TypeElement>(); |
217 |
for (Tree tree : unit.first.getTypeDecls()) { |
231 |
for (Tree tree : unit.getKey().getTypeDecls()) { |
218 |
if (tree instanceof JCTree && ((JCTree)tree).getTag() == JCTree.CLASSDEF) { |
232 |
if (tree instanceof JCTree && ((JCTree)tree).getTag() == JCTree.CLASSDEF) { |
219 |
ClassSymbol sym = ((JCClassDecl)tree).sym; |
233 |
ClassSymbol sym = ((JCClassDecl)tree).sym; |
220 |
if (sym != null) |
234 |
if (sym != null) |
Lines 224-233
Link Here
|
224 |
javaContext.getFQNs().set(activeTypes, active.indexable.getURL()); |
238 |
javaContext.getFQNs().set(activeTypes, active.indexable.getURL()); |
225 |
boolean[] main = new boolean[1]; |
239 |
boolean[] main = new boolean[1]; |
226 |
if (javaContext.getCheckSums().checkAndSet(active.indexable.getURL(), activeTypes, jt.getElements()) || context.isSupplementaryFilesIndexing()) { |
240 |
if (javaContext.getCheckSums().checkAndSet(active.indexable.getURL(), activeTypes, jt.getElements()) || context.isSupplementaryFilesIndexing()) { |
227 |
javaContext.analyze(Collections.singleton(unit.first), jt, fileManager, unit.second, addedTypes, main); |
241 |
javaContext.analyze(Collections.singleton(unit.getKey()), jt, fileManager, unit.getValue(), addedTypes, main); |
228 |
} else { |
242 |
} else { |
229 |
final Set<ElementHandle<TypeElement>> aTypes = new HashSet<ElementHandle<TypeElement>>(); |
243 |
final Set<ElementHandle<TypeElement>> aTypes = new HashSet<ElementHandle<TypeElement>>(); |
230 |
javaContext.analyze(Collections.singleton(unit.first), jt, fileManager, unit.second, aTypes, main); |
244 |
javaContext.analyze(Collections.singleton(unit.getKey()), jt, fileManager, unit.getValue(), aTypes, main); |
231 |
addedTypes.addAll(aTypes); |
245 |
addedTypes.addAll(aTypes); |
232 |
modifiedTypes.addAll(aTypes); |
246 |
modifiedTypes.addAll(aTypes); |
233 |
} |
247 |
} |
Lines 241-255
Link Here
|
241 |
mem.free(); |
255 |
mem.free(); |
242 |
return ParsingOutput.lowMemory(file2FQNs, addedTypes, createdFiles, finished, modifiedTypes, aptGenerated); |
256 |
return ParsingOutput.lowMemory(file2FQNs, addedTypes, createdFiles, finished, modifiedTypes, aptGenerated); |
243 |
} |
257 |
} |
244 |
for (JavaFileObject generated : jt.generate(types)) { |
258 |
for (TypeElement type : types) { |
245 |
if (generated instanceof FileObjects.FileBase) { |
259 |
Iterable<? extends JavaFileObject> generatedFiles = jt.generate(Collections.singletonList(type)); |
246 |
createdFiles.add(((FileObjects.FileBase) generated).getFile()); |
260 |
CompileTuple unit = clazz2Tuple.get(type); |
247 |
} else { |
261 |
if (unit == null || !unit.virtual) { |
248 |
// presumably should not happen |
262 |
for (JavaFileObject generated : generatedFiles) { |
|
|
263 |
if (generated instanceof FileObjects.FileBase) { |
264 |
createdFiles.add(((FileObjects.FileBase) generated).getFile()); |
265 |
} else { |
266 |
// presumably should not happen |
267 |
} |
268 |
} |
249 |
} |
269 |
} |
250 |
} |
270 |
} |
251 |
for (Pair<CompilationUnitTree, CompileTuple> unit : units) { |
271 |
for (Entry<CompilationUnitTree, CompileTuple> unit : units.entrySet()) { |
252 |
CompileTuple active = unit.second; |
272 |
CompileTuple active = unit.getValue(); |
253 |
JavaCustomIndexer.setErrors(context, active, dc); |
273 |
JavaCustomIndexer.setErrors(context, active, dc); |
254 |
finished.add(active.indexable); |
274 |
finished.add(active.indexable); |
255 |
} |
275 |
} |