From 05031d309617288b66320a0bea46d8f558128930 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Thu, 8 Aug 2024 20:16:59 +0200 Subject: [PATCH 01/11] Revert "ErrorProviderBridge exposes content of ErrorProviders to NetBeans IDE" This reverts commit 557c823ba5244c6d67262eca3ce27d22bc07fc78. --- .../client/bindings/ErrorProviderBridge.java | 115 --------------- ...xtDocumentSyncServerCapabilityHandler.java | 21 +-- .../bindings/ErrorProviderBridgeTest.java | 139 ------------------ .../hints/lsp/HintsDiagnosticsProvider.java | 6 +- .../infrastructure/JavaErrorProvider.java | 7 +- .../modules/nbcode/integration/layer.xml | 13 -- .../protocol/TextDocumentServiceImpl.java | 5 +- .../unit/src/META-INF/generated-layer.xml | 10 -- 8 files changed, 10 insertions(+), 306 deletions(-) delete mode 100644 ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridge.java delete mode 100644 ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridgeTest.java diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridge.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridge.java deleted file mode 100644 index cf6778f073d1..000000000000 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridge.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * 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.lsp.client.bindings; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.text.Document; -import org.netbeans.api.lsp.Diagnostic; -import org.netbeans.spi.editor.hints.ErrorDescription; -import org.netbeans.spi.editor.hints.ErrorDescriptionFactory; -import org.netbeans.spi.editor.hints.HintsController; -import org.netbeans.spi.editor.hints.Severity; -import org.netbeans.spi.lsp.ErrorProvider; -import org.openide.filesystems.FileObject; -import org.openide.util.RequestProcessor; -import org.openide.util.WeakListeners; - -class ErrorProviderBridge implements Runnable, DocumentListener { - - private final FileObject file; - private final RequestProcessor.Task task; - private final Collection errorProviders; - private final DocumentListener listener; - - ErrorProviderBridge(Document doc, FileObject file, Collection errorProviders, RequestProcessor rp) { - this.file = file; - this.errorProviders = errorProviders; - this.task = rp.create(this); - this.listener = WeakListeners.create(DocumentListener.class, this, doc); - doc.addDocumentListener(listener); - } - - final void start() { - task.schedule(0); - } - - final void waitFinished() { - task.waitFinished(); - } - - @Override - public final void run() { - for (ErrorProvider p : errorProviders) { - computeHints(ErrorProvider.Kind.ERRORS, p, "lsp:errors"); - computeHints(ErrorProvider.Kind.HINTS, p, "lsp:hints"); - } - } - - private void computeHints(final ErrorProvider.Kind type, ErrorProvider p, final String prefix) { - List arr = new ArrayList<>(); - ErrorProvider.Context errorCtx = new ErrorProvider.Context(file, type); - List errors = p.computeErrors(errorCtx); - if (errors != null) { - for (Diagnostic e : errors) { - final Severity s; - switch(e.getSeverity()) { - case Error: - s = Severity.ERROR; break; - case Warning: - s = Severity.WARNING; break; - case Information: - case Hint: - default: - s = Severity.HINT; break; - } - ErrorDescription descr = ErrorDescriptionFactory.createErrorDescription(s, - e.getDescription(), - file, - e.getStartPosition().getOffset(), - e.getEndPosition().getOffset() - ); - arr.add(descr); - } - applyHints(prefix, p, arr); - } - } - - protected void applyHints(final String prefix, ErrorProvider p, List arr) { - HintsController.setErrors(file, prefix + ":" + p.getClass().getName(), arr); - } - - @Override - public final void insertUpdate(DocumentEvent e) { - start(); - } - - @Override - public final void removeUpdate(DocumentEvent e) { - start(); - } - - @Override - public final void changedUpdate(DocumentEvent e) { - start(); - } -} diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java index 496828357f67..2659afddcf67 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/TextDocumentSyncServerCapabilityHandler.java @@ -20,7 +20,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.IdentityHashMap; @@ -48,24 +47,16 @@ import org.eclipse.lsp4j.VersionedTextDocumentIdentifier; import org.eclipse.lsp4j.jsonrpc.messages.Either; import org.netbeans.api.editor.EditorRegistry; -import org.netbeans.api.editor.mimelookup.MimeLookup; -import org.netbeans.api.lsp.Diagnostic; import org.netbeans.editor.BaseDocumentEvent; import org.netbeans.lib.editor.util.swing.DocumentUtilities; import org.netbeans.modules.editor.*; import org.netbeans.modules.lsp.client.LSPBindings; import org.netbeans.modules.lsp.client.Utils; -import org.netbeans.spi.editor.hints.ErrorDescription; -import org.netbeans.spi.editor.hints.ErrorDescriptionFactory; -import org.netbeans.spi.editor.hints.HintsController; -import org.netbeans.spi.editor.hints.Severity; -import org.netbeans.spi.lsp.ErrorProvider; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.modules.OnStart; import org.openide.text.NbDocument; import org.openide.util.Exceptions; -import org.openide.util.Lookup; import org.openide.util.RequestProcessor; /** @@ -331,16 +322,8 @@ private void registerBackgroundTasks(JTextComponent c) { LSPBindings server = LSPBindings.getBindings(file); - if (server == null) { - Lookup lkp = MimeLookup.getLookup(file.getMIMEType()); - Collection errorProviders = lkp.lookupAll(ErrorProvider.class); - if (!errorProviders.isEmpty()) { - ErrorProviderBridge b = new ErrorProviderBridge(doc, file, errorProviders, WORKER); - b.start(); - c.putClientProperty(ErrorProviderBridge.class, b); - } - return; - } + if (server == null) + return ; //ignore SwingUtilities.invokeLater(() -> { if (c.getClientProperty(MarkOccurrences.class) == null) { diff --git a/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridgeTest.java b/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridgeTest.java deleted file mode 100644 index 287ed3dde392..000000000000 --- a/ide/lsp.client/test/unit/src/org/netbeans/modules/lsp/client/bindings/ErrorProviderBridgeTest.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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.lsp.client.bindings; - -import java.lang.ref.Reference; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import javax.swing.JTextArea; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.JTextComponent; -import org.junit.Test; -import static org.junit.Assert.*; -import org.netbeans.api.lsp.Diagnostic; -import org.netbeans.junit.NbTestCase; -import org.netbeans.spi.editor.hints.ErrorDescription; -import org.netbeans.spi.lsp.ErrorProvider; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.RequestProcessor; - -public class ErrorProviderBridgeTest { - - public ErrorProviderBridgeTest() { - } - - @Test - public void testListeningAndLifecycle() throws Exception { - JTextComponent c = new JTextArea(); - FileObject file = FileUtil.createMemoryFileSystem().getRoot().createData("c.txt"); - RequestProcessor rp = new RequestProcessor("ErrorProviderBridgeTest"); - MockErrorProvider mp = new MockErrorProvider(c); - - List> appliedDescriptions = new ArrayList<>(); - ErrorProviderBridge b = new ErrorProviderBridge(c.getDocument(), file, Collections.singleton(mp), rp) { - @Override - protected void applyHints(String prefix, org.netbeans.spi.lsp.ErrorProvider p, List arr) { - if (prefix.equals("lsp:errors")) { - appliedDescriptions.add(arr); - } - } - }; - - b.start(); - b.waitFinished(); - - assertEquals("One set of errors reported", 1, appliedDescriptions.size()); - assertTrue("It is empty so far", appliedDescriptions.remove(0).isEmpty()); - - c.getDocument().insertString(0, "Ahoj\nERR\nOK", null); - b.waitFinished(); - - { - assertEquals("Another set of errors reported", 1, appliedDescriptions.size()); - final List errors = appliedDescriptions.remove(0); - assertEquals("There is one error", 1, errors.size()); - ErrorDescription descr = errors.get(0); - assertEquals("Starts right", 5, descr.getRange().getBegin().getOffset()); - assertEquals("Ends right", 8, descr.getRange().getEnd().getOffset()); - } - - c.getDocument().remove(0, 5); - b.waitFinished(); - - { - assertEquals("Yet another set of errors reported", 1, appliedDescriptions.size()); - final List errors = appliedDescriptions.remove(0); - assertEquals("There is one error", 1, errors.size()); - ErrorDescription descr = errors.get(0); - assertEquals("Starts right", 0, descr.getRange().getBegin().getOffset()); - assertEquals("Ends right", 3, descr.getRange().getEnd().getOffset()); - } - - Reference ref = new WeakReference<>(c); - c = null; - mp = null; - - NbTestCase.assertGC("Component can disappear", ref); - - ref = new WeakReference<>(b); - b = null; - NbTestCase.assertGC("Bridge can disappear", ref); - } - - private static final class MockErrorProvider implements ErrorProvider { - - private final Reference c; - - MockErrorProvider(JTextComponent c) { - this.c = new WeakReference<>(c); - } - - @Override - public List computeErrors(Context context) { - List arr = new ArrayList<>(); - JTextComponent tmp = c.get(); - if (tmp == null) { - return arr; - } - Document doc = tmp.getDocument(); - try { - String txt = doc.getText(0, doc.getLength()); - for (int from = -1;;) { - int at = txt.indexOf("ERR", from + 1); - if (at == -1) { - break; - } - Diagnostic d = Diagnostic.Builder.create(() -> at, () -> at + 3, "at" + at) - .setSeverity(Diagnostic.Severity.Error) - .build(); - arr.add(d); - from = at; - } - } catch (BadLocationException ex) { - throw new IllegalStateException(ex); - } - return arr; - } - - } -} diff --git a/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/lsp/HintsDiagnosticsProvider.java b/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/lsp/HintsDiagnosticsProvider.java index 2ddfc5cfc3e8..bb44116320d2 100644 --- a/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/lsp/HintsDiagnosticsProvider.java +++ b/ide/spi.editor.hints/src/org/netbeans/modules/editor/hints/lsp/HintsDiagnosticsProvider.java @@ -22,6 +22,7 @@ import java.util.List; import javax.swing.text.Document; import org.netbeans.api.editor.document.LineDocument; +import org.netbeans.api.editor.mimelookup.MimeRegistration; import org.netbeans.api.lsp.Diagnostic; import org.netbeans.modules.editor.hints.AnnotationHolder; import org.netbeans.spi.editor.hints.ErrorDescription; @@ -33,15 +34,14 @@ /** * A simple implementation of {@link ErrorProvider} that converts errors + hints collected by * {@link HintsController} to LSP {@link Diagnostic}. The implementation does not support code actions yet. - * The implementation is registered by - * {@code java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml}. *

* As {@link ErrorProvider}s are registered in MIME Lookup, this implementation is enumerated after those * possibly registered for specific MIME types. * * @author sdedic */ -public final class HintsDiagnosticsProvider implements ErrorProvider { +@MimeRegistration(mimeType = "", service = ErrorProvider.class) +public class HintsDiagnosticsProvider implements ErrorProvider { public HintsDiagnosticsProvider() { } diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/infrastructure/JavaErrorProvider.java b/java/java.hints/src/org/netbeans/modules/java/hints/infrastructure/JavaErrorProvider.java index 303fad62c1eb..dc8feb768079 100644 --- a/java/java.hints/src/org/netbeans/modules/java/hints/infrastructure/JavaErrorProvider.java +++ b/java/java.hints/src/org/netbeans/modules/java/hints/infrastructure/JavaErrorProvider.java @@ -21,7 +21,6 @@ import com.sun.source.tree.CompilationUnitTree; import com.sun.source.tree.LineMap; import com.sun.source.util.TreePath; -import java.awt.GraphicsEnvironment; import java.io.File; import java.io.IOException; import java.util.ArrayList; @@ -83,18 +82,20 @@ import org.openide.util.Pair; import org.openide.util.Union2; -/** Provides errors and hints for VSCode. This class is abstract to - * be subclasses and registered by VSCode extension XML layer. +/** * * @author lahvac */ +@MimeRegistration(mimeType="text/x-java", service=ErrorProvider.class) public class JavaErrorProvider implements ErrorProvider { + public static final String HINTS_TOOL_ID = "hints"; public static Consumer computeDiagsCallback; //for tests @Override public List computeErrors(Context context) { List result = new ArrayList<>(); + try { ParserManager.parse(Collections.singletonList(Source.create(context.file())), new UserTask() { @Override diff --git a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml index 8141315be67c..bb577a6a8b10 100644 --- a/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml +++ b/java/java.lsp.server/nbcode/integration/src/org/netbeans/modules/nbcode/integration/layer.xml @@ -175,17 +175,4 @@ - - - - - - - - - - - - - diff --git a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java index d51967268a8b..c112b4eb73d7 100644 --- a/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java +++ b/java/java.lsp.server/src/org/netbeans/modules/java/lsp/server/protocol/TextDocumentServiceImpl.java @@ -1033,10 +1033,7 @@ public CompletableFuture>> codeAction(CodeActio continue; } } - Optional diag = diagnostics.stream().filter(d -> { - String code = d.getCode() != null ? d.getCode().getLeft() : null; - return entry.getKey().equals(code); - }).findFirst(); + Optional diag = diagnostics.stream().filter(d -> entry.getKey().equals(d.getCode().getLeft())).findFirst(); org.netbeans.api.lsp.Diagnostic.LazyCodeActions actions = err.getActions(); if (actions != null) { for (org.netbeans.api.lsp.CodeAction inputAction : actions.computeCodeActions(ex -> client.logMessage(new MessageParams(MessageType.Error, ex.getMessage())))) { diff --git a/java/java.lsp.server/test/unit/src/META-INF/generated-layer.xml b/java/java.lsp.server/test/unit/src/META-INF/generated-layer.xml index 84a2d34124f8..2f64f85e2fd5 100644 --- a/java/java.lsp.server/test/unit/src/META-INF/generated-layer.xml +++ b/java/java.lsp.server/test/unit/src/META-INF/generated-layer.xml @@ -14,14 +14,4 @@ - - - - - - - - - - From 06fe48934b1cbbfa424398dd3a54a081c3789181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Thu, 8 Aug 2024 20:17:10 +0200 Subject: [PATCH 02/11] Revert "Re-apply #7505 that was reverted by #7528 with additional resolved.getDocumentation() can be null" This reverts commit c7eda4fa3fdb670a012181f92a6e79df11811322. --- .../bindings/AbstractCompletionItem.java | 220 ------------------ .../bindings/CompletionProviderImpl.java | 199 +++++++++++++++- .../modules/lsp/client/bindings/Icons.java | 2 +- .../client/bindings/LspCompletionItem.java | 142 ----------- .../bindings/LspCompletionProviderImpl.java | 178 -------------- .../client/bindings/NavigatorPanelImpl.java | 13 ++ 6 files changed, 203 insertions(+), 551 deletions(-) delete mode 100644 ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/AbstractCompletionItem.java delete mode 100644 ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionItem.java delete mode 100644 ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionProviderImpl.java diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/AbstractCompletionItem.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/AbstractCompletionItem.java deleted file mode 100644 index 09bacb648747..000000000000 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/AbstractCompletionItem.java +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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.lsp.client.bindings; - -import java.awt.Color; -import java.awt.Font; -import java.awt.Graphics; -import java.awt.event.KeyEvent; -import java.net.URL; -import java.util.List; -import java.util.function.Supplier; -import javax.swing.Action; -import javax.swing.ImageIcon; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.JTextComponent; -import javax.swing.text.StyledDocument; -import org.netbeans.api.editor.completion.Completion; -import org.netbeans.editor.BaseDocument; -import org.netbeans.editor.Utilities; -import org.netbeans.spi.editor.completion.CompletionDocumentation; -import org.netbeans.spi.editor.completion.CompletionItem; -import org.netbeans.spi.editor.completion.CompletionResultSet; -import org.netbeans.spi.editor.completion.CompletionTask; -import org.netbeans.spi.editor.completion.support.AsyncCompletionQuery; -import org.netbeans.spi.editor.completion.support.AsyncCompletionTask; -import org.netbeans.spi.editor.completion.support.CompletionUtilities; -import org.openide.text.NbDocument; -import org.openide.util.Exceptions; - -abstract class AbstractCompletionItem implements CompletionItem { - private final Document doc; - private final int caretOffset; - private final String leftLabel; - private final String rightLabel; - private final ImageIcon icon; - private final String sortText; - private final String insert; - - AbstractCompletionItem( - Document doc, int caretOffset, String leftLabel, String rightLabel, - ImageIcon icon, String sortText, String insert - ) { - this.doc = doc; - this.caretOffset = caretOffset; - this.leftLabel = leftLabel; - this.rightLabel = rightLabel; - this.icon = icon; - this.sortText = sortText; - this.insert = insert; - } - - abstract Edit findEdit(boolean[] hideImmediately); - abstract int findStart(Document doc, Edit te); - abstract int findEnd(Document doc, Edit te); - abstract String findNewText(Edit te); - - abstract boolean isTextEdit(Edit te); - - abstract List getCommitCharacters(); - abstract boolean isTriggerCharacter(String ch); - abstract Supplier resolveDocumentation(Document doc, int caretOffset); - - @Override - public void defaultAction(JTextComponent jtc) { - commit(""); - } - - private void commit(String appendText) { - boolean[] hideNow = { false }; - Edit te = findEdit(hideNow); - if (hideNow[0]) { - Completion.get().hideDocumentation(); - Completion.get().hideCompletion(); - return; - } - NbDocument.runAtomic((StyledDocument) doc, () -> { - try { - int endPos; - if (isTextEdit(te)) { - int start = findStart(doc, te); - int end = findEnd(doc, te); - doc.remove(start, end - start); - String newText = findNewText(te); - doc.insertString(start, newText, null); - endPos = start + newText.length(); - } else { - String toAdd = insert; - int[] identSpan = Utilities.getIdentifierBlock((BaseDocument) doc, caretOffset); - if (identSpan != null) { - doc.remove(identSpan[0], identSpan[1] - identSpan[0]); - doc.insertString(identSpan[0], toAdd, null); - endPos = identSpan[0] + toAdd.length(); - } else { - doc.insertString(caretOffset, toAdd, null); - endPos = caretOffset + toAdd.length(); - } - } - doc.insertString(endPos, appendText, null); - } catch (BadLocationException ex) { - Exceptions.printStackTrace(ex); - } - }); - Completion.get().hideDocumentation(); - Completion.get().hideCompletion(); - } - - @Override - public void processKeyEvent(KeyEvent ke) { - if (ke.getID() == KeyEvent.KEY_TYPED) { - String commitText = String.valueOf(ke.getKeyChar()); - List commitCharacters = getCommitCharacters(); - if (commitCharacters != null && commitCharacters.contains(commitText)) { - commit(commitText); - ke.consume(); - if (isTriggerCharacter(commitText)) { - Completion.get().showCompletion(); - } - } - } - } - - @Override - public int getPreferredWidth(Graphics grphcs, Font font) { - return CompletionUtilities.getPreferredWidth(leftLabel, rightLabel, grphcs, font); - } - - @Override - public void render(Graphics grphcs, Font font, Color color, Color color1, int i, int i1, boolean bln) { - CompletionUtilities.renderHtml(icon, leftLabel, rightLabel, grphcs, font, color, i, i1, bln); - } - - @Override - public CompletionTask createDocumentationTask() { - return new AsyncCompletionTask(new AsyncCompletionQuery() { - @Override - protected void query(CompletionResultSet resultSet, Document doc, int caretOffset) { - Supplier resolved = resolveDocumentation(doc, caretOffset); - if (resolved != null) { - resultSet.setDocumentation(new CompletionDocumentation() { - @Override - public String getText() { - String[] both = resolved.get(); - String detail = both[0]; - String content = both[1]; - - StringBuilder documentation = new StringBuilder(); - documentation.append("\n"); - if (detail != null) { - documentation.append("").append(CompletionProviderImpl.escape(detail)).append(""); - documentation.append("\n

"); - } - if (content != null) { - documentation.append(content); - } - return documentation.toString(); - } - - @Override - public URL getURL() { - return null; - } - - @Override - public CompletionDocumentation resolveLink(String link) { - return null; - } - - @Override - public Action getGotoSourceAction() { - return null; - } - }); - } - resultSet.finish(); - } - }); - } - - @Override - public CompletionTask createToolTipTask() { - return null; - } - - @Override - public boolean instantSubstitution(JTextComponent jtc) { - return false; - } - - @Override - public int getSortPriority() { - return 100; - } - - @Override - public CharSequence getSortText() { - return sortText; - } - - @Override - public CharSequence getInsertPrefix() { - return insert; - } -} diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java index 8a6066485cb6..d4eb07445fc7 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/CompletionProviderImpl.java @@ -18,38 +18,56 @@ */ package org.netbeans.modules.lsp.client.bindings; +import com.vladsch.flexmark.html.HtmlRenderer; +import com.vladsch.flexmark.parser.Parser; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.event.KeyEvent; +import java.net.URL; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; +import javax.swing.Action; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JToolTip; import javax.swing.text.BadLocationException; import javax.swing.text.Document; import javax.swing.text.JTextComponent; +import javax.swing.text.StyledDocument; import org.eclipse.lsp4j.CompletionItem; import org.eclipse.lsp4j.CompletionItemKind; import org.eclipse.lsp4j.CompletionList; import org.eclipse.lsp4j.CompletionOptions; import org.eclipse.lsp4j.CompletionParams; import org.eclipse.lsp4j.InitializeResult; +import org.eclipse.lsp4j.InsertReplaceEdit; +import org.eclipse.lsp4j.MarkupContent; import org.eclipse.lsp4j.ParameterInformation; import org.eclipse.lsp4j.ServerCapabilities; import org.eclipse.lsp4j.SignatureHelp; import org.eclipse.lsp4j.SignatureHelpParams; import org.eclipse.lsp4j.SignatureInformation; import org.eclipse.lsp4j.TextDocumentIdentifier; +import org.eclipse.lsp4j.TextEdit; import org.eclipse.lsp4j.jsonrpc.messages.Either; +import org.netbeans.api.editor.completion.Completion; import org.netbeans.api.editor.mimelookup.MimeRegistration; +import org.netbeans.editor.BaseDocument; +import org.netbeans.editor.Utilities; import org.netbeans.modules.editor.NbEditorUtilities; import org.netbeans.modules.lsp.client.LSPBindings; import org.netbeans.modules.lsp.client.Utils; +import org.netbeans.spi.editor.completion.CompletionDocumentation; import org.netbeans.spi.editor.completion.CompletionProvider; import org.netbeans.spi.editor.completion.CompletionResultSet; import org.netbeans.spi.editor.completion.CompletionTask; import org.netbeans.spi.editor.completion.support.AsyncCompletionQuery; import org.netbeans.spi.editor.completion.support.AsyncCompletionTask; +import org.netbeans.spi.editor.completion.support.CompletionUtilities; import org.openide.filesystems.FileObject; +import org.openide.text.NbDocument; import org.openide.util.Exceptions; import org.openide.util.ImageUtilities; import org.openide.xml.XMLUtil; @@ -166,9 +184,172 @@ protected void query(CompletionResultSet resultSet, Document doc, int caretOffse CompletionItemKind kind = i.getKind(); Icon ic = Icons.getCompletionIcon(kind); ImageIcon icon = new ImageIcon(ImageUtilities.icon2Image(ic)); - resultSet.addItem(new LspCompletionItem(i, doc, caretOffset, server, leftLabel, rightLabel, icon, sortText, insert, this, org.netbeans.modules.lsp.client.bindings.CompletionProviderImpl.this)); + resultSet.addItem(new org.netbeans.spi.editor.completion.CompletionItem() { + @Override + public void defaultAction(JTextComponent jtc) { + commit(""); + } + private void commit(String appendText) { + Either edit = i.getTextEdit(); + if (edit != null && edit.isRight()) { + //TODO: the NetBeans client does not current support InsertReplaceEdits, should not happen + Completion.get().hideDocumentation(); + Completion.get().hideCompletion(); + return ; + } + TextEdit te = edit != null ? edit.getLeft() : null; + NbDocument.runAtomic((StyledDocument) doc, () -> { + try { + int endPos; + if (te != null) { + int start = Utils.getOffset(doc, te.getRange().getStart()); + int end = Utils.getOffset(doc, te.getRange().getEnd()); + doc.remove(start, end - start); + doc.insertString(start, te.getNewText(), null); + endPos = start + te.getNewText().length(); + } else { + String toAdd = i.getInsertText(); + if (toAdd == null) { + toAdd = i.getLabel(); + } + int[] identSpan = Utilities.getIdentifierBlock((BaseDocument) doc, caretOffset); + if (identSpan != null) { + doc.remove(identSpan[0], identSpan[1] - identSpan[0]); + doc.insertString(identSpan[0], toAdd, null); + endPos = identSpan[0] + toAdd.length(); + } else { + doc.insertString(caretOffset, toAdd, null); + endPos = caretOffset + toAdd.length(); + } + } + doc.insertString(endPos, appendText, null); + } catch (BadLocationException ex) { + Exceptions.printStackTrace(ex); + } + }); + Completion.get().hideDocumentation(); + Completion.get().hideCompletion(); + } + + @Override + public void processKeyEvent(KeyEvent ke) { + if (ke.getID() == KeyEvent.KEY_TYPED) { + String commitText = String.valueOf(ke.getKeyChar()); + List commitCharacters = i.getCommitCharacters(); + + if (commitCharacters != null && commitCharacters.contains(commitText)) { + commit(commitText); + ke.consume(); + if (isTriggerCharacter(server, commitText)) { + Completion.get().showCompletion(); + } + } + } + } + + @Override + public int getPreferredWidth(Graphics grphcs, Font font) { + return CompletionUtilities.getPreferredWidth(leftLabel, rightLabel, grphcs, font); + } + + @Override + public void render(Graphics grphcs, Font font, Color color, Color color1, int i, int i1, boolean bln) { + CompletionUtilities.renderHtml(icon, leftLabel, rightLabel, grphcs, font, color, i, i1, bln); + } + + @Override + public CompletionTask createDocumentationTask() { + return new AsyncCompletionTask(new AsyncCompletionQuery() { + @Override + protected void query(CompletionResultSet resultSet, Document doc, int caretOffset) { + CompletionItem resolved; + if ((i.getDetail() == null || i.getDocumentation() == null) && hasCompletionResolve(server)) { + CompletionItem temp; + try { + temp = server.getTextDocumentService().resolveCompletionItem(i).get(); + } catch (InterruptedException | ExecutionException ex) { + Exceptions.printStackTrace(ex); + temp = i; + } + resolved = temp; + } else { + resolved = i; + } + if (resolved.getDocumentation() != null || resolved.getDetail() != null) { + resultSet.setDocumentation(new CompletionDocumentation() { + @Override + public String getText() { + StringBuilder documentation = new StringBuilder(); + documentation.append("\n"); + if (resolved.getDetail() != null) { + documentation.append("").append(escape(resolved.getDetail())).append(""); + documentation.append("\n

"); + } + if (resolved.getDocumentation() != null) { + MarkupContent content; + if (resolved.getDocumentation().isLeft()) { + content = new MarkupContent(); + content.setKind("plaintext"); + content.setValue(resolved.getDocumentation().getLeft()); + } else { + content = resolved.getDocumentation().getRight(); + } + switch (content.getKind()) { + default: + case "plaintext": documentation.append("

\n").append(content.getValue()).append("\n
"); break; + case "markdown": documentation.append(HtmlRenderer.builder().build().render(Parser.builder().build().parse(content.getValue()))); break; + } + } + return documentation.toString(); + } + @Override + public URL getURL() { + return null; + } + @Override + public CompletionDocumentation resolveLink(String link) { + return null; + } + @Override + public Action getGotoSourceAction() { + return null; + } + }); + } + resultSet.finish(); + } + }); + } + + @Override + public CompletionTask createToolTipTask() { + return null; + } + + @Override + public boolean instantSubstitution(JTextComponent jtc) { + return false; + } + + @Override + public int getSortPriority() { + return 100; + } + + @Override + public CharSequence getSortText() { + return sortText; + } + + @Override + public CharSequence getInsertPrefix() { + return insert; + } + }); } - } catch (BadLocationException | InterruptedException | ExecutionException ex) { + } catch (BadLocationException | InterruptedException ex) { + Exceptions.printStackTrace(ex); + } catch (ExecutionException ex) { Exceptions.printStackTrace(ex); } finally { resultSet.finish(); @@ -176,19 +357,17 @@ protected void query(CompletionResultSet resultSet, Document doc, int caretOffse } }, component); } - - final boolean hasCompletionResolve(LSPBindings server) { + + private boolean hasCompletionResolve(LSPBindings server) { ServerCapabilities capabilities = server.getInitResult().getCapabilities(); - if (capabilities == null) { - return false; - } + if (capabilities == null) return false; CompletionOptions completionProvider = capabilities.getCompletionProvider(); if (completionProvider == null) return false; Boolean resolveProvider = completionProvider.getResolveProvider(); return resolveProvider != null && resolveProvider; } - static String escape(String s) { + private static String escape(String s) { if (s != null) { try { return XMLUtil.toAttributeValue(s); @@ -214,8 +393,8 @@ public int getAutoQueryTypes(JTextComponent component, String typedText) { } return isTriggerCharacter(server, typedText) ? COMPLETION_QUERY_TYPE : 0; } - - boolean isTriggerCharacter(LSPBindings server, String text) { + + private boolean isTriggerCharacter(LSPBindings server, String text) { InitializeResult init = server.getInitResult(); if (init == null) return false; ServerCapabilities capabilities = init.getCapabilities(); diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/Icons.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/Icons.java index ef7e909403c8..68e68c5176a9 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/Icons.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/Icons.java @@ -41,7 +41,7 @@ public final class Icons { private Icons() { } - public static Icon getCompletionIcon(Enum completionKind) { + public static Icon getCompletionIcon(CompletionItemKind completionKind) { Image img = null; if (completionKind != null) { diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionItem.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionItem.java deleted file mode 100644 index 606d413faab5..000000000000 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionItem.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * 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.lsp.client.bindings; - -import com.vladsch.flexmark.html.HtmlRenderer; -import com.vladsch.flexmark.parser.Parser; -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; -import javax.swing.ImageIcon; -import javax.swing.text.Document; -import org.eclipse.lsp4j.InsertReplaceEdit; -import org.eclipse.lsp4j.MarkupContent; -import org.eclipse.lsp4j.TextEdit; -import org.eclipse.lsp4j.jsonrpc.messages.Either; -import org.netbeans.modules.lsp.client.LSPBindings; -import org.netbeans.modules.lsp.client.Utils; -import org.netbeans.spi.editor.completion.support.AsyncCompletionQuery; -import org.openide.util.Exceptions; - -final class LspCompletionItem extends AbstractCompletionItem> { - private final org.eclipse.lsp4j.CompletionItem i; - private final LSPBindings server; - private final AsyncCompletionQuery outer; - private final CompletionProviderImpl cp; - - public LspCompletionItem( - org.eclipse.lsp4j.CompletionItem i, - Document doc, int caretOffset, LSPBindings server, - String leftLabel, String rightLabel, ImageIcon icon, String sortText, - String insert, - AsyncCompletionQuery outer, CompletionProviderImpl cp - ) { - super(doc, caretOffset, leftLabel, rightLabel, icon, sortText, insert); - this.cp = cp; - this.outer = outer; - this.i = i; - this.server = server; - } - - @Override - Either findEdit(boolean[] hideImmediately) { - Either edit = i.getTextEdit(); - if (edit != null && edit.isRight()) { - //TODO: the NetBeans client does not currently support InsertReplaceEdits, should not happen - hideImmediately[0] = true; - return null; - } - return edit; - } - - @Override - boolean isTextEdit(Either edit) { - return edit != null && edit.getLeft() != null; - } - - @Override - int findStart(Document doc, Either te) { - return Utils.getOffset(doc, te.getLeft().getRange().getStart()); - } - - @Override - int findEnd(Document doc, Either te) { - return Utils.getOffset(doc, te.getLeft().getRange().getEnd()); - } - - @Override - String findNewText(Either te) { - return te.getLeft().getNewText(); - } - - @Override - List getCommitCharacters() { - return i.getCommitCharacters(); - } - - @Override - boolean isTriggerCharacter(String commitText) { - return cp.isTriggerCharacter(server, commitText); - } - - @Override - Supplier resolveDocumentation(Document doc, int caretOffset) { - org.eclipse.lsp4j.CompletionItem resolved; - if ((i.getDetail() == null || i.getDocumentation() == null) && cp.hasCompletionResolve(server)) { - org.eclipse.lsp4j.CompletionItem temp; - try { - temp = server.getTextDocumentService().resolveCompletionItem(i).get(); - } catch (InterruptedException | ExecutionException ex) { - Exceptions.printStackTrace(ex); - temp = i; - } - resolved = temp; - } else { - resolved = i; - } - if (resolved.getDocumentation() != null || resolved.getDetail() != null) { - return () -> { - String txt; - if (resolved.getDocumentation() != null) { - MarkupContent content; - if (resolved.getDocumentation().isLeft()) { - content = new MarkupContent(); - content.setKind("plaintext"); - content.setValue(resolved.getDocumentation().getLeft()); - } else { - content = resolved.getDocumentation().getRight(); - } - switch (content.getKind()) { - case "markdown": - txt = HtmlRenderer.builder().build().render(Parser.builder().build().parse(content.getValue())); - break; - default: - txt = "
\n" + content.getValue() + "\n
"; - break; - } - } else { - txt = null; - } - return new String[] { resolved.getDetail(), txt }; - }; - } else { - return null; - } - } -} diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionProviderImpl.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionProviderImpl.java deleted file mode 100644 index 36444e3d5f19..000000000000 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/LspCompletionProviderImpl.java +++ /dev/null @@ -1,178 +0,0 @@ -/** - * 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.lsp.client.bindings; - -import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.function.Consumer; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.text.Document; -import javax.swing.text.JTextComponent; -import org.netbeans.api.editor.mimelookup.MimeLookup; -import org.netbeans.api.editor.mimelookup.MimeRegistration; -import org.netbeans.api.lsp.TextEdit; -import org.netbeans.modules.editor.NbEditorUtilities; -import org.netbeans.spi.editor.completion.CompletionProvider; -import org.netbeans.spi.editor.completion.CompletionResultSet; -import org.netbeans.spi.editor.completion.CompletionTask; -import org.netbeans.spi.editor.completion.support.AsyncCompletionQuery; -import org.netbeans.spi.editor.completion.support.AsyncCompletionTask; -import org.netbeans.spi.lsp.CompletionCollector; -import org.openide.filesystems.FileObject; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; - -@MimeRegistration(mimeType = "", service = CompletionProvider.class) -public class LspCompletionProviderImpl implements CompletionProvider { - - @Override - public CompletionTask createTask(int queryType, JTextComponent component) { - return new AsyncCompletionTask(new AsyncCompletionQuery() { - @Override - protected void query(CompletionResultSet resultSet, Document doc, int caretOffset) { - FileObject file = NbEditorUtilities.getFileObject(doc); - if (file == null) { - //TODO: beep - resultSet.finish(); - return; - } - final String mime = file.getMIMEType(); - for (Lookup.Item item : MimeLookup.getLookup(mime).lookupResult(CompletionProvider.class).allItems()) { - String id = item.getId(); - if (id.startsWith("Editors/"+ mime)) { - // found real CompletionProvider - don't bridge LSP API - resultSet.finish(); - return; - } - } - Consumer consumer = (i) -> { - String insert = i.getInsertText() != null ? i.getInsertText() : i.getLabel(); - String leftLabel = encode(i.getLabel()); - String rightLabel = null; - try { - if (i.getDetail() != null) { - rightLabel = encode(i.getDetail().get()); - } - } catch (InterruptedException | ExecutionException interruptedException) { - // leave null - } - String sortText = i.getSortText() != null ? i.getSortText() : i.getLabel(); - org.netbeans.api.lsp.Completion.Kind kind = i.getKind(); - Icon ic = Icons.getCompletionIcon(kind); - ImageIcon icon = new ImageIcon(ImageUtilities.icon2Image(ic)); - resultSet.addItem(new LspApiCompletionItem(i, doc, caretOffset, leftLabel, rightLabel, icon, sortText, insert)); - }; - org.netbeans.api.lsp.Completion.Context context = new org.netbeans.api.lsp.Completion.Context(org.netbeans.api.lsp.Completion.TriggerKind.Invoked, null); - for (CompletionCollector cc : MimeLookup.getLookup(mime).lookupAll(CompletionCollector.class)) { - cc.collectCompletions(doc, caretOffset, context, consumer); - } - resultSet.finish(); - } - }, component); - } - - private String encode(String str) { - return str.replace("&", "&") - .replace("<", "<"); - } - - @Override - public int getAutoQueryTypes(JTextComponent component, String typedText) { - FileObject file = NbEditorUtilities.getFileObject(component.getDocument()); - if (file == null) { - return 0; - } - return 0; - } - - private static class LspApiCompletionItem extends AbstractCompletionItem { - - private final org.netbeans.api.lsp.Completion i; - - public LspApiCompletionItem(org.netbeans.api.lsp.Completion i, Document doc, int caretOffset, String leftLabel, String rightLabel, ImageIcon icon, String sortText, String insert) { - super(doc, caretOffset, leftLabel, rightLabel, icon, sortText, insert); - this.i = i; - } - - @Override - TextEdit findEdit(boolean[] hideNow) { - return i.getTextEdit(); - } - - @Override - boolean isTextEdit(TextEdit te) { - return te != null; - } - - @Override - int findStart(Document doc, TextEdit te) { - return te.getStartOffset(); - } - - @Override - int findEnd(Document doc, TextEdit te) { - return te.getEndOffset(); - } - - @Override - String findNewText(TextEdit te) { - return te.getNewText(); - } - - @Override - List getCommitCharacters() { - return i.getCommitCharacters().stream().map(String::valueOf).collect(Collectors.toList()); - } - - @Override - boolean isTriggerCharacter(String commitText) { - return false; - } - - @Override - Supplier resolveDocumentation(Document doc, int caretOffset) { - if (i.getDetail() == null && i.getDocumentation() == null) { - return null; - } else { - return () -> { - String detail = null; - String documentation = null; - try { - if (i.getDetail() != null) { - detail = i.getDetail().get(); - } - } catch (InterruptedException | ExecutionException interruptedException) { - // leave null - } - try { - if (i.getDocumentation() != null) { - documentation = i.getDocumentation().get(); - } - } catch (InterruptedException | ExecutionException interruptedException) { - // leave null - } - return new String[]{detail, documentation}; - }; - } - } - } -} diff --git a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/NavigatorPanelImpl.java b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/NavigatorPanelImpl.java index c03162f7fbd9..bde41feae455 100644 --- a/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/NavigatorPanelImpl.java +++ b/ide/lsp.client/src/org/netbeans/modules/lsp/client/bindings/NavigatorPanelImpl.java @@ -18,13 +18,19 @@ */ package org.netbeans.modules.lsp.client.bindings; +import java.awt.BorderLayout; import java.awt.event.ActionEvent; +import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.AbstractAction; import javax.swing.Action; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; import org.eclipse.lsp4j.DocumentSymbol; import org.eclipse.lsp4j.DocumentSymbolParams; import org.eclipse.lsp4j.Range; @@ -34,10 +40,17 @@ import org.netbeans.modules.lsp.client.LSPBindings; import org.netbeans.modules.lsp.client.LSPBindings.BackgroundTask; import org.netbeans.modules.lsp.client.Utils; +import org.netbeans.spi.navigator.NavigatorPanel; +import org.openide.explorer.ExplorerManager; +import org.openide.explorer.view.BeanTreeView; import org.openide.filesystems.FileObject; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; +import org.openide.util.Lookup; +import org.openide.util.LookupEvent; +import org.openide.util.LookupListener; +import org.openide.util.NbBundle.Messages; /** * From 1f6b3af32542b4dfc5f97c5cf7074ec8abeadc24 Mon Sep 17 00:00:00 2001 From: Martin Balin Date: Mon, 12 Aug 2024 13:35:00 +0200 Subject: [PATCH 03/11] VSNetBeans 23.0 release changelog and README upd. --- java/java.lsp.server/vscode/CHANGELOG.md | 8 ++++++++ java/java.lsp.server/vscode/README.md | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/java/java.lsp.server/vscode/CHANGELOG.md b/java/java.lsp.server/vscode/CHANGELOG.md index f305e83d8a96..248f50d62aa1 100644 --- a/java/java.lsp.server/vscode/CHANGELOG.md +++ b/java/java.lsp.server/vscode/CHANGELOG.md @@ -20,6 +20,14 @@ under the License. --> +## Version 23.0.0 +* JDK can be set per project, new setting: `netbeans.project.jdkhome` +* Micronaut: + * Source action to generate tests for endpoints added. + * Code completion support for values of `Mapping` annotation. +* Cloud Assets: Support for container repostory and run in Compute Instance +* ... and other bug fixes + ## Version 22.9.9 * OCI Cloud Assets panel added which allows setting Micronaut OCI runtime properties & generate OCI policies * JDK Configuration wizard added to unify setting Java for various VSCode parts diff --git a/java/java.lsp.server/vscode/README.md b/java/java.lsp.server/vscode/README.md index e080bed679a4..3a8d4b3aefa9 100644 --- a/java/java.lsp.server/vscode/README.md +++ b/java/java.lsp.server/vscode/README.md @@ -25,7 +25,6 @@ [![Build Status](https://ci-builds.apache.org/job/Netbeans/view/vscode/job/netbeans-vscode/badge/icon)](https://ci-builds.apache.org/job/Netbeans/view/vscode/job/netbeans-vscode/) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://github.com/apache/netbeans/blob/master/LICENSE) -**Version 22.9.9 is 23.0 Early Access version.** This is [Apache NetBeans](http://netbeans.org) Language Server extension for VS Code. Use it to get all the _goodies of NetBeans_ via the VS Code user interface! Runs on __JDK11__ and all newer versions. @@ -37,6 +36,7 @@ Apache NetBeans Language Server brings full featured Java development (edit-comp 2. Select installed JDK to use for these settings in step 2/3 3. In step 3/3 select if settings will be applied at User level for all Workspaces (Folders open) or for current Workspace (Folder) only. 4. NetBeans Language Server JDK Home setting `netbeans.jdkhome` is __also__ available in `VSCode | Preferences | Settings ...` `Netbeans: Jdkhome` . More below in section [Selecting the JDK](#selecting-the-jdk) + 5. Setting `netbeans.project.jdkhome` holds a path to a JDK that is used as a default platform for opened folder/workspace (e.g. Java project). To avoid possible issues with default platform changing (i.e. changes from JDK21 to JDK8), NBLS is restarted when `netbeans.project.jdhome` changes. 2. Use __Java: New Project...__ " command to start creating new project, or 3. Open the folder with existing __pom.xml__ for Maven or ___Gradle___ project files (_build.gradle, gradle.properties_). From db64560d9082ccf62e99f223c63da1280e747686 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sat, 10 Aug 2024 23:03:10 +0200 Subject: [PATCH 04/11] Fix extraction of annotation processor classpath for maven It was reported that this configuration snippet: org.apache.maven.plugins maven-compiler-plugin 3.13.0 true org.mapstruct mapstruct-processor 1.5.5.Final io.soabase.record-builder record-builder-processor 42 works for maven, but not for NetBeans. Indeed the documentation for maven-compiler says, that hte child element for annotationProcessorPaths is named path. But that is ignored by maven. Maven documentation for plugin configuration [1] declares, that for list and array typed configuration plugins, the name of the single entry element does not matter, only the name of the wrapping element is relevant. This change modifies `PluginConfigPathParams` to always report `null` for `pathItemName` and adds a constructor without that parameter, deprecating the original constructor. [1] https://maven.apache.org/guides/mini/guide-configuring-plugins.html#mapping-collections-and-arrays Co-authored-by: Michael Bien --- java/maven/apichanges.xml | 21 +++ .../maven/api/PluginPropertyUtils.java | 43 ++++-- .../AnnotationProcClassPathImpl.java | 9 +- .../maven/api/PluginPropertyUtilsTest.java | 134 ++++++++++++++++++ 4 files changed, 187 insertions(+), 20 deletions(-) diff --git a/java/maven/apichanges.xml b/java/maven/apichanges.xml index 1c3b3595187a..11adec3ab584 100644 --- a/java/maven/apichanges.xml +++ b/java/maven/apichanges.xml @@ -83,6 +83,27 @@ is the proper place. + + + Enable using PluginConfigPathParams with null valued pathItemName + + + + + + Maven documentation for plugin configuration declares, that for + list and array typed configuration plugins, the name of the + single entry element does not matter, only the name of the + wrapping element is relevant. This change modifies +
PluginPropertyUtils.PluginConfigPathParams
to always + report
null
for
pathItemName
and adds a + constructor without that parameter, deprecating the original + constructor. +
+ + +
Support for partially loaded projects diff --git a/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java b/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java index 12efcbe65918..190f345b75ad 100644 --- a/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java +++ b/java/maven/src/org/netbeans/modules/maven/api/PluginPropertyUtils.java @@ -194,7 +194,7 @@ public static interface ConfigurationBuilder { T build(Xpp3Dom configRoot, ExpressionEvaluator eval); } - private static ExpressionEvaluator DUMMY_EVALUATOR = new ExpressionEvaluator() { + static ExpressionEvaluator DUMMY_EVALUATOR = new ExpressionEvaluator() { @Override public Object evaluate(String string) throws ExpressionEvaluationException { @@ -610,18 +610,14 @@ static class DependencyListBuilder implements ConfigurationBuilder build(Xpp3Dom configRoot, ExpressionEvaluator eval) { if (configRoot == null) { @@ -632,7 +628,7 @@ public List build(Xpp3Dom configRoot, ExpressionEvaluator eval) { if (source == null) { return null; } - for (Xpp3Dom ch : source.getChildren(propertyItemName)) { + for (Xpp3Dom ch : source.getChildren()) { Xpp3Dom a = ch.getChild(PROP_ARTIFACT_ID); Xpp3Dom g = ch.getChild(PROP_GROUP_ID); Xpp3Dom v = ch.getChild(PROP_VERSION); @@ -693,16 +689,31 @@ public static final class PluginConfigPathParams { /** * Creates a query instance with mandatory parameters + * * @param pluginGroupId plugin's group ID * @param pluginArtifactId plugin's artifact ID - * @param pathProperty name of the property (the property should contain a list of items) - * @param pathItemName name of the single item's element + * @param pathProperty name of the property (the property should contain + * a list of items) */ - public PluginConfigPathParams(String pluginGroupId, String pluginArtifactId, String pathProperty, String pathItemName) { + public PluginConfigPathParams(String pluginGroupId, String pluginArtifactId, String pathProperty) { this.pluginGroupId = pluginGroupId; this.pluginArtifactId = pluginArtifactId; this.pathProperty = pathProperty; - this.pathItemName = pathItemName; + this.pathItemName = null; + } + + /** + * Creates a query instance with mandatory parameters + * + * @deprecated List items can have arbitrary names, use {@link #PluginConfigPathParams(java.lang.String, java.lang.String, java.lang.String)} instead. + * @param pluginGroupId plugin's group ID + * @param pluginArtifactId plugin's artifact ID + * @param pathProperty name of the property (the property should contain a list of items) + * @param pathItemName name of the single item's element (ignored) + */ + @Deprecated + public PluginConfigPathParams(String pluginGroupId, String pluginArtifactId, String pathProperty, String pathItemName) { + this(pluginGroupId, pluginArtifactId, pathProperty); } /** @@ -741,6 +752,10 @@ public String getPathProperty() { return pathProperty; } + /** + * Returns null. + */ + @Deprecated public String getPathItemName() { return pathItemName; } @@ -777,7 +792,7 @@ public String getDefaultScope() { } MavenProject mavenProject = projectImpl.getOriginalMavenProject(); - DependencyListBuilder bld = new DependencyListBuilder(mavenProject, query.getPathProperty(), query.getPathItemName(), query.getArtifactType()); + DependencyListBuilder bld = new DependencyListBuilder(query.getPathProperty(), query.getArtifactType()); List coordinates = PluginPropertyUtils.getPluginPropertyBuildable(mavenProject, query.getPluginGroupId(), query.getPluginArtifactId(), query.getGoal(), bld); if (coordinates == null) { return null; diff --git a/java/maven/src/org/netbeans/modules/maven/classpath/AnnotationProcClassPathImpl.java b/java/maven/src/org/netbeans/modules/maven/classpath/AnnotationProcClassPathImpl.java index fb4f8736edae..d9d9c8e5b440 100644 --- a/java/maven/src/org/netbeans/modules/maven/classpath/AnnotationProcClassPathImpl.java +++ b/java/maven/src/org/netbeans/modules/maven/classpath/AnnotationProcClassPathImpl.java @@ -50,7 +50,6 @@ final class AnnotationProcClassPathImpl extends AbstractProjectClassPathImpl imp private static final String GOAL_COMPILE = "compile"; // NOI18N private static final String GOAL_TEST_COMPILE = "testCompile"; // NOI18N private static final String PROPERTY_PATH = "annotationProcessorPaths"; // NOI18N - private static final String PROPERTY_ITEM = "path"; // NOI18N private final boolean mainCompile; @@ -84,14 +83,12 @@ public Set getFlags() { } static boolean getCompileArtifacts(NbMavenProjectImpl prjImpl, String goal, MavenProject mavenProject, List lst) { - PluginConfigPathParams query = new PluginConfigPathParams(COMPILER_GROUP_ID, COMPILER_ARTIFACT_ID, - PROPERTY_PATH, PROPERTY_ITEM); + PluginConfigPathParams query = new PluginConfigPathParams(COMPILER_GROUP_ID, COMPILER_ARTIFACT_ID, PROPERTY_PATH); query.setDefaultScope(Artifact.SCOPE_RUNTIME); query.setGoal(goal); List errorList = new ArrayList<>(); - List arts = Collections.emptyList(); - - arts = PluginPropertyUtils.getPluginPathProperty(prjImpl, query, true, errorList); + + List arts = PluginPropertyUtils.getPluginPathProperty(prjImpl, query, true, errorList); if (arts == null) { return false; } diff --git a/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java b/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java index abebe8f1df6b..e35bfc12c11e 100644 --- a/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java +++ b/java/maven/test/unit/src/org/netbeans/modules/maven/api/PluginPropertyUtilsTest.java @@ -20,7 +20,12 @@ package org.netbeans.modules.maven.api; import java.io.File; +import java.io.StringReader; import java.util.Arrays; +import java.util.List; +import org.apache.maven.model.Dependency; +import org.codehaus.plexus.util.xml.Xpp3Dom; +import org.codehaus.plexus.util.xml.Xpp3DomBuilder; import org.netbeans.api.project.ProjectManager; import org.netbeans.junit.NbTestCase; import org.openide.filesystems.FileObject; @@ -138,4 +143,133 @@ public void testGetCompilerArgs() throws Exception { assertEquals("[--enable-preview]", Arrays.toString(PluginPropertyUtils.getPluginPropertyList(ProjectManager.getDefault().findProject(d), "org.apache.maven.plugins", "maven-compiler-plugin", "compilerArgs", "arg", null))); } + public void testDependencyListBuilder() throws Exception { + String testPom = + """ + + + 4.0.0 + let.me.reproduce + annotation-processor-netbeans-reproducer + 1.0-SNAPSHOT + jar + + UTF-8 + 21 + let.me.reproduce.annotation.processor.netbeans.reproducer.Main + + + + + org.mapstruct + mapstruct + 1.5.5.Final + + + io.soabase.record-builder + record-builder-core + 42 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + true + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + + + io.soabase.record-builder + record-builder-processor + 42 + + + + + + + + """; + Xpp3Dom configRoot = Xpp3DomBuilder.build(new StringReader(testPom)).getChild("build").getChild("plugins").getChildren()[0].getChild("configuration"); + + // Matching filter for propertyItemName should yield correct result + PluginPropertyUtils.DependencyListBuilder bld = new PluginPropertyUtils.DependencyListBuilder( + "annotationProcessorPaths", + null + ); + List dependencies = bld.build(configRoot, PluginPropertyUtils.DUMMY_EVALUATOR); + assertEquals(2, dependencies.size()); + + String testPom2 = + """ + + + 4.0.0 + let.me.reproduce + annotation-processor-netbeans-reproducer + 1.0-SNAPSHOT + jar + + UTF-8 + 21 + let.me.reproduce.annotation.processor.netbeans.reproducer.Main + + + + + org.mapstruct + mapstruct + 1.5.5.Final + + + io.soabase.record-builder + record-builder-core + 42 + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.13.0 + + true + + + org.mapstruct + mapstruct-processor + 1.5.5.Final + + + io.soabase.record-builder + record-builder-processor + 42 + + + + + + + + """; + + // Filter with null value for propertyItemName should yield full list + Xpp3Dom configRoot2 = Xpp3DomBuilder.build(new StringReader(testPom2)).getChild("build").getChild("plugins").getChildren()[0].getChild("configuration"); + PluginPropertyUtils.DependencyListBuilder bld2 = new PluginPropertyUtils.DependencyListBuilder( + "annotationProcessorPaths", + null + ); + List dependencies3 = bld2.build(configRoot2, PluginPropertyUtils.DUMMY_EVALUATOR); + assertEquals(2, dependencies3.size()); + } } From 846f03a9f1ba4edc603fd68102590cfb435c2fb6 Mon Sep 17 00:00:00 2001 From: Neil C Smith Date: Sat, 17 Aug 2024 15:31:16 +0100 Subject: [PATCH 05/11] Use nbfs url for custom flatlaf properties if custom folder doesn't exist. --- .../src/org/netbeans/swing/laf/flatlaf/Installer.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Installer.java b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Installer.java index 36235745082a..d65f475ba360 100644 --- a/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Installer.java +++ b/platform/o.n.swing.laf.flatlaf/src/org/netbeans/swing/laf/flatlaf/Installer.java @@ -23,6 +23,8 @@ import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.themes.FlatMacDarkLaf; import com.formdev.flatlaf.themes.FlatMacLightLaf; +import java.net.URI; +import java.net.URL; import javax.swing.UIManager; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; @@ -51,6 +53,13 @@ public void validate() throws IllegalStateException { FileObject customFolder = FileUtil.getConfigFile("LookAndFeel"); if (customFolder != null && customFolder.isFolder()) { FlatLaf.registerCustomDefaultsSource(customFolder.toURL()); + } else { + try { + URL lafConfig = URI.create("nbfs://nbhost/SystemFileSystem/LookAndFeel/").toURL(); + FlatLaf.registerCustomDefaultsSource(lafConfig); + } catch (Exception ex) { + // fall through + } } FlatLaf.setSystemColorGetter( name -> { From 129b8c83b4b112d309d0bcf257d5de1024240c58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Tue, 20 Aug 2024 21:22:28 +0200 Subject: [PATCH 06/11] .c/.h/.hpp files: Register WhereUsedAction and RenameAction in correct mime paths Closes: #7686 --- .../org/netbeans/modules/cpplite/editor/file/CDataObject.java | 4 ++-- .../org/netbeans/modules/cpplite/editor/file/HDataObject.java | 4 ++-- .../netbeans/modules/cpplite/editor/file/HPPDataObject.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/CDataObject.java b/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/CDataObject.java index 654d2232abf6..3f142f3b4d37 100644 --- a/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/CDataObject.java +++ b/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/CDataObject.java @@ -103,12 +103,12 @@ position = 1400 ), @ActionReference( - path = "Editors/" + MIMETypes.CPP + "/Popup", + path = "Editors/" + MIMETypes.C + "/Popup", id = @ActionID(category = "Refactoring", id = "org.netbeans.modules.refactoring.api.ui.WhereUsedAction"), position = 1400 ), @ActionReference( - path = "Editors/" + MIMETypes.CPP + "/Popup", + path = "Editors/" + MIMETypes.C + "/Popup", id = @ActionID(category = "Refactoring", id = "org.netbeans.modules.refactoring.api.ui.RenameAction"), position = 1500, separatorAfter = 1550 diff --git a/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HDataObject.java b/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HDataObject.java index c4cc4cfc4fdf..92c78a2c1c2b 100644 --- a/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HDataObject.java +++ b/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HDataObject.java @@ -103,12 +103,12 @@ position = 1400 ), @ActionReference( - path = "Editors/" + MIMETypes.CPP + "/Popup", + path = "Editors/" + MIMETypes.H + "/Popup", id = @ActionID(category = "Refactoring", id = "org.netbeans.modules.refactoring.api.ui.WhereUsedAction"), position = 1400 ), @ActionReference( - path = "Editors/" + MIMETypes.CPP + "/Popup", + path = "Editors/" + MIMETypes.H + "/Popup", id = @ActionID(category = "Refactoring", id = "org.netbeans.modules.refactoring.api.ui.RenameAction"), position = 1500, separatorAfter = 1550 diff --git a/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HPPDataObject.java b/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HPPDataObject.java index bd870ebe68d6..eaa069555227 100644 --- a/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HPPDataObject.java +++ b/cpplite/cpplite.editor/src/org/netbeans/modules/cpplite/editor/file/HPPDataObject.java @@ -103,12 +103,12 @@ position = 1400 ), @ActionReference( - path = "Editors/" + MIMETypes.CPP + "/Popup", + path = "Editors/" + MIMETypes.HPP + "/Popup", id = @ActionID(category = "Refactoring", id = "org.netbeans.modules.refactoring.api.ui.WhereUsedAction"), position = 1400 ), @ActionReference( - path = "Editors/" + MIMETypes.CPP + "/Popup", + path = "Editors/" + MIMETypes.HPP + "/Popup", id = @ActionID(category = "Refactoring", id = "org.netbeans.modules.refactoring.api.ui.RenameAction"), position = 1500, separatorAfter = 1550 From 631aa30df13f07f3804b860d8982d7727bb902d6 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Sun, 18 Aug 2024 04:35:46 +0200 Subject: [PATCH 07/11] Update bundled maven to 3.9.9. - minor update release --- ...txt => apache-maven-3.9.9-bin-license.txt} | 2 +- ....txt => apache-maven-3.9.9-bin-notice.txt} | 0 ...txt => apache-maven-3.9.9-epl-license.txt} | 4 +- ...ven-3.9.9-failureaccess-1.0.2-license.txt} | 2 +- ...-maven-3.9.9-guava-33.2.1-jre-license.txt} | 2 +- ....9-javax.annotation-api-1.3.2-license.txt} | 2 +- ...ache-maven-3.9.9-slf4j-1.7.36-license.txt} | 2 +- java/maven.embedder/external/binaries-list | 2 +- .../external/binariesembedded-list | 48 +++++++++---------- .../nbproject/project.properties | 2 +- java/maven.embedder/nbproject/project.xml | 48 +++++++++---------- .../netbeans/nbbuild/extlibs/ignored-overlaps | 16 +++---- 12 files changed, 65 insertions(+), 65 deletions(-) rename java/maven.embedder/external/{apache-maven-3.9.8-bin-license.txt => apache-maven-3.9.9-bin-license.txt} (99%) rename java/maven.embedder/external/{apache-maven-3.9.8-bin-notice.txt => apache-maven-3.9.9-bin-notice.txt} (100%) rename java/maven.embedder/external/{apache-maven-3.9.8-epl-license.txt => apache-maven-3.9.9-epl-license.txt} (98%) rename java/maven.embedder/external/{apache-maven-3.9.8-failureaccess-1.0.2-license.txt => apache-maven-3.9.9-failureaccess-1.0.2-license.txt} (99%) rename java/maven.embedder/external/{apache-maven-3.9.8-guava-33.2.1-jre-license.txt => apache-maven-3.9.9-guava-33.2.1-jre-license.txt} (99%) rename java/maven.embedder/external/{apache-maven-3.9.8-javax.annotation-api-1.3.2-license.txt => apache-maven-3.9.9-javax.annotation-api-1.3.2-license.txt} (99%) rename java/maven.embedder/external/{apache-maven-3.9.8-slf4j-1.7.36-license.txt => apache-maven-3.9.9-slf4j-1.7.36-license.txt} (95%) diff --git a/java/maven.embedder/external/apache-maven-3.9.8-bin-license.txt b/java/maven.embedder/external/apache-maven-3.9.9-bin-license.txt similarity index 99% rename from java/maven.embedder/external/apache-maven-3.9.8-bin-license.txt rename to java/maven.embedder/external/apache-maven-3.9.9-bin-license.txt index 00cd9f452ceb..d3cdbbc2226c 100644 --- a/java/maven.embedder/external/apache-maven-3.9.8-bin-license.txt +++ b/java/maven.embedder/external/apache-maven-3.9.9-bin-license.txt @@ -1,6 +1,6 @@ Name: Apache Maven Distribution Description: Apache Maven Distribution -Version: 3.9.8 +Version: 3.9.9 License: Apache-2.0 Origin: Apache Software Foundation URL: https://maven.apache.org/ diff --git a/java/maven.embedder/external/apache-maven-3.9.8-bin-notice.txt b/java/maven.embedder/external/apache-maven-3.9.9-bin-notice.txt similarity index 100% rename from java/maven.embedder/external/apache-maven-3.9.8-bin-notice.txt rename to java/maven.embedder/external/apache-maven-3.9.9-bin-notice.txt diff --git a/java/maven.embedder/external/apache-maven-3.9.8-epl-license.txt b/java/maven.embedder/external/apache-maven-3.9.9-epl-license.txt similarity index 98% rename from java/maven.embedder/external/apache-maven-3.9.8-epl-license.txt rename to java/maven.embedder/external/apache-maven-3.9.9-epl-license.txt index 6d7f2cced2d4..7841c4efd111 100644 --- a/java/maven.embedder/external/apache-maven-3.9.8-epl-license.txt +++ b/java/maven.embedder/external/apache-maven-3.9.9-epl-license.txt @@ -1,9 +1,9 @@ Name: Apache Maven components under EPL v1.0 Description: These Apache Maven components are under EPL v1.0: org.eclipse.sisu.inject-0.9.0.M3.jar org.eclipse.sisu.plexus-0.9.0.M3.jar -Version: 3.9.8 +Version: 3.9.9 License: Maven-EPL-v10 Origin: Apache Software Foundation -Files: apache-maven-3.9.8-bin.zip!/apache-maven-3.9.8/lib/org.eclipse.sisu.inject-0.9.0.M3.jar apache-maven-3.9.8-bin.zip!/apache-maven-3.9.8/lib/org.eclipse.sisu.plexus-0.9.0.M3.jar +Files: apache-maven-3.9.9-bin.zip!/apache-maven-3.9.9/lib/org.eclipse.sisu.inject-0.9.0.M3.jar apache-maven-3.9.9-bin.zip!/apache-maven-3.9.9/lib/org.eclipse.sisu.plexus-0.9.0.M3.jar Eclipse Public License - v 1.0 diff --git a/java/maven.embedder/external/apache-maven-3.9.8-failureaccess-1.0.2-license.txt b/java/maven.embedder/external/apache-maven-3.9.9-failureaccess-1.0.2-license.txt similarity index 99% rename from java/maven.embedder/external/apache-maven-3.9.8-failureaccess-1.0.2-license.txt rename to java/maven.embedder/external/apache-maven-3.9.9-failureaccess-1.0.2-license.txt index 048b861eaa18..2962b3733fdc 100644 --- a/java/maven.embedder/external/apache-maven-3.9.8-failureaccess-1.0.2-license.txt +++ b/java/maven.embedder/external/apache-maven-3.9.9-failureaccess-1.0.2-license.txt @@ -3,7 +3,7 @@ Version: 1.0.2 License: Apache-2.0 Origin: https://github.com/google/guava Description: A Guava subproject -Files: apache-maven-3.9.8-bin.zip!/apache-maven-3.9.8/lib/failureaccess-1.0.2.jar +Files: apache-maven-3.9.9-bin.zip!/apache-maven-3.9.9/lib/failureaccess-1.0.2.jar Apache License Version 2.0, January 2004 diff --git a/java/maven.embedder/external/apache-maven-3.9.8-guava-33.2.1-jre-license.txt b/java/maven.embedder/external/apache-maven-3.9.9-guava-33.2.1-jre-license.txt similarity index 99% rename from java/maven.embedder/external/apache-maven-3.9.8-guava-33.2.1-jre-license.txt rename to java/maven.embedder/external/apache-maven-3.9.9-guava-33.2.1-jre-license.txt index 0f9ef41f2350..166f2902a13c 100644 --- a/java/maven.embedder/external/apache-maven-3.9.8-guava-33.2.1-jre-license.txt +++ b/java/maven.embedder/external/apache-maven-3.9.9-guava-33.2.1-jre-license.txt @@ -3,7 +3,7 @@ Version: 33.2.1 License: Apache-2.0 Origin: https://github.com/google/guava Description: Guava is a set of core libraries that includes new collection types (such as multimap and multiset), immutable collections, a graph library, and utilities for concurrency, I/O, hashing, primitives, strings, and more. -Files: apache-maven-3.9.8-bin.zip!/apache-maven-3.9.8/lib/guava-33.2.1-jre.jar +Files: apache-maven-3.9.9-bin.zip!/apache-maven-3.9.9/lib/guava-33.2.1-jre.jar Apache License Version 2.0, January 2004 diff --git a/java/maven.embedder/external/apache-maven-3.9.8-javax.annotation-api-1.3.2-license.txt b/java/maven.embedder/external/apache-maven-3.9.9-javax.annotation-api-1.3.2-license.txt similarity index 99% rename from java/maven.embedder/external/apache-maven-3.9.8-javax.annotation-api-1.3.2-license.txt rename to java/maven.embedder/external/apache-maven-3.9.9-javax.annotation-api-1.3.2-license.txt index 0a0e4938def5..dc98e45ca7d2 100644 --- a/java/maven.embedder/external/apache-maven-3.9.8-javax.annotation-api-1.3.2-license.txt +++ b/java/maven.embedder/external/apache-maven-3.9.9-javax.annotation-api-1.3.2-license.txt @@ -3,7 +3,7 @@ Version: 1.3.2 Description: Part of Apache Maven Distribution License: CDDL-1.1 Origin: Apache Maven -Files: apache-maven-3.9.8-bin.zip!/apache-maven-3.9.8/lib/javax.annotation-api-1.3.2.jar +Files: apache-maven-3.9.9-bin.zip!/apache-maven-3.9.9/lib/javax.annotation-api-1.3.2.jar COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.1 diff --git a/java/maven.embedder/external/apache-maven-3.9.8-slf4j-1.7.36-license.txt b/java/maven.embedder/external/apache-maven-3.9.9-slf4j-1.7.36-license.txt similarity index 95% rename from java/maven.embedder/external/apache-maven-3.9.8-slf4j-1.7.36-license.txt rename to java/maven.embedder/external/apache-maven-3.9.9-slf4j-1.7.36-license.txt index 008520b6e984..08516cfb3d9c 100644 --- a/java/maven.embedder/external/apache-maven-3.9.8-slf4j-1.7.36-license.txt +++ b/java/maven.embedder/external/apache-maven-3.9.9-slf4j-1.7.36-license.txt @@ -3,7 +3,7 @@ Description: Part of Apache Maven Distribution Version: 1.7.36 License: MIT-slf4j-22 Origin: Apache Software Foundation -Files: apache-maven-3.9.8-bin.zip!/apache-maven-3.9.8/lib/slf4j-api-1.7.36.jar +Files: apache-maven-3.9.9-bin.zip!/apache-maven-3.9.9/lib/slf4j-api-1.7.36.jar Copyright (c) 2004-2022 QOS.ch Sarl (Switzerland) All rights reserved. diff --git a/java/maven.embedder/external/binaries-list b/java/maven.embedder/external/binaries-list index 9e54c45ef820..5e207b8534f7 100644 --- a/java/maven.embedder/external/binaries-list +++ b/java/maven.embedder/external/binaries-list @@ -16,4 +16,4 @@ # under the License. DC15DFF8F701B227EE523EEB7A17F77C10EAFE2F org.jdom:jdom2:2.0.6.1 5D9CE6ADD7B714B8095F0E3E396C5E9F8C5DCFEF org.apache.maven.shared:maven-dependency-tree:2.2 -B147144DEF2882179E9418C8CDA7C66F792ADF1E org.apache.maven:apache-maven:3.9.8:bin@zip +3A9F28ED5232FE3009D63D84A69FC4211AC086B5 org.apache.maven:apache-maven:3.9.9:bin@zip diff --git a/java/maven.embedder/external/binariesembedded-list b/java/maven.embedder/external/binariesembedded-list index 4bd56d8eb1a6..5146408e5993 100644 --- a/java/maven.embedder/external/binariesembedded-list +++ b/java/maven.embedder/external/binariesembedded-list @@ -20,36 +20,36 @@ 51CF043C87253C9F58B539C9F7E44C8894223850;org.apache.httpcomponents:httpcore:4.4.16 C4A06A64E650562F30B7BF9AAEC1BFED43ACA12B;com.google.guava:failureaccess:1.0.2 41A4BFF12057EECB6DAAF9C7F36C237815BE3DA1;commons-cli:commons-cli:1.8.0 -47BD4D333FBA53406F6C6C51884DDBCA435C8862;commons-codec:commons-codec:1.16.1 +973638B7149D333563584137EBF13A691BB60579;commons-codec:commons-codec:1.17.1 818E780DA2C66C63BBB6480FEF1F3855EEAFA3E4;com.google.guava:guava:33.2.1-jre DA25056C694C54BA16E78E4FC35F17FC60F0D1B4;com.google.inject:guice:5.1.0 D5774F204D990C9F5DA2809B88F928515577BEB4;org.fusesource.jansi:jansi:2.4.1 6975DA39A7040257BD51D21A231B76C915872D38;javax.inject:javax.inject:1 D877E195A05ACA4A2F1AD2FF14BFEC1393AF4B5E;org.slf4j:jcl-over-slf4j:1.7.36 934C04D3CFEF185A8008E7BF34331B79730A9D43;javax.annotation:javax.annotation-api:1.3.2 -A7F2D502A8BF72D17EA97ECA6C46776314703A66;org.apache.maven:maven-artifact:3.9.8 -B64AD95A741566AB289916D8073F45D6E03884EA;org.apache.maven:maven-builder-support:3.9.8 -D8C517B307EE7767A1B63E92D4306164B3192651;org.apache.maven:maven-compat:3.9.8 -986FE65310335F62A37D8DA9CB90105E604F2642;org.apache.maven:maven-core:3.9.8 -15DB86CE6A6B04107833E4E1DB66A213E23345EB;org.apache.maven:maven-embedder:3.9.8 -4BA1512E002EFE9F9EFC09AC8899C613F344D518;org.apache.maven:maven-model:3.9.8 -CF62656255B038D5DF460C95C3C2C75C98E2B350;org.apache.maven:maven-model-builder:3.9.8 -E7C822D321FCFE0AAD7CE4CC5E4499E320718D61;org.apache.maven:maven-plugin-api:3.9.8 -AA8893D34EF8540B0E11ADB452E9921074144E93;org.apache.maven:maven-repository-metadata:3.9.8 -E9DA4E71E96F5CA9418EBBF60D136FE37BFE4EE3;org.apache.maven.resolver:maven-resolver-api:1.9.20 -1BE01E2BC45F91F15CBB2B905616A73BD0959009;org.apache.maven.resolver:maven-resolver-connector-basic:1.9.20 -719030B9A577B2897983A23389A8E10DAD393B36;org.apache.maven.resolver:maven-resolver-impl:1.9.20 -0FF232FC989B53C8B0A6FAF3B3160B19C7C7260E;org.apache.maven.resolver:maven-resolver-named-locks:1.9.20 -2B9B8DC45536107E9E514E038C36AEB6F7F9A33D;org.apache.maven:maven-resolver-provider:3.9.8 -5E0C56BEFB978B02C91C2684A2BB7906B18314A6;org.apache.maven.resolver:maven-resolver-spi:1.9.20 -9D58A2B56C3AE781175C9C11423123DE641031BC;org.apache.maven.resolver:maven-resolver-transport-http:1.9.20 -F4B2314FCBF658B5405919907B8B7B9162400542;org.apache.maven.resolver:maven-resolver-transport-wagon:1.9.20 -E845F4EA1F2767FF64F0BDCBA4C2FC586BCCD3D4;org.apache.maven.resolver:maven-resolver-transport-file:1.9.20 -A1F2B661B14DEC2F1644C501E0657ED46459BAC0;org.apache.maven.resolver:maven-resolver-util:1.9.20 -2BCEE8FCE7CD50016148D4E667474867C6191D3E;org.apache.maven:maven-settings:3.9.8 -AE79E5910986AE7E511BDB9E0ECA12009EA83FD3;org.apache.maven:maven-settings-builder:3.9.8 +A130EC431EF32E12A4424F9B074735BB58E15D2D;org.apache.maven:maven-artifact:3.9.9 +812C13C808E42C54D3F4ABDAAB603E5262BF8AB8;org.apache.maven:maven-builder-support:3.9.9 +95CE2FE8BEA6341C36A1FF01DC80E1CBDFEEFFC7;org.apache.maven:maven-compat:3.9.9 +B58645E3F14348024B05735C171425E19D30C02E;org.apache.maven:maven-core:3.9.9 +FB988B4E85CEC2686E56DA94769CBF73298EF3EE;org.apache.maven:maven-embedder:3.9.9 +585BFF8F220DDC1C08C5263B7DEE26C49FC7DF94;org.apache.maven:maven-model:3.9.9 +6DCD87768EB615301AEF0C2221DD168A2D36BC7B;org.apache.maven:maven-model-builder:3.9.9 +7E06AEF37B14F8452928E5EFAA88BCF2EE8AED02;org.apache.maven:maven-plugin-api:3.9.9 +33A43F0AF3371225D1DCAAA20A824DF59C692172;org.apache.maven:maven-repository-metadata:3.9.9 +756660687EA077B85BE02B019D593EF2758E7DB6;org.apache.maven.resolver:maven-resolver-api:1.9.22 +0574B1F6D76C2C1F7FF66CCC17FF2C94E0A53545;org.apache.maven.resolver:maven-resolver-connector-basic:1.9.22 +19B7A728C9000F8DB615F64552D95FE74B413617;org.apache.maven.resolver:maven-resolver-impl:1.9.22 +121433B079AAD9BE7ED266B19F2122EEB0E2D111;org.apache.maven.resolver:maven-resolver-named-locks:1.9.22 +EA361822CD25AE6C9153C594AEF805E853031224;org.apache.maven:maven-resolver-provider:3.9.9 +C3101ACAA4EC053557028CF1917F1D22112B100D;org.apache.maven.resolver:maven-resolver-spi:1.9.22 +17FF0D97F8970124C97A9621524FB08A0503E90F;org.apache.maven.resolver:maven-resolver-transport-http:1.9.22 +721D6A8E3ED937461CD673134F83AEAC5A79E715;org.apache.maven.resolver:maven-resolver-transport-wagon:1.9.22 +929BC40B340290A7A94306EE0591D106D9261B28;org.apache.maven.resolver:maven-resolver-transport-file:1.9.22 +D5FEBED69CA2FE0DACFFEC95B6CB0760B0270FD1;org.apache.maven.resolver:maven-resolver-util:1.9.22 +A82024D87A107965AE274D944C844C9186FF410D;org.apache.maven:maven-settings:3.9.9 +71A9BEE9618839FFAF7C0DE3B53AC1C408B57AE0;org.apache.maven:maven-settings-builder:3.9.9 BFA28296272A5915B08DE9F11F34A94B0A818FD0;org.apache.maven.shared:maven-shared-utils:3.4.2 -75208E179E0BDA1E24E4E224932A0C781C80C4F1;org.apache.maven:maven-slf4j-provider:3.9.8 +E6F78082194D5FC759A84C1BBDFBFB9AB11DEAE8;org.apache.maven:maven-slf4j-provider:3.9.9 3665002BA4D16DFA779EF658A63D0608C4BD898B;org.eclipse.sisu:org.eclipse.sisu.inject:0.9.0.M3 B493C7ABCC6E04FA0A6A20D489A3DB0395C76F70;org.eclipse.sisu:org.eclipse.sisu.plexus:0.9.0.M3 425EA8E534716B4BFF1EA90F39BD76BE951D651B;org.codehaus.plexus:plexus-cipher:2.0 @@ -58,7 +58,7 @@ B493C7ABCC6E04FA0A6A20D489A3DB0395C76F70;org.eclipse.sisu:org.eclipse.sisu.plexu 8DC73F4FF5EAFCBB7EC035BA54736E828B272533;org.codehaus.plexus:plexus-interpolation:1.27 F89C5080614FFD0764E49861895DBEDDE1B47237;org.codehaus.plexus:plexus-sec-dispatcher:2.0 C6BFB17C97ECC8863E88778EA301BE742C62B06D;org.codehaus.plexus:plexus-utils:3.5.1 -D16B91678BC3734276886132923D6919C935C9F7;org.codehaus.plexus:plexus-xml:3.0.0 +B0E73C21402F03C2765674B8DEDE21673B3288CF;org.codehaus.plexus:plexus-xml:3.0.1 6C62681A2F655B49963A5983B8B0950A6120AE14;org.slf4j:slf4j-api:1.7.36 A09F59BE3767DBFF0401828463D1752A9CB0C551;org.apache.maven.wagon:wagon-file:3.5.3 673D54E78F83C4700C8250A48C61F4C70EEF9BC3;org.apache.maven.wagon:wagon-http:3.5.3 diff --git a/java/maven.embedder/nbproject/project.properties b/java/maven.embedder/nbproject/project.properties index 9ffd2ba29fcc..1f3124ea9e46 100644 --- a/java/maven.embedder/nbproject/project.properties +++ b/java/maven.embedder/nbproject/project.properties @@ -20,7 +20,7 @@ javac.release=17 javac.compilerargs=-Xlint -Xlint:-serial release.external/jdom2-2.0.6.1.jar=modules/ext/maven/jdom2-2.0.6.1.jar release.external/maven-dependency-tree-2.2.jar=modules/ext/maven/maven-dependency-tree-2.2.jar -bundled.maven=apache-maven-3.9.8 +bundled.maven=apache-maven-3.9.9 extra.module.files=maven/ nbm.executable.files=maven/bin/mvn,maven/bin/mvnDebug,maven/bin/mvnyjp extra.license.files=${cluster}/maven/LICENSE.txt,${cluster}/maven/NOTICE.txt diff --git a/java/maven.embedder/nbproject/project.xml b/java/maven.embedder/nbproject/project.xml index 81b654d8ad71..85c007f12b4c 100644 --- a/java/maven.embedder/nbproject/project.xml +++ b/java/maven.embedder/nbproject/project.xml @@ -298,7 +298,7 @@ ../maven/lib/commons-cli-1.8.0.jar - ../maven/lib/commons-codec-1.16.1.jar + ../maven/lib/commons-codec-1.17.1.jar ../maven/lib/failureaccess-1.0.2.jar @@ -333,73 +333,73 @@ ../maven/lib/jcl-over-slf4j-1.7.36.jar - ../maven/lib/maven-artifact-3.9.8.jar + ../maven/lib/maven-artifact-3.9.9.jar - ../maven/lib/maven-builder-support-3.9.8.jar + ../maven/lib/maven-builder-support-3.9.9.jar - ../maven/lib/maven-compat-3.9.8.jar + ../maven/lib/maven-compat-3.9.9.jar - ../maven/lib/maven-core-3.9.8.jar + ../maven/lib/maven-core-3.9.9.jar - ../maven/lib/maven-embedder-3.9.8.jar + ../maven/lib/maven-embedder-3.9.9.jar - ../maven/lib/maven-model-3.9.8.jar + ../maven/lib/maven-model-3.9.9.jar - ../maven/lib/maven-model-builder-3.9.8.jar + ../maven/lib/maven-model-builder-3.9.9.jar - ../maven/lib/maven-plugin-api-3.9.8.jar + ../maven/lib/maven-plugin-api-3.9.9.jar - ../maven/lib/maven-repository-metadata-3.9.8.jar + ../maven/lib/maven-repository-metadata-3.9.9.jar - ../maven/lib/maven-resolver-api-1.9.20.jar + ../maven/lib/maven-resolver-api-1.9.22.jar - ../maven/lib/maven-resolver-connector-basic-1.9.20.jar + ../maven/lib/maven-resolver-connector-basic-1.9.22.jar - ../maven/lib/maven-resolver-impl-1.9.20.jar + ../maven/lib/maven-resolver-impl-1.9.22.jar - ../maven/lib/maven-resolver-named-locks-1.9.20.jar + ../maven/lib/maven-resolver-named-locks-1.9.22.jar - ../maven/lib/maven-resolver-provider-3.9.8.jar + ../maven/lib/maven-resolver-provider-3.9.9.jar - ../maven/lib/maven-resolver-spi-1.9.20.jar + ../maven/lib/maven-resolver-spi-1.9.22.jar - ../maven/lib/maven-resolver-transport-file-1.9.20.jar + ../maven/lib/maven-resolver-transport-file-1.9.22.jar - ../maven/lib/maven-resolver-transport-http-1.9.20.jar + ../maven/lib/maven-resolver-transport-http-1.9.22.jar - ../maven/lib/maven-resolver-transport-wagon-1.9.20.jar + ../maven/lib/maven-resolver-transport-wagon-1.9.22.jar - ../maven/lib/maven-resolver-util-1.9.20.jar + ../maven/lib/maven-resolver-util-1.9.22.jar - ../maven/lib/maven-settings-3.9.8.jar + ../maven/lib/maven-settings-3.9.9.jar - ../maven/lib/maven-settings-builder-3.9.8.jar + ../maven/lib/maven-settings-builder-3.9.9.jar ../maven/lib/maven-shared-utils-3.4.2.jar - ../maven/lib/maven-slf4j-provider-3.9.8.jar + ../maven/lib/maven-slf4j-provider-3.9.9.jar ../maven/lib/org.eclipse.sisu.inject-0.9.0.M3.jar @@ -423,7 +423,7 @@ ../maven/lib/plexus-utils-3.5.1.jar - ../maven/lib/plexus-xml-3.0.0.jar + ../maven/lib/plexus-xml-3.0.1.jar ../maven/lib/slf4j-api-1.7.36.jar diff --git a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps index 4b559a9e7796..f899cb811ddd 100644 --- a/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps +++ b/nbbuild/antsrc/org/netbeans/nbbuild/extlibs/ignored-overlaps @@ -23,11 +23,11 @@ ide/db.sql.visualeditor/external/javacc-7.0.10.jar java/performance/external/javacc-7.0.10.jar # bundled maven conflicts with other libraries -java/maven.embedder/external/apache-maven-3.9.8-bin.zip ide/slf4j.api/external/slf4j-api-1.7.36.jar -java/maven.embedder/external/apache-maven-3.9.8-bin.zip platform/o.apache.commons.codec/external/commons-codec-1.16.1.jar -java/maven.embedder/external/apache-maven-3.9.8-bin.zip ide/c.google.guava.failureaccess/external/failureaccess-1.0.2.jar -java/maven.embedder/external/apache-maven-3.9.8-bin.zip ide/c.google.guava/external/guava-33.2.1-jre.jar -java/maven.embedder/external/apache-maven-3.9.8-bin.zip java/maven.indexer/external/javax.annotation-api-1.3.2.jar +java/maven.embedder/external/apache-maven-3.9.9-bin.zip ide/slf4j.api/external/slf4j-api-1.7.36.jar +java/maven.embedder/external/apache-maven-3.9.9-bin.zip platform/o.apache.commons.codec/external/commons-codec-1.16.1.jar +java/maven.embedder/external/apache-maven-3.9.9-bin.zip ide/c.google.guava.failureaccess/external/failureaccess-1.0.2.jar +java/maven.embedder/external/apache-maven-3.9.9-bin.zip ide/c.google.guava/external/guava-33.2.1-jre.jar +java/maven.embedder/external/apache-maven-3.9.9-bin.zip java/maven.indexer/external/javax.annotation-api-1.3.2.jar # Used to parse data during build, but need to as a lib for ide cluster nbbuild/external/json-simple-1.1.1.jar ide/libs.json_simple/external/json-simple-1.1.1.jar @@ -37,9 +37,9 @@ webcommon/javascript2.jade/external/jflex-1.4.3.jar webcommon/javascript2.lexer/ # javax.annotation-api is used by multiple modules. enterprise/javaee8.api/external/javax.annotation-api-1.3.2.jar java/maven.indexer/external/javax.annotation-api-1.3.2.jar -enterprise/javaee8.api/external/javax.annotation-api-1.3.2.jar java/maven.embedder/external/apache-maven-3.9.8-bin.zip +enterprise/javaee8.api/external/javax.annotation-api-1.3.2.jar java/maven.embedder/external/apache-maven-3.9.9-bin.zip enterprise/javaee8.api/external/javax.annotation-api-1.3.2.jar enterprise/websvc.restlib/external/javax.annotation-api-1.3.2.jar -enterprise/websvc.restlib/external/javax.annotation-api-1.3.2.jar java/maven.embedder/external/apache-maven-3.9.8-bin.zip +enterprise/websvc.restlib/external/javax.annotation-api-1.3.2.jar java/maven.embedder/external/apache-maven-3.9.9-bin.zip # jaxb-api-osgi is used by multiple modules. enterprise/javaee.api/external/jaxb-api-osgi-2.2.7.jar enterprise/javaee7.api/external/jaxb-api-osgi-2.2.7.jar @@ -58,7 +58,7 @@ extide/gradle/external/gradle-7.4-bin.zip ide/libs.commons_compress/external/com extide/gradle/external/gradle-7.4-bin.zip ide/o.apache.commons.lang/external/commons-lang-2.6.jar extide/gradle/external/gradle-7.4-bin.zip ide/o.eclipse.jgit/external/org.eclipse.jgit-6.10.0.202406032230-r.jar extide/gradle/external/gradle-7.4-bin.zip java/debugger.jpda.truffle/external/antlr4-runtime-4.7.2.jar -extide/gradle/external/gradle-7.4-bin.zip java/maven.embedder/external/apache-maven-3.9.8-bin.zip +extide/gradle/external/gradle-7.4-bin.zip java/maven.embedder/external/apache-maven-3.9.9-bin.zip extide/gradle/external/gradle-7.4-bin.zip platform/libs.junit4/external/hamcrest-core-1.3.jar extide/gradle/external/gradle-7.4-bin.zip platform/libs.junit4/external/junit-4.13.2.jar extide/gradle/external/gradle-7.4-bin.zip platform/libs.testng/external/jcommander-1.78.jar From 5ce687f861bb896cebecf567d4a7bc69dd13c378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrik=20Karlstr=C3=B6m?= Date: Sat, 24 Aug 2024 06:52:55 +0200 Subject: [PATCH 08/11] Fix Janitor copy paste error Replace userDir with cacheDir. --- platform/janitor/src/org/netbeans/modules/janitor/Janitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java b/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java index 91763d194ae4..6a3268d37ff3 100644 --- a/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java +++ b/platform/janitor/src/org/netbeans/modules/janitor/Janitor.java @@ -247,7 +247,7 @@ static List getCandidates() { if (cacheDir != null) { File cacheParent = cacheDir.getParentFile(); for (File f : cacheParent.listFiles()) { - if (f.isDirectory() && !f.equals(userDir)) { + if (f.isDirectory() && !f.equals(cacheDir)) { names.add(f.getName()); } } From 2c99e0f57e95342ea211acf37956814cbc3e8169 Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Mon, 2 Sep 2024 19:47:58 +0200 Subject: [PATCH 09/11] Fix open maven subproject context menu attempt to fix UI issue of not selectable sub context menu on some configurations (wayland+flatlaf). Lazy init logic will create the JPopupMenu only once now. --- .../project/ui/actions/OpenSubprojects.java | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/ide/projectui/src/org/netbeans/modules/project/ui/actions/OpenSubprojects.java b/ide/projectui/src/org/netbeans/modules/project/ui/actions/OpenSubprojects.java index 7225404557bc..824899770cd4 100644 --- a/ide/projectui/src/org/netbeans/modules/project/ui/actions/OpenSubprojects.java +++ b/ide/projectui/src/org/netbeans/modules/project/ui/actions/OpenSubprojects.java @@ -137,8 +137,8 @@ private void openAllRequiredProjects(Node [] activatedNodes) { private class LazyMenu extends JMenu { private final Node[] activatedNodes; - boolean initialized; // create only once, prevents recreating items when user repeatedly expends and collapses the menu - private Set subProjects; + private boolean menuCreated; // create only once, prevents recreating items when user repeatedly expends and collapses the menu + private volatile Set subProjects; @NbBundle.Messages("LBL_SubProjectPopupMenu_Initializing=Initializing...") private LazyMenu(Node[] nodes) { @@ -147,17 +147,12 @@ private LazyMenu(Node[] nodes) { JMenuItem item = new JMenuItem(Bundle.LBL_SubProjectPopupMenu_Initializing()); item.setEnabled(false); add(item); - RP.post(new Runnable() { - @Override - public void run() { - getSubProjects(); - } - }); + RP.post(this::asyncFindSubProjects); } @Override public JPopupMenu getPopupMenu() { - if(initialized) { + if (!menuCreated && subProjects != null) { createSubMenu(); } return super.getPopupMenu(); @@ -165,7 +160,7 @@ public JPopupMenu getPopupMenu() { private void createSubMenu() { removeAll(); - if(subProjects != null && !subProjects.isEmpty()) { + if (!subProjects.isEmpty()) { super.getPopupMenu().setLayout(new VerticalGridLayout()); final JMenuItem openAllProjectsItem = new JMenuItem(new AbstractAction() { @Override @@ -181,7 +176,7 @@ public void actionPerformed(ActionEvent e) { nothingItem.setEnabled(false); add(nothingItem); } - if(subProjects != null && !subProjects.isEmpty()) { + if (!subProjects.isEmpty()) { for(final Project prjIter:subProjects) { JMenuItem selectPrjAction = new JMenuItem(new AbstractAction() { @Override @@ -193,9 +188,10 @@ public void actionPerformed(ActionEvent e) { add(selectPrjAction); } } + menuCreated = true; } - private void getSubProjects() { + private void asyncFindSubProjects() { try { if(activatedNodes != null) { for( int i = 0; i < activatedNodes.length; i++ ) { @@ -214,7 +210,15 @@ private void getSubProjects() { } } } finally { - initialized = true; + if (subProjects == null) { + subProjects = Set.of(); + } else { + // trigger project name query tasks + // without this, the first call to getDisplayName() will likely return a project path fallback + for (Project project : subProjects) { + ProjectUtils.getInformation(project).getDisplayName(); + } + } } } } From 220f1974d72fa53ec0a18edc803d215a2f168d79 Mon Sep 17 00:00:00 2001 From: Svata Dedic Date: Mon, 2 Sep 2024 16:37:53 +0200 Subject: [PATCH 10/11] #7606: Supply empty stdin, process daemon's stdout to avoid lockup --- .../gradle/loaders/LegacyProjectLoader.java | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java index 7fdfb72b129f..dce0a4ec04be 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/loaders/LegacyProjectLoader.java @@ -19,6 +19,7 @@ package org.netbeans.modules.gradle.loaders; import java.io.BufferedReader; +import java.io.ByteArrayInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -625,21 +626,24 @@ public void run() { OutputStream logStream = null; try { - if (LOG.isLoggable(Level.FINER)) { - if (LOG.isLoggable(Level.FINEST)) { - action.addArguments("--debug"); // NOI18N - } - PipedOutputStream pos = new ImmediatePipedOutputStream(); - try { - logStream = pos; - DAEMON_LOG_RP.post(new LogDelegate(new PipedInputStream(pos))); - } catch (IOException ex) { - throw new IllegalStateException(ex); - } - action.setStandardOutput(pos); - action.setStandardError(pos); + // no input will be ever given ... + InputStream emptyIs = new ByteArrayInputStream(new byte[0]); + // Github #7606: although the content of the OuptutStream will not be printed unless LOG is >= FINER, + // for some reason gradle daemon blocks on (empty) stdin if the output is not read+processed. + // So attaching the daemon + output stream handler unconditionally. + if (LOG.isLoggable(Level.FINEST)) { + action.addArguments("--debug"); // NOI18N } - + PipedOutputStream pos = new ImmediatePipedOutputStream(); + try { + logStream = pos; + DAEMON_LOG_RP.post(new LogDelegate(new PipedInputStream(pos))); + } catch (IOException ex) { + throw new IllegalStateException(ex); + } + action.setStandardOutput(pos); + action.setStandardError(pos); + action.setStandardInput(emptyIs); return action.run(); } finally { if (logStream != null) { From 903186266333b7a16bac87725cb1babf445a6eaf Mon Sep 17 00:00:00 2001 From: Michael Bien Date: Thu, 22 Aug 2024 08:11:20 +0200 Subject: [PATCH 11/11] Upgrade Gradle Tooling API to 8.10 - full JDK 23 support --- .../modules/gradle/api/execute/GradleDistributionManager.java | 3 ++- extide/libs.gradle/external/binaries-list | 2 +- ...pi-8.9-license.txt => gradle-tooling-api-8.10-license.txt} | 4 ++-- ...-api-8.9-notice.txt => gradle-tooling-api-8.10-notice.txt} | 0 extide/libs.gradle/nbproject/project.properties | 2 +- extide/libs.gradle/nbproject/project.xml | 2 +- .../org/netbeans/modules/gradle/java/newproject/Wizards.java | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) rename extide/libs.gradle/external/{gradle-tooling-api-8.9-license.txt => gradle-tooling-api-8.10-license.txt} (99%) rename extide/libs.gradle/external/{gradle-tooling-api-8.9-notice.txt => gradle-tooling-api-8.10-notice.txt} (100%) diff --git a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java index 8b93f19d3208..051d95a2cb8b 100644 --- a/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java +++ b/extide/gradle/src/org/netbeans/modules/gradle/api/execute/GradleDistributionManager.java @@ -100,9 +100,10 @@ public final class GradleDistributionManager { GradleVersion.version("8.3"), // JDK-20 GradleVersion.version("8.5"), // JDK-21 GradleVersion.version("8.8"), // JDK-22 + GradleVersion.version("8.10"),// JDK-23 }; - private static final GradleVersion LAST_KNOWN_GRADLE = GradleVersion.version("8.9"); //NOI18N + private static final GradleVersion LAST_KNOWN_GRADLE = GradleVersion.version("8.10"); //NOI18N final File gradleUserHome; diff --git a/extide/libs.gradle/external/binaries-list b/extide/libs.gradle/external/binaries-list index dff2c2265b37..72218b9d5a29 100644 --- a/extide/libs.gradle/external/binaries-list +++ b/extide/libs.gradle/external/binaries-list @@ -15,4 +15,4 @@ # specific language governing permissions and limitations # under the License. -7BCC4423C529A42ECA9D0CE5B5275369EF4DF55A https://repo.gradle.org/artifactory/libs-releases/org/gradle/gradle-tooling-api/8.9/gradle-tooling-api-8.9.jar gradle-tooling-api-8.9.jar +1FC754376876B11AE26D811F8812AA37773660DD https://repo.gradle.org/artifactory/libs-releases/org/gradle/gradle-tooling-api/8.10/gradle-tooling-api-8.10.jar gradle-tooling-api-8.10.jar diff --git a/extide/libs.gradle/external/gradle-tooling-api-8.9-license.txt b/extide/libs.gradle/external/gradle-tooling-api-8.10-license.txt similarity index 99% rename from extide/libs.gradle/external/gradle-tooling-api-8.9-license.txt rename to extide/libs.gradle/external/gradle-tooling-api-8.10-license.txt index 74cb1addb8d6..ab7d5a2a2558 100644 --- a/extide/libs.gradle/external/gradle-tooling-api-8.9-license.txt +++ b/extide/libs.gradle/external/gradle-tooling-api-8.10-license.txt @@ -1,7 +1,7 @@ Name: Gradle Tooling API Description: Gradle Tooling API -Version: 8.9 -Files: gradle-tooling-api-8.9.jar +Version: 8.10 +Files: gradle-tooling-api-8.10.jar License: Apache-2.0 Origin: Gradle Inc. URL: https://gradle.org/ diff --git a/extide/libs.gradle/external/gradle-tooling-api-8.9-notice.txt b/extide/libs.gradle/external/gradle-tooling-api-8.10-notice.txt similarity index 100% rename from extide/libs.gradle/external/gradle-tooling-api-8.9-notice.txt rename to extide/libs.gradle/external/gradle-tooling-api-8.10-notice.txt diff --git a/extide/libs.gradle/nbproject/project.properties b/extide/libs.gradle/nbproject/project.properties index 6e4605fe4922..d20b5a229d4c 100644 --- a/extide/libs.gradle/nbproject/project.properties +++ b/extide/libs.gradle/nbproject/project.properties @@ -22,4 +22,4 @@ javac.compilerargs=-Xlint -Xlint:-serial # Sigtest fails to read the classes in the gradle-tooling-api sigtest.skip.gen=true -release.external/gradle-tooling-api-8.9.jar=modules/gradle/gradle-tooling-api.jar +release.external/gradle-tooling-api-8.10.jar=modules/gradle/gradle-tooling-api.jar diff --git a/extide/libs.gradle/nbproject/project.xml b/extide/libs.gradle/nbproject/project.xml index d82027b5e615..9b1dfe36f2ad 100644 --- a/extide/libs.gradle/nbproject/project.xml +++ b/extide/libs.gradle/nbproject/project.xml @@ -39,7 +39,7 @@ gradle/gradle-tooling-api.jar - external/gradle-tooling-api-8.9.jar + external/gradle-tooling-api-8.10.jar diff --git a/java/gradle.java/src/org/netbeans/modules/gradle/java/newproject/Wizards.java b/java/gradle.java/src/org/netbeans/modules/gradle/java/newproject/Wizards.java index 255def8bce12..031c25128452 100644 --- a/java/gradle.java/src/org/netbeans/modules/gradle/java/newproject/Wizards.java +++ b/java/gradle.java/src/org/netbeans/modules/gradle/java/newproject/Wizards.java @@ -35,7 +35,7 @@ public final class Wizards { private Wizards() {}; - private static final List JAVA_VERSIONS = List.of(22, 21, 17, 11, 8); + private static final List JAVA_VERSIONS = List.of(23, 22, 21, 17, 11, 8); private static final List JAVA_TEST_FRAMEWORKS = List.of( JUNIT, JUNIT_5,