Search in sources :

Example 1 with IJavaProject

use of org.springframework.ide.vscode.commons.java.IJavaProject in project sts4 by spring-projects.

the class MavenProjectCacheTest method testPomFileChanges.

@Test
public void testPomFileChanges() throws Exception {
    MavenProjectCache cache = new MavenProjectCache(server, MavenCore.getDefault(), false, null);
    IJavaProject[] projectChanged = new IJavaProject[] { null };
    IJavaProject[] projectDeleted = new IJavaProject[] { null };
    cache.addListener(new Listener() {

        @Override
        public void created(IJavaProject project) {
        }

        @Override
        public void changed(IJavaProject project) {
            projectChanged[0] = project;
        }

        @Override
        public void deleted(IJavaProject project) {
            projectDeleted[0] = project;
        }
    });
    // Get the project from cache
    MavenJavaProject cachedProject = cache.project(pomFile);
    assertNotNull(cachedProject);
    ImmutableList<Path> calculatedClassPath = cachedProject.getClasspath().getClasspathEntries();
    assertEquals(48, calculatedClassPath.size());
    fileObserver.notifyFileChanged(pomFile.toURI().toString());
    assertNull(projectChanged[0]);
    writeContent(pomFile, new String(Files.readAllBytes(testProjectPath.resolve("pom.newxml")), Charset.defaultCharset()));
    fileObserver.notifyFileChanged(pomFile.toURI().toString());
    assertNotNull(projectChanged[0]);
    assertEquals(cachedProject, projectChanged[0]);
    calculatedClassPath = cachedProject.getClasspath().getClasspathEntries();
    assertEquals(49, calculatedClassPath.size());
    fileObserver.notifyFileDeleted(pomFile.toURI().toString());
    assertEquals(cachedProject, projectDeleted[0]);
}
Also used : Path(java.nio.file.Path) MavenProjectCache(org.springframework.ide.vscode.commons.maven.java.MavenProjectCache) IJavaProject(org.springframework.ide.vscode.commons.java.IJavaProject) Listener(org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver.Listener) MavenJavaProject(org.springframework.ide.vscode.commons.maven.java.MavenJavaProject) Test(org.junit.Test)

Example 2 with IJavaProject

use of org.springframework.ide.vscode.commons.java.IJavaProject in project sts4 by spring-projects.

the class SpringIndexer method getClasspathEntries.

