下面列出了怎么用org.eclipse.lsp4j.FileSystemWatcher的API类实例代码及写法,或者点击链接到github查看源代码。
public void automaticJarDetection() throws Exception {
ClientPreferences mockCapabilies = mock(ClientPreferences.class);
when(mockCapabilies.isWorkspaceChangeWatchedFilesDynamicRegistered()).thenReturn(Boolean.TRUE);
when(preferenceManager.getClientPreferences()).thenReturn(mockCapabilies);
File projectFolder = createSourceFolderWithLibs("automaticJarDetection", "src", true);
IProject invisibleProject = importRootFolder(projectFolder, "Test.java");
assertNoErrors(invisibleProject);
IJavaProject javaProject = JavaCore.create(invisibleProject);
IClasspathEntry[] classpath = javaProject.getRawClasspath();
assertEquals("Unexpected classpath:\n" + JavaProjectHelper.toString(classpath), 3, classpath.length);
assertEquals("foo.jar", classpath[2].getPath().lastSegment());
assertEquals("foo-sources.jar", classpath[2].getSourceAttachmentPath().lastSegment());
List<FileSystemWatcher> watchers = projectsManager.registerWatchers();
watchers.sort((a, b) -> a.getGlobPattern().compareTo(b.getGlobPattern()));
assertEquals(10, watchers.size());
String srcGlobPattern = watchers.get(7).getGlobPattern();
assertTrue("Unexpected source glob pattern: " + srcGlobPattern, srcGlobPattern.equals("**/src/**"));
String libGlobPattern = watchers.get(9).getGlobPattern();
assertTrue("Unexpected lib glob pattern: " + libGlobPattern, libGlobPattern.endsWith(projectFolder.getName() + "/lib/**"));
}
private void registerWatchedFiles() {
List<FileSystemWatcher> watchers = new ArrayList<>(2);
watchers.add(new FileSystemWatcher("**/*.xsd"));
watchers.add(new FileSystemWatcher("**/*.dtd"));
DidChangeWatchedFilesRegistrationOptions options = new DidChangeWatchedFilesRegistrationOptions(watchers);
registerCapability(WORKSPACE_WATCHED_FILES_ID, WORKSPACE_WATCHED_FILES, options);
}
@Override
public List<FileSystemWatcher> registerWatchers() {
logInfo(">> registerFeature 'workspace/didChangeWatchedFiles'");
if (JavaLanguageServerPlugin.getPreferencesManager().getClientPreferences().isWorkspaceChangeWatchedFilesDynamicRegistered()) {
IPath[] sources = new IPath[0];
try {
sources = listAllSourcePaths();
} catch (JavaModelException e) {
JavaLanguageServerPlugin.logException(e.getMessage(), e);
}
List<FileSystemWatcher> fileWatchers = new ArrayList<>();
Set<String> patterns = new LinkedHashSet<>(basicWatchers);
patterns.addAll(Stream.of(sources).map(ResourceUtils::toGlobPattern).collect(Collectors.toList()));
for (String pattern : patterns) {
FileSystemWatcher watcher = new FileSystemWatcher(pattern);
fileWatchers.add(watcher);
}
if (!patterns.equals(watchers)) {
JavaLanguageServerPlugin.logInfo(">> registerFeature 'workspace/didChangeWatchedFiles'");
DidChangeWatchedFilesRegistrationOptions didChangeWatchedFilesRegistrationOptions = new DidChangeWatchedFilesRegistrationOptions(fileWatchers);
JavaLanguageServerPlugin.getInstance().unregisterCapability(Preferences.WORKSPACE_WATCHED_FILES_ID, Preferences.WORKSPACE_WATCHED_FILES);
JavaLanguageServerPlugin.getInstance().registerCapability(Preferences.WORKSPACE_WATCHED_FILES_ID, Preferences.WORKSPACE_WATCHED_FILES, didChangeWatchedFilesRegistrationOptions);
watchers.clear();
watchers.addAll(patterns);
}
return fileWatchers;
}
return Collections.emptyList();
}
@Test
public void automaticJarDetectionLibUnderSource() throws Exception {
ClientPreferences mockCapabilies = mock(ClientPreferences.class);
when(mockCapabilies.isWorkspaceChangeWatchedFilesDynamicRegistered()).thenReturn(Boolean.TRUE);
when(preferenceManager.getClientPreferences()).thenReturn(mockCapabilies);
File projectFolder = createSourceFolderWithLibs("automaticJarDetectionLibUnderSource");
IProject invisibleProject = importRootFolder(projectFolder, "Test.java");
assertNoErrors(invisibleProject);
IJavaProject javaProject = JavaCore.create(invisibleProject);
IClasspathEntry[] classpath = javaProject.getRawClasspath();
assertEquals("Unexpected classpath:\n" + JavaProjectHelper.toString(classpath), 3, classpath.length);
assertEquals("foo.jar", classpath[2].getPath().lastSegment());
assertEquals("foo-sources.jar", classpath[2].getSourceAttachmentPath().lastSegment());
List<FileSystemWatcher> watchers = projectsManager.registerWatchers();
watchers.sort((a, b) -> a.getGlobPattern().compareTo(b.getGlobPattern()));
assertEquals(10, watchers.size()); // basic(8) + project(1) + library(1)
String srcGlobPattern = watchers.get(7).getGlobPattern();
assertTrue("Unexpected source glob pattern: " + srcGlobPattern, srcGlobPattern.equals("**/src/**"));
String projGlobPattern = watchers.get(8).getGlobPattern();
assertTrue("Unexpected project glob pattern: " + projGlobPattern, projGlobPattern.endsWith(projectFolder.getName() + "/**"));
String libGlobPattern = watchers.get(9).getGlobPattern();
assertTrue("Unexpected library glob pattern: " + libGlobPattern, libGlobPattern.endsWith(projectFolder.getName() + "/lib/**"));
}
@Override
public void initialized(InitializedParams params)
{
boolean canRegisterDidChangeWatchedFiles = false;
try
{
canRegisterDidChangeWatchedFiles = actionScriptServices.getClientCapabilities().getWorkspace().getDidChangeWatchedFiles().getDynamicRegistration();
}
catch(NullPointerException e)
{
canRegisterDidChangeWatchedFiles = false;
}
if(canRegisterDidChangeWatchedFiles)
{
List<FileSystemWatcher> watchers = new ArrayList<>();
//ideally, we'd only check .as, .mxml, asconfig.json, and directories
//but there's no way to target directories without *
watchers.add(new FileSystemWatcher("**/*"));
String id = "as3mxml-language-server-" + Math.random();
DidChangeWatchedFilesRegistrationOptions options = new DidChangeWatchedFilesRegistrationOptions(watchers);
Registration registration = new Registration(id, "workspace/didChangeWatchedFiles", options);
List<Registration> registrations = new ArrayList<>();
registrations.add(registration);
RegistrationParams registrationParams = new RegistrationParams(registrations);
languageClient.registerCapability(registrationParams);
}
//we can't notify the client about problems until we receive this
//initialized notification. this is the first time that we'll start
//checking for errors.
actionScriptServices.setInitialized();
}
private String toString(List<FileSystemWatcher> watchers) {
return watchers.stream().map(FileSystemWatcher::getGlobPattern).collect(Collectors.joining("\n"));
}
public DidChangeWatchedFilesRegistrationOptions(@NonNull final List<FileSystemWatcher> watchers) {
this.watchers = Preconditions.<List<FileSystemWatcher>>checkNotNull(watchers, "watchers");
}
/**
* The watchers to register.
*/
@Pure
@NonNull
public List<FileSystemWatcher> getWatchers() {
return this.watchers;
}
/**
* The watchers to register.
*/
public void setWatchers(@NonNull final List<FileSystemWatcher> watchers) {
this.watchers = Preconditions.checkNotNull(watchers, "watchers");
}
/**
* Update the watcher patterns.
*/
List<FileSystemWatcher> registerWatchers();