类org.eclipse.lsp4j.FoldingRange源码实例Demo

下面列出了怎么用org.eclipse.lsp4j.FoldingRange的API类实例代码及写法,或者点击链接到github查看源代码。

源代码1 项目: lemminx   文件: XMLFoldingsTest.java
private static void assertRanges(String[] lines, ExpectedIndentRange[] expected, String message, Integer nRanges) {
	TextDocument document = new TextDocument(String.join("\n", lines), "test://foo/bar.json");
	DOMDocument xmlDocument = DOMParser.getInstance().parse(document, null);
	XMLLanguageService languageService = new XMLLanguageService();

	FoldingRangeCapabilities context = new FoldingRangeCapabilities();
	context.setRangeLimit(nRanges);
	XMLFoldingSettings settings = new XMLFoldingSettings();
	settings.setCapabilities(context);
	List<FoldingRange> actual = languageService.getFoldingRanges(xmlDocument, settings);

	List<ExpectedIndentRange> actualRanges = new ArrayList<>();
	for (FoldingRange f : actual) {
		actualRanges.add(r(f.getStartLine(), f.getEndLine(), f.getKind()));
	}
	Collections.sort(actualRanges, (r1, r2) -> r1.startLine - r2.startLine);
	assertArrayEquals(expected, actualRanges.toArray(), message);
}
 
源代码2 项目: lemminx   文件: XMLTextDocumentService.java
@Override
public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestParams params) {
	return computeDOMAsync(params.getTextDocument(), (cancelChecker, xmlDocument) -> {
		return getXMLLanguageService().getFoldingRanges(xmlDocument, sharedSettings.getFoldingSettings(),
				cancelChecker);
	});
}
 
源代码3 项目: eclipse.jdt.ls   文件: JDTLanguageServer.java
@Override
public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestParams params) {
	logInfo(">> document/foldingRange");
	return computeAsyncWithClientProgress((monitor) -> {
		waitForLifecycleJobs(monitor);
		return new FoldingRangeHandler().foldingRange(params, monitor);
	});
}
 
源代码4 项目: eclipse.jdt.ls   文件: FoldingRangeHandler.java
public List<FoldingRange> foldingRange(FoldingRangeRequestParams params, IProgressMonitor monitor) {
	List<FoldingRange> $ = new ArrayList<>();
	ITypeRoot unit = JDTUtils.resolveTypeRoot(params.getTextDocument().getUri());
	if (unit == null) {
		return $;
	}
	computeFoldingRanges($, unit, monitor);
	return $;
}
 
源代码5 项目: eclipse.jdt.ls   文件: FoldingRangeHandler.java
private void computeTypeRootRanges(List<FoldingRange> foldingRanges, ITypeRoot unit, IScanner scanner) throws CoreException {
	if (unit.hasChildren()) {
		for (IJavaElement child : unit.getChildren()) {
			if (child instanceof IImportContainer) {
				ISourceRange importRange = ((IImportContainer) child).getSourceRange();
				FoldingRange importFoldingRange = new FoldingRange(scanner.getLineNumber(importRange.getOffset()) - 1, scanner.getLineNumber(importRange.getOffset() + importRange.getLength()) - 1);
				importFoldingRange.setKind(FoldingRangeKind.Imports);
				foldingRanges.add(importFoldingRange);
			} else if (child instanceof IType) {
				computeTypeRanges(foldingRanges, (IType) child, scanner);
			}
		}
	}
}
 
源代码6 项目: eclipse.jdt.ls   文件: FoldingRangeHandler.java
private void computeTypeRanges(List<FoldingRange> foldingRanges, IType unit, IScanner scanner) throws CoreException {
	ISourceRange typeRange = unit.getSourceRange();
	foldingRanges.add(new FoldingRange(scanner.getLineNumber(unit.getNameRange().getOffset()) - 1, scanner.getLineNumber(typeRange.getOffset() + typeRange.getLength()) - 1));
	IJavaElement[] children = unit.getChildren();
	for (IJavaElement c : children) {
		if (c instanceof IMethod) {
			computeMethodRanges(foldingRanges, (IMethod) c, scanner);
		} else if (c instanceof IType) {
			computeTypeRanges(foldingRanges, (IType) c, scanner);
		}
	}
}
 
源代码7 项目: eclipse.jdt.ls   文件: SyntaxLanguageServer.java
@Override
public CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestParams params) {
	logInfo(">> document/foldingRange");
	return computeAsync((monitor) -> {
		waitForLifecycleJobs(monitor);
		return new FoldingRangeHandler().foldingRange(params, monitor);
	});
}
 