private String[] getClasspathEntries(IJavaProject project) throws Exception {
    IClasspath classpath = project.getClasspath();
    Stream<Path> classpathEntries = classpath.getClasspathEntries().stream();
    return classpathEntries.filter(path -> path.toFile().exists()).map(path -> path.toAbsolutePath().toString()).toArray(String[]::new);
}
Also used : Path(java.nio.file.Path) Arrays(java.util.Arrays) CompilationUnit(org.eclipse.jdt.core.dom.CompilationUnit) SymbolProvider(org.springframework.ide.vscode.boot.java.handlers.SymbolProvider) LoggerFactory(org.slf4j.LoggerFactory) TextDocumentIdentifier(org.eclipse.lsp4j.TextDocumentIdentifier) FileASTRequestor(org.eclipse.jdt.core.dom.FileASTRequestor) ASTVisitor(org.eclipse.jdt.core.dom.ASTVisitor) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Map(java.util.Map) Location(org.eclipse.lsp4j.Location) AnnotationHierarchyAwareLookup(org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchyAwareLookup) URI(java.net.URI) Path(java.nio.file.Path) ExceptionUtil(org.springframework.ide.vscode.commons.util.ExceptionUtil) Predicate(java.util.function.Predicate) SymbolAddOnInformation(org.springframework.ide.vscode.boot.java.handlers.SymbolAddOnInformation) Collection(java.util.Collection) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) BlockingQueue(java.util.concurrent.BlockingQueue) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Collectors(java.util.stream.Collectors) EnhancedSymbolInformation(org.springframework.ide.vscode.boot.java.handlers.EnhancedSymbolInformation) List(java.util.List) Stream(java.util.stream.Stream) ASTParser(org.eclipse.jdt.core.dom.ASTParser) WorkspaceFolder(org.eclipse.lsp4j.WorkspaceFolder) AST(org.eclipse.jdt.core.dom.AST) Optional(java.util.Optional) SimpleWorkspaceService(org.springframework.ide.vscode.commons.languageserver.util.SimpleWorkspaceService) SingleMemberAnnotation(org.eclipse.jdt.core.dom.SingleMemberAnnotation) MethodDeclaration(org.eclipse.jdt.core.dom.MethodDeclaration) SimpleLanguageServer(org.springframework.ide.vscode.commons.languageserver.util.SimpleLanguageServer) MarkerAnnotation(org.eclipse.jdt.core.dom.MarkerAnnotation) JavaProjectFinder(org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder) SymbolKind(org.eclipse.lsp4j.SymbolKind) BootLanguageServerParams(org.springframework.ide.vscode.boot.BootLanguageServerParams) IJavaProject(org.springframework.ide.vscode.commons.java.IJavaProject) ProjectObserver(org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver) CompletableFuture(java.util.concurrent.CompletableFuture) AtomicReference(java.util.concurrent.atomic.AtomicReference) ArrayList(java.util.ArrayList) ConcurrentMap(java.util.concurrent.ConcurrentMap) SymbolInformation(org.eclipse.lsp4j.SymbolInformation) StringUtil(org.springframework.ide.vscode.commons.util.StringUtil) ImmutableList(com.google.common.collect.ImmutableList) Annotation(org.eclipse.jdt.core.dom.Annotation) AnnotationHierarchies(org.springframework.ide.vscode.boot.java.annotations.AnnotationHierarchies) UriUtil(org.springframework.ide.vscode.commons.util.UriUtil) NormalAnnotation(org.eclipse.jdt.core.dom.NormalAnnotation) IClasspath(org.springframework.ide.vscode.commons.java.IClasspath) LanguageId(org.springframework.ide.vscode.commons.util.text.LanguageId) TypeDeclaration(org.eclipse.jdt.core.dom.TypeDeclaration) Logger(org.slf4j.Logger) Files(java.nio.file.Files) JavaCore(org.eclipse.jdt.core.JavaCore) Futures(org.springframework.ide.vscode.commons.util.Futures) FileUtils(org.apache.commons.io.FileUtils) TextDocument(org.springframework.ide.vscode.commons.util.text.TextDocument) File(java.io.File) ITypeBinding(org.eclipse.jdt.core.dom.ITypeBinding) Listener(org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver.Listener) Paths(java.nio.file.Paths) Collections(java.util.Collections) IClasspath(org.springframework.ide.vscode.commons.java.IClasspath)

Example 3 with IJavaProject

use of org.springframework.ide.vscode.commons.java.IJavaProject in project sts4 by spring-projects.

the class SpringIndexer method createDocument.

public CompletableFuture<Void> createDocument(String docURI) {
    synchronized (this) {
        if (docURI.endsWith(".java") && lastInitializeItem != null) {
            try {
                Optional<IJavaProject> maybeProject = projectFinder.find(new TextDocumentIdentifier(docURI));
                if (maybeProject.isPresent()) {
                    String[] classpathEntries = getClasspathEntries(maybeProject.get());
                    String content = FileUtils.readFileToString(new File(new URI(docURI)));
                    UpdateItem updateItem = new UpdateItem(docURI, content, classpathEntries);
                    updateQueue.put(updateItem);
                    return updateItem.getFuture();
                }
            } catch (Exception e) {
                log.error("", e);
                return Futures.error(e);
            }
        }
    }
    return CompletableFuture.completedFuture(null);
}
Also used : TextDocumentIdentifier(org.eclipse.lsp4j.TextDocumentIdentifier) IJavaProject(org.springframework.ide.vscode.commons.java.IJavaProject) File(java.io.File) URI(java.net.URI)

Example 4 with IJavaProject

use of org.springframework.ide.vscode.commons.java.IJavaProject in project sts4 by spring-projects.

the class CompilationUnitCache method getClasspathEntries.

