Skip to content

Commit

Permalink
Adding support for workspace/symbol to both the LSP client and Java L…
Browse files Browse the repository at this point in the history
…SP server.
  • Loading branch information
jlahoda authored Nov 17, 2020
1 parent f3d44fd commit c954f48
Show file tree
Hide file tree
Showing 22 changed files with 1,607 additions and 383 deletions.
18 changes: 17 additions & 1 deletion cpplite/cpplite.editor/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
<code-name-base>org.netbeans.modules.cpplite.editor</code-name-base>
<module-dependencies>
<dependency>
<code-name-base>org.netbeans.api.java.classpath</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.63</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.api.templates</code-name-base>
<build-prerequisite/>
Expand Down Expand Up @@ -66,7 +75,6 @@
<compile-dependency/>
<run-dependency>
<release-version>0</release-version>
<!--<implementation-version/>-->
</run-dependency>
</dependency>
<dependency>
Expand All @@ -78,6 +86,14 @@
<specification-version>1.52</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.parsing.indexing</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>9.17</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.projectapi</code-name-base>
<build-prerequisite/>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.cpplite.editor;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.modules.cpplite.editor.file.MIMETypes;
import org.netbeans.modules.parsing.spi.indexing.PathRecognizer;
import org.openide.util.lookup.ServiceProvider;