源代码8 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
@Test
public void testTypes() throws Exception {
	String className = "org.sample.SimpleFoldingRange";
	List<FoldingRange> foldingRanges = getFoldingRanges(className);
	assertTrue(foldingRanges.size() == 7);
	assertHasFoldingRange(2, 3, FoldingRangeKind.Imports, foldingRanges);
	assertHasFoldingRange(5, 7, FoldingRangeKind.Comment, foldingRanges);
	assertHasFoldingRange(8, 24, null, foldingRanges);
	assertHasFoldingRange(10, 14, FoldingRangeKind.Comment, foldingRanges);
	assertHasFoldingRange(19, 23, null, foldingRanges);
	assertHasFoldingRange(20, 22, null, foldingRanges);
}
 
源代码9 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
@Test
public void testErrorTypes() throws Exception {
	String className = "org.sample.UnmatchFoldingRange";
	List<FoldingRange> foldingRanges = getFoldingRanges(className);
	assertTrue(foldingRanges.size() == 3);
	assertHasFoldingRange(2, 12, null, foldingRanges);
	assertHasFoldingRange(3, 10, null, foldingRanges);
	assertHasFoldingRange(5, 7, null, foldingRanges);
}
 
源代码10 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
@Test
public void testInvalidInput() throws Exception {
	String className = "org.sample.InvalidInputRange";
	List<FoldingRange> foldingRanges = getFoldingRanges(className);
	assertTrue(foldingRanges.size() == 3);
	assertHasFoldingRange(2, 4, "comment", foldingRanges);
	assertHasFoldingRange(5, 10, null, foldingRanges);
	assertHasFoldingRange(7, 9, null, foldingRanges);
}
 
源代码11 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
@Test
public void testRegionFoldingRanges() throws Exception {
	String className = "org.sample.RegionFoldingRange";
	List<FoldingRange> foldingRanges = getFoldingRanges(className);
	assertTrue(foldingRanges.size() == 7);
	assertHasFoldingRange(7, 15, FoldingRangeKind.Region, foldingRanges);
	assertHasFoldingRange(17, 23, FoldingRangeKind.Region, foldingRanges);
	assertHasFoldingRange(18, 20, FoldingRangeKind.Region, foldingRanges);
}
 
源代码12 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
@Test
public void testStatementFoldingRanges() throws Exception {
	String className = "org.sample.StatementFoldingRange";
	List<FoldingRange> foldingRanges = getFoldingRanges(className);
	assertTrue(foldingRanges.size() == 18);
	assertHasFoldingRange(2, 4, FoldingRangeKind.Comment, foldingRanges);
	assertHasFoldingRange(5, 53, null, foldingRanges);
	assertHasFoldingRange(7, 52, null, foldingRanges);

	// First switch statement
	assertHasFoldingRange(10, 23, null, foldingRanges);
	assertHasFoldingRange(11, 18, null, foldingRanges);
	assertHasFoldingRange(19, 20, null, foldingRanges);
	assertHasFoldingRange(21, 22, null, foldingRanges);

	// Try catch:
	assertHasFoldingRange(12, 13, null, foldingRanges);
	assertHasFoldingRange(14, 16, null, foldingRanges);

	// If statement:
	assertHasFoldingRange(26, 27, null, foldingRanges);
	assertHasFoldingRange(28, 29, null, foldingRanges);
	assertHasFoldingRange(30, 32, null, foldingRanges);

	// Second switch statement:
	assertHasFoldingRange(36, 51, null, foldingRanges);
	assertHasFoldingRange(37, 40, null, foldingRanges);
	assertHasFoldingRange(41, 47, null, foldingRanges);
	assertHasFoldingRange(48, 50, null, foldingRanges);
}
 
源代码13 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
private List<FoldingRange> getFoldingRanges(String className) throws CoreException {
	String uri = ClassFileUtil.getURI(project, className);
	TextDocumentIdentifier identifier = new TextDocumentIdentifier(uri);
	FoldingRangeRequestParams params = new FoldingRangeRequestParams();
	params.setTextDocument(identifier);
	return new FoldingRangeHandler().foldingRange(params, monitor);
}
 
源代码14 项目: lemminx   文件: XMLFoldings.java
private static int addRange(FoldingRange range, List<FoldingRange> ranges) {
	ranges.add(range);
	return range.getStartLine();
}
 