private static String[] getClasspathEntries(TextDocument document, IJavaProject project) throws Exception {
    if (project == null) {
        return new String[0];
    } else {
        IClasspath classpath = project.getClasspath();
        Stream<Path> classpathEntries = classpath.getClasspathEntries().stream();
        return classpathEntries.filter(path -> path.toFile().exists()).map(path -> path.toAbsolutePath().toString()).toArray(String[]::new);
    }
}
Also used : Path(java.nio.file.Path) SimpleTextDocumentService(org.springframework.ide.vscode.commons.languageserver.util.SimpleTextDocumentService) CompilationUnit(org.eclipse.jdt.core.dom.CompilationUnit) WriteLock(java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock) JavaProjectFinder(org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder) Log(org.springframework.ide.vscode.commons.util.Log) IJavaProject(org.springframework.ide.vscode.commons.java.IJavaProject) JavaCore(org.eclipse.jdt.core.JavaCore) ProjectObserver(org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver) Set(java.util.Set) ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) ReadLock(java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock) Function(java.util.function.Function) TextDocument(org.springframework.ide.vscode.commons.util.text.TextDocument) HashSet(java.util.HashSet) Stream(java.util.stream.Stream) ASTParser(org.eclipse.jdt.core.dom.ASTParser) Map(java.util.Map) AST(org.eclipse.jdt.core.dom.AST) URI(java.net.URI) CacheBuilder(com.google.common.cache.CacheBuilder) Cache(com.google.common.cache.Cache) Path(java.nio.file.Path) IClasspath(org.springframework.ide.vscode.commons.java.IClasspath) IClasspath(org.springframework.ide.vscode.commons.java.IClasspath)

Example 5 with IJavaProject

use of org.springframework.ide.vscode.commons.java.IJavaProject in project sts4 by spring-projects.

the class CompilationUnitCache method withCompilationUnit.

/**
 * Retrieves a CompiationUnitn AST from the cache and passes it to a requestor callback, applying
 * proper thread synchronization around the requestor.
 * <p>
 * Warning: Callers should take care to do all AST processing inside of the requestor callback and
 * not pass of AST nodes to helper functions that work aynchronously or store AST nodes or ITypeBindings
 * for later use. The JDT ASTs are not thread safe!
 */
public <T> T withCompilationUnit(TextDocument document, Function<CompilationUnit, T> requestor) {
    URI uri = URI.create(document.getUri());
    IJavaProject project = projectFinder.find(document.getId()).orElse(null);
    if (project != null) {
        readLock.lock();
        CompilationUnit cu = null;
        try {
            cu = uriToCu.get(uri, () -> {
                CompilationUnit cUnit = parse(document, project);
                projectToDocs.get(project, () -> new HashSet<>()).add(URI.create(document.getUri()));
                return cUnit;
            });
            if (cu != null) {
                projectToDocs.get(project, () -> new HashSet<>()).add(URI.create(document.getUri()));
            }
        } catch (Exception e) {
            Log.log(e);
        } finally {
            readLock.unlock();
        }
        if (cu != null) {
            try {
                synchronized (cu.getAST()) {
                    return requestor.apply(cu);
                }
            } catch (Exception e) {
                Log.log(e);
            }
        }
    }
    return requestor.apply(null);
}
Also used : CompilationUnit(org.eclipse.jdt.core.dom.CompilationUnit) IJavaProject(org.springframework.ide.vscode.commons.java.IJavaProject) URI(java.net.URI) HashSet(java.util.HashSet)

Aggregations

IJavaProject (org.springframework.ide.vscode.commons.java.IJavaProject)63 Test (org.junit.Test)52 AbstractPropsEditorTest (org.springframework.ide.vscode.boot.editor.harness.AbstractPropsEditorTest)35 Editor (org.springframework.ide.vscode.languageserver.testharness.Editor)24 CompilationUnit (org.eclipse.jdt.core.dom.CompilationUnit)8 Ignore (org.junit.Ignore)8 IClasspath (org.springframework.ide.vscode.commons.java.IClasspath)7 TextDocument (org.springframework.ide.vscode.commons.util.text.TextDocument)7 File (java.io.File)6 Path (java.nio.file.Path)6 TextDocumentIdentifier (org.eclipse.lsp4j.TextDocumentIdentifier)6 URI (java.net.URI)5 Map (java.util.Map)5 Listener (org.springframework.ide.vscode.commons.languageserver.java.ProjectObserver.Listener)5 Stream (java.util.stream.Stream)4 JavaCore (org.eclipse.jdt.core.JavaCore)4 AST (org.eclipse.jdt.core.dom.AST)4 ASTParser (org.eclipse.jdt.core.dom.ASTParser)4 JavaProjectFinder (org.springframework.ide.vscode.commons.languageserver.java.JavaProjectFinder)4 List (java.util.List)3