@ServiceProvider(service=PathRecognizer.class)
public class PathRecognizerImpl extends PathRecognizer{

@Override
public Set<String> getSourcePathIds() {
return Collections.singleton(ClassPath.SOURCE);
}

@Override
public Set<String> getLibraryPathIds() {
return Collections.emptySet();
}

@Override
public Set<String> getBinaryLibraryPathIds() {
return Collections.emptySet();
}

@Override
public Set<String> getMimeTypes() {
return new HashSet<>(Arrays.asList(MIMETypes.C, MIMETypes.CPP, MIMETypes.H, MIMETypes.HPP));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ public class LanguageServerImpl implements LanguageServerProvider {

private static final Logger LOG = Logger.getLogger(LanguageServerImpl.class.getName());

private Map<Project, LanguageServerDescription> prj2Server = new HashMap<>();
private static final Map<Project, LanguageServerDescription> prj2Server = new HashMap<>();

@Override
public LanguageServerDescription startServer(Lookup lookup) {
Expand Down Expand Up @@ -117,8 +117,18 @@ public void stateChanged(ChangeEvent e) {
command.add("--clang-tidy");
command.add("--completion-style=detailed");
}
Process process = new ProcessBuilder(command).redirectError(Redirect.INHERIT).start();
return LanguageServerDescription.create(new CopyInput(process.getInputStream(), System.err), new CopyOutput(process.getOutputStream(), System.err), process);
ProcessBuilder builder = new ProcessBuilder(command);
if (LOG.isLoggable(Level.FINEST)) {
builder.redirectError(Redirect.INHERIT);
}
Process process = builder.start();
InputStream in = process.getInputStream();
OutputStream out = process.getOutputStream();
if (LOG.isLoggable(Level.FINEST)) {
in = new CopyInput(in, System.err);
out = new CopyOutput(out, System.err);
}
return LanguageServerDescription.create(in, out, process);
}
return null;
} catch (IOException ex) {
Expand Down
9 changes: 9 additions & 0 deletions cpplite/cpplite.project/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@
<data xmlns="http://www.netbeans.org/ns/nb-module-project/3">
<code-name-base>org.netbeans.modules.cpplite.project</code-name-base>
<module-dependencies>
<dependency>
<code-name-base>org.netbeans.api.java.classpath</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.63</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.api.templates</code-name-base>
<build-prerequisite/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,24 @@
*/
package org.netbeans.modules.cpplite.project;

import java.beans.PropertyChangeListener;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicReference;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import javax.swing.Icon;
import org.netbeans.api.java.classpath.ClassPath;
import org.netbeans.api.java.classpath.GlobalPathRegistry;
import org.netbeans.api.project.Project;
import org.netbeans.api.project.ProjectInformation;
import org.netbeans.api.project.ProjectManager;
import org.netbeans.modules.cpplite.project.ui.customizer.CustomizerProviderImpl;
import org.netbeans.spi.java.classpath.support.ClassPathSupport;
import org.netbeans.spi.project.ProjectFactory;
import org.netbeans.spi.project.ProjectFactory2;
import org.netbeans.spi.project.ProjectState;
import org.netbeans.spi.project.ui.PrivilegedTemplates;
import org.netbeans.spi.project.ui.ProjectOpenedHook;
import org.netbeans.spi.project.ui.RecommendedTemplates;
import org.openide.filesystems.FileObject;
import org.openide.util.ImageUtilities;
Expand Down Expand Up @@ -92,6 +99,8 @@ private CPPLiteProject(FileObject projectDirectory) {
new CPPLiteCProjectConfigurationProvider(getRootPreferences(projectDirectory)),
new RecommendedTemplatesImpl(),
new PrivilegedTemplatesImpl(),
new ProjectInfo(this),
new ProjectOpenHookImpl(this),
this);
buildConfigurations.set(BuildConfiguration.read(getBuildPreferences(projectDirectory)));
}
Expand Down Expand Up @@ -130,14 +139,18 @@ public void setCompileCommandsExecutable(String compileCommandsExecutable) {
getRootPreferences(projectDirectory).put(KEY_COMPILE_COMMANDS_EXECUTABLE, compileCommandsExecutable);
}

private static Icon loadProjectIcon() {
return ImageUtilities.image2Icon(ImageUtilities.loadImage("org/netbeans/modules/cpplite/project/resources/project.gif"));
}

@ServiceProvider(service=ProjectFactory.class)
public static final class FactoryImpl implements ProjectFactory2 {

@Override
public ProjectManager.Result isProject2(FileObject projectDirectory) {
Preferences prefs = getRootPreferences(projectDirectory, false);
if (prefs != null && prefs.getBoolean(KEY_IS_PROJECT, false)) {
return new ProjectManager.Result(ImageUtilities.image2Icon(ImageUtilities.loadImage("org/netbeans/modules/cpplite/project/resources/project.gif")));
return new ProjectManager.Result(loadProjectIcon());
}
return null;
}
Expand Down Expand Up @@ -187,4 +200,60 @@ public String[] getPrivilegedTemplates() {
return TEMPLATES;
}
}

private static final class ProjectInfo implements ProjectInformation {

private final Project prj;

public ProjectInfo(Project prj) {
this.prj = prj;
}

@Override
public String getName() {
return prj.getProjectDirectory().getNameExt();
}

@Override
public String getDisplayName() {
return prj.getProjectDirectory().getNameExt();
}

@Override
public Icon getIcon() {
return loadProjectIcon();
}

@Override
public Project getProject() {
return prj;
}

@Override
public void addPropertyChangeListener(PropertyChangeListener listener) {}

@Override
public void removePropertyChangeListener(PropertyChangeListener listener) {}

}

private static final class ProjectOpenHookImpl extends ProjectOpenedHook {

private final ClassPath source;

public ProjectOpenHookImpl(Project prj) {
this.source = ClassPathSupport.createClassPath(prj.getProjectDirectory());
}

@Override
protected void projectOpened() {
GlobalPathRegistry.getDefault().register(ClassPath.SOURCE, new ClassPath[] {source});
}

@Override
protected void projectClosed() {
GlobalPathRegistry.getDefault().unregister(ClassPath.SOURCE, new ClassPath[] {source});
}

}
}
17 changes: 17 additions & 0 deletions ide/lsp.client/nbproject/project.xml
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,15 @@
<specification-version>1.72</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.jumpto</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<release-version>1</release-version>
<specification-version>1.64</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.lexer</code-name-base>
<build-prerequisite/>
Expand All @@ -182,6 +191,14 @@
<specification-version>1.51</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.parsing.indexing</code-name-base>
<build-prerequisite/>
<compile-dependency/>
<run-dependency>
<specification-version>9.17</specification-version>
</run-dependency>
</dependency>
<dependency>
<code-name-base>org.netbeans.modules.projectapi</code-name-base>
<build-prerequisite/>
Expand Down
Loading

0 comments on commit c954f48

Please sign in to comment.