源代码15 项目: lemminx   文件: XMLLanguageService.java
public List<FoldingRange> getFoldingRanges(DOMDocument xmlDocument, XMLFoldingSettings context) {
	return getFoldingRanges(xmlDocument, context, NULL_CHECKER);
}
 
源代码16 项目: lemminx   文件: XMLLanguageService.java
public List<FoldingRange> getFoldingRanges(DOMDocument xmlDocument, XMLFoldingSettings context,
		CancelChecker cancelChecker) {
	return foldings.getFoldingRanges(xmlDocument.getTextDocument(), context, cancelChecker);
}
 
源代码17 项目: eclipse.jdt.ls   文件: FoldingRangeHandler.java
private void computeFoldingRanges(List<FoldingRange> foldingRanges, ITypeRoot unit, IProgressMonitor monitor) {
	try {
		ISourceRange range = unit.getSourceRange();
		if (!SourceRange.isAvailable(range)) {
			return;
		}

		String contents = unit.getSource();
		if (StringUtils.isBlank(contents)) {
			return;
		}

		final int shift = range.getOffset();
		IScanner scanner = getScanner();
		scanner.setSource(contents.toCharArray());
		scanner.resetTo(shift, shift + range.getLength());

		int start = shift;
		int token = 0;
		Stack<Integer> regionStarts = new Stack<>();
		while (token != ITerminalSymbols.TokenNameEOF) {
			start = scanner.getCurrentTokenStartPosition();
			switch (token) {
				case ITerminalSymbols.TokenNameCOMMENT_JAVADOC:
				case ITerminalSymbols.TokenNameCOMMENT_BLOCK:
					int end = scanner.getCurrentTokenEndPosition();
					FoldingRange commentFoldingRange = new FoldingRange(scanner.getLineNumber(start) - 1, scanner.getLineNumber(end) - 1);
					commentFoldingRange.setKind(FoldingRangeKind.Comment);
					foldingRanges.add(commentFoldingRange);
					break;
				case ITerminalSymbols.TokenNameCOMMENT_LINE:
					String currentSource = String.valueOf(scanner.getCurrentTokenSource());
					if (REGION_START_PATTERN.matcher(currentSource).lookingAt()) {
						regionStarts.push(start);
					} else if (REGION_END_PATTERN.matcher(currentSource).lookingAt()) {
						if (regionStarts.size() > 0) {
							FoldingRange regionFolding = new FoldingRange(scanner.getLineNumber(regionStarts.pop()) - 1, scanner.getLineNumber(start) - 1);
							regionFolding.setKind(FoldingRangeKind.Region);
							foldingRanges.add(regionFolding);
						}
					}
					break;
				default:
					break;
			}
			token = getNextToken(scanner);
		}
		computeTypeRootRanges(foldingRanges, unit, scanner);
	} catch (CoreException e) {
		JavaLanguageServerPlugin.logException("Problem with folding range for " + unit.getPath().toPortableString(), e);
		monitor.setCanceled(true);
	}
}
 
源代码18 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
private void testClass(String className) throws CoreException {
	List<FoldingRange> foldingRanges = getFoldingRanges(className);
	for (FoldingRange range : foldingRanges) {
		assertTrue("Class: " + className + ", FoldingRange:" + range.getKind() + " - invalid location.", isValid(range));
	}
}
 
源代码19 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
private boolean isValid(FoldingRange range) {
	return range != null && range.getStartLine() <= range.getEndLine();
}
 
源代码20 项目: eclipse.jdt.ls   文件: FoldingRangeHandlerTest.java
private void assertHasFoldingRange(int startLine, int endLine, String expectedKind, Collection<FoldingRange> foldingRanges) {
	Optional<FoldingRange> range = foldingRanges.stream().filter(s -> s.getStartLine() == startLine && s.getEndLine() == endLine).findFirst();
	assertTrue("Expected type" + expectedKind, range.get().getKind() == expectedKind);
}
 
源代码21 项目: lsp4j   文件: TextDocumentService.java
/**
 * The folding range request is sent from the client to the server to return all folding
 * ranges found in a given text document.
 * 
 * Since version 3.10.0
 */
@JsonRequest
default CompletableFuture<List<FoldingRange>> foldingRange(FoldingRangeRequestParams params) {
	throw new UnsupportedOperationException();
}
 
 类所在包
 类方法
 同包方法