in com.microsoft.java.lsif.core/src/com/microsoft/java/lsif/core/internal/visitors/LsifVisitor.java [77:135]
private void resolve(int startPosition, int length, boolean needResolveImpl, int modifier) {
try {
org.eclipse.lsp4j.Range sourceLspRange = JDTUtils
.toRange(this.getContext().getCompilationUnit().getTypeRoot(), startPosition, length);
IJavaElement element = JDTUtils.findElementAtSelection(this.getContext().getCompilationUnit().getTypeRoot(),
sourceLspRange.getStart().getLine(), sourceLspRange.getStart().getCharacter(),
new PreferenceManager(), new NullProgressMonitor());
if (element == null) {
return;
}
LsifService lsif = this.getLsif();
Document docVertex = this.getContext().getDocVertex();
Project projVertex = this.getContext().getProjVertex();
Range sourceRange = Repository.getInstance().enlistRange(lsif, docVertex, sourceLspRange);
Location definitionLocation = JdtlsUtils.getElementLocation(element);
if (definitionLocation == null) {
// no target location, only resolve hover.
Hover hover = VisitorUtils.resolveHoverInformation(docVertex, sourceRange.getStart().getLine(),
sourceRange.getStart().getCharacter());
if (VisitorUtils.isEmptyHover(hover)) {
return;
}
ResultSet resultSet = VisitorUtils.ensureResultSet(lsif, sourceRange);
VisitorUtils.emitHoverResult(hover, lsif, resultSet);
return;
}
String id = VisitorUtils.createSymbolKey(definitionLocation);
Document definitionDocument = Repository.getInstance().enlistDocument(lsif, definitionLocation.getUri(),
projVertex);
SymbolData symbolData = Repository.getInstance().enlistSymbolData(id, definitionDocument, projVertex);
/* Ensure resultSet */
symbolData.ensureResultSet(lsif, sourceRange);
/* Resolve moniker */
symbolData.resolveMoniker(lsif, element, modifier, hasPackageInformation);
/* Resolve definition */
symbolData.resolveDefinition(lsif, element, definitionLocation);
/* Resolve typeDefinition */
symbolData.resolveTypeDefinition(lsif, docVertex, sourceLspRange);
/* Resolve implementation */
if (needResolveImpl) {
symbolData.resolveImplementation(lsif, docVertex, sourceLspRange);
}
/* Resolve reference */
symbolData.resolveReference(lsif, docVertex, definitionLocation, sourceRange);
/* Resolve hover */
symbolData.resolveHover(lsif, docVertex, sourceLspRange);
} catch (Exception e) {
JavaLanguageServerPlugin.logException(e.getMessage(), e);
}
}