94
93
if (!file->needsUpdate() && file->featuresSatisfied(minimumFeatures())) {
95
94
kDebug() << "Already up to date" << document().str();
96
95
setDuChain(file->topContext());
96
if (php() && php()->codeHighlighting()
97
&& ICore::self()->languageController()->backgroundParser()->trackerForUrl(document()))
99
php()->codeHighlighting()->highlightDUChain(duChain());
103
107
kDebug() << "parsing" << document().str();
105
bool readFromDisk = !contentsAvailableFromEditor();
109
KDevelop::ProblemPointer p = readContents();
111
//TODO: associate problem with topducontext
107
115
ParseSession session;
109
QString fileName = document().str();
112
session.readFile(fileName);
114
session.setContents(contentsFromEditor());
115
session.setCurrentDocument(document().str());
116
//TODO: support different charsets
117
session.setContents(QString::fromUtf8(contents().contents));
118
session.setCurrentDocument(document());
119
121
StartAst* ast = 0;
200
196
chain->setFeatures(newFeatures);
201
197
ParsingEnvironmentFilePointer file = chain->parsingEnvironmentFile();
203
QFileInfo fileInfo(fileName);
204
QDateTime lastModified = fileInfo.lastModified();
206
file->setModificationRevision(KDevelop::ModificationRevision(lastModified));
208
file->setModificationRevision(KDevelop::ModificationRevision(lastModified, revisionToken()));
198
file->setModificationRevision(contents().modification);
211
199
DUChain::self()->updateContextEnvironment( chain->topContext(), file.data() );
201
if (php() && php()->codeHighlighting()
202
&& ICore::self()->languageController()->backgroundParser()->trackerForUrl(document()))
204
php()->codeHighlighting()->highlightDUChain(chain);
213
207
ReferencedTopDUContext top;
208
DUChainWriteLocker lock;
215
DUChainReadLocker lock(DUChain::lock());
216
210
top = DUChain::self()->chainForDocument(document());
219
DUChainWriteLocker lock(DUChain::lock());
220
213
///NOTE: if we clear the imported parent contexts, autocompletion of built-in PHP stuff won't work!
221
214
//top->clearImportedParentContexts();
222
215
top->parsingEnvironmentFile()->clearModificationRevisions();
223
216
top->clearProblems();
225
DUChainWriteLocker lock(DUChain::lock());
226
218
ParsingEnvironmentFile *file = new ParsingEnvironmentFile(document());
227
219
/// Indexed string for 'Php', identifies environment files from this language plugin
228
220
static const IndexedString phpLangString("Php");
229
221
file->setLanguage(phpLangString);
230
top = new TopDUContext(document(), SimpleRange(SimpleCursor(0, 0), SimpleCursor(INT_MAX, INT_MAX)), file);
222
top = new TopDUContext(document(), RangeInRevision(0, 0, INT_MAX, INT_MAX), file);
231
223
DUChain::self()->addDocumentChain(top);
225
foreach(const ProblemPointer &p, session.problems()) {
234
foreach(const ProblemPointer &p, session.problems()) {
235
DUChainWriteLocker lock(DUChain::lock());
238
229
kDebug() << "===Failed===" << document().str();
241
cleanupSmartRevision();
244
233
void ParseJob::setParentJob(ParseJob *job)
263
252
p->setSource(source);
264
253
p->setSeverity(severity);
265
254
p->setDescription(description);
266
p->setFinalLocation(DocumentRange(document().str(), editor->findRange(node).textRange()));
255
p->setFinalLocation(DocumentRange(document(), editor->findRange(node).castToSimpleRange()));
267
256
kDebug() << p->description();