This is an automated email from the ASF dual-hosted git repository.
yamer pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git
The following commit(s) were added to refs/heads/main by this push:
new 5372b59c022 kie-issues#114: JavaCodeCompletion module fails to compile
because of API change (#2453)
5372b59c022 is described below
commit 5372b59c022900266b6157689604edf594819dee
Author: Yeser Amer <[email protected]>
AuthorDate: Mon Jul 1 13:46:35 2024 +0200
kie-issues#114: JavaCodeCompletion module fails to compile because of API
change (#2453)
---
.../ImportJavaClassesWizardFieldListTable.tsx | 5 +-
.../ImportJavaClasses/ImportJavaClasses.test.tsx | 6 +-
.../__snapshots__/ImportJavaClasses.test.tsx.snap | 60 ++++++++------
.../org/kogito/core/internal/DelegateHandler.java | 4 +-
.../kogito/core/internal/api/GetPublicResult.java | 13 ++-
.../kogito/core/internal/engine/JavaEngine.java | 25 +++++-
.../internal/handlers/AutocompleteHandler.java | 5 ++
.../internal/handlers/GetAccessorsHandler.java | 87 +++++++++++---------
.../internal/handlers/TypeHierarchyHandler.java | 96 ++++++++++++++++++++++
.../resources/templates/templateAccessors.java | 8 +-
.../main/resources/templates/templateClass.java | 4 +-
.../internal/handlers/GetAccessorsHandlerTest.java | 2 +-
12 files changed, 230 insertions(+), 85 deletions(-)
diff --git
a/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizardFieldListTable.tsx
b/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizardFieldListTable.tsx
index 8d750de6d14..cb633554394 100644
---
a/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizardFieldListTable.tsx
+++
b/packages/import-java-classes-component/src/components/ImportJavaClasses/ImportJavaClassesWizardFieldListTable.tsx
@@ -65,10 +65,7 @@ const TableJavaClassItem = ({
const [isExpanded, setExpanded] = useState(true);
const isFetchable = useCallback((field: JavaField) => {
- /* Temporary disable isFetchable, because we need FQCN of the Classes, no
longer avaialble */
- /* https://github.com/apache/incubator-kie-issues/issues/114 */
- return false;
- //return field.dmnTypeRef === DMNSimpleType.ANY &&
!JAVA_TO_DMN_MAP.has(getJavaClassSimpleName(field.type));
+ return field.dmnTypeRef === DMNSimpleType.ANY &&
!JAVA_TO_DMN_MAP.has(getJavaClassSimpleName(field.type));
}, []);
const parentRow = (
diff --git
a/packages/import-java-classes-component/tests/ImportJavaClasses/ImportJavaClasses.test.tsx
b/packages/import-java-classes-component/tests/ImportJavaClasses/ImportJavaClasses.test.tsx
index 72426d10ed2..7466dabb563 100644
---
a/packages/import-java-classes-component/tests/ImportJavaClasses/ImportJavaClasses.test.tsx
+++
b/packages/import-java-classes-component/tests/ImportJavaClasses/ImportJavaClasses.test.tsx
@@ -118,8 +118,7 @@ describe("ImportJavaClasses component tests", () => {
expect(baseElement).toMatchSnapshot();
});
- /* Renable in https://github.com/apache/incubator-kie-issues/issues/114 */
- test.skip("Should move to second step and fetch a Java Class", async () => {
+ test("Should move to second step and fetch a Java Class", async () => {
const { baseElement, getByText } = render(
<ImportJavaClasses
gwtLayerService={gwtLayerServiceMock}
@@ -145,8 +144,7 @@ describe("ImportJavaClasses component tests", () => {
expect(baseElement).toMatchSnapshot();
});
- /* Renable in https://github.com/apache/incubator-kie-issues/issues/114 */
- test.skip("Should move to second step and fetch, remove a Java Class", async
() => {
+ test("Should move to second step and fetch, remove a Java Class", async ()
=> {
const { baseElement, getByText } = render(
<ImportJavaClasses
gwtLayerService={gwtLayerServiceMock}
diff --git
a/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
b/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
index 5efeafbded2..f07c335488d 100644
---
a/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
+++
b/packages/import-java-classes-component/tests/ImportJavaClasses/__snapshots__/ImportJavaClasses.test.tsx.snap
@@ -412,6 +412,16 @@ exports[`ImportJavaClasses component tests Should move to
second step 1`] = `
>
(Any)
</span>
+ <button
+ aria-disabled="false"
+ class="pf-c-button pf-m-primary pf-m-small
fetch-button"
+
data-ouia-component-id="OUIA-Generated-Button-primary-6"
+ data-ouia-component-type="PF4/Button"
+ data-ouia-safe="true"
+ type="button"
+ >
+ Fetch "Test" class
+ </button>
</div>
</td>
</tr>
@@ -1057,7 +1067,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-disabled="false"
class="pf-c-button pf-m-secondary pf-m-progress"
- data-ouia-component-id="OUIA-Generated-Button-secondary-8"
+ data-ouia-component-id="OUIA-Generated-Button-secondary-13"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
data-testid="modal-wizard-button"
@@ -1074,21 +1084,21 @@ exports[`ImportJavaClasses component tests Should move
to third step 1`] = `
class="pf-l-bullseye"
>
<div
- aria-describedby="pf-modal-part-7"
- aria-labelledby="pf-modal-part-6"
+ aria-describedby="pf-modal-part-9"
+ aria-labelledby="pf-modal-part-8"
aria-modal="true"
class="pf-c-modal-box pf-m-lg"
- data-ouia-component-id="OUIA-Generated-Modal-large-6"
+ data-ouia-component-id="OUIA-Generated-Modal-large-8"
data-ouia-component-type="PF4/ModalContent"
data-ouia-safe="true"
- id="pf-modal-part-5"
+ id="pf-modal-part-7"
role="dialog"
>
<button
aria-disabled="false"
aria-label="Close"
class="pf-c-button pf-m-plain"
-
data-ouia-component-id="OUIA-Generated-Modal-large-6-ModalBoxCloseButton"
+
data-ouia-component-id="OUIA-Generated-Modal-large-8-ModalBoxCloseButton"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
type="button"
@@ -1112,7 +1122,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
>
<h1
class="pf-c-modal-box__title"
- id="pf-modal-part-6"
+ id="pf-modal-part-8"
>
<span
@@ -1123,7 +1133,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
</h1>
<div
class="pf-c-modal-box__description"
- id="pf-modal-part-7"
+ id="pf-modal-part-9"
>
It converts your Java assets to DMN types. This is a one-time
import action: if the Java class gets updated, you will need to reimport it.
</div>
@@ -1181,7 +1191,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
>
<nav
class="pf-c-wizard__nav"
- data-ouia-component-id="OUIA-Generated-WizardNav-6"
+ data-ouia-component-id="OUIA-Generated-WizardNav-8"
data-ouia-component-type="PF4/WizardNav"
data-ouia-safe="true"
>
@@ -1194,7 +1204,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-current="false"
class="pf-c-wizard__nav-link"
-
data-ouia-component-id="OUIA-Generated-WizardNavItem-16"
+
data-ouia-component-id="OUIA-Generated-WizardNavItem-22"
data-ouia-component-type="PF4/WizardNavItem"
data-ouia-safe="true"
>
@@ -1207,7 +1217,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-current="false"
class="pf-c-wizard__nav-link"
-
data-ouia-component-id="OUIA-Generated-WizardNavItem-17"
+
data-ouia-component-id="OUIA-Generated-WizardNavItem-23"
data-ouia-component-type="PF4/WizardNavItem"
data-ouia-safe="true"
>
@@ -1220,7 +1230,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-current="step"
class="pf-c-wizard__nav-link pf-m-current"
-
data-ouia-component-id="OUIA-Generated-WizardNavItem-18"
+
data-ouia-component-id="OUIA-Generated-WizardNavItem-24"
data-ouia-component-type="PF4/WizardNavItem"
data-ouia-safe="true"
>
@@ -1241,7 +1251,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<table
aria-label="field-table"
class="pf-c-table pf-m-grid-md"
- data-ouia-component-id="OUIA-Generated-Table-3"
+ data-ouia-component-id="OUIA-Generated-Table-8"
data-ouia-component-type="PF4/Table"
data-ouia-safe="true"
role="grid"
@@ -1252,7 +1262,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
>
<tr
class=""
-
data-ouia-component-id="OUIA-Generated-TableRow-15"
+
data-ouia-component-id="OUIA-Generated-TableRow-52"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1265,7 +1275,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
aria-label="Details"
aria-labelledby="simple-node0 expand-toggle0"
class="pf-c-button pf-m-plain pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-Button-plain-15"
+
data-ouia-component-id="OUIA-Generated-Button-plain-29"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
id="expand-toggle0"
@@ -1307,7 +1317,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
</tr>
<tr
class="pf-c-table__expandable-row pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-TableRow-16"
+
data-ouia-component-id="OUIA-Generated-TableRow-53"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1333,7 +1343,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
</tr>
<tr
class="pf-c-table__expandable-row pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-TableRow-17"
+
data-ouia-component-id="OUIA-Generated-TableRow-54"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1364,7 +1374,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
>
<tr
class=""
-
data-ouia-component-id="OUIA-Generated-TableRow-18"
+
data-ouia-component-id="OUIA-Generated-TableRow-55"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1377,7 +1387,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
aria-label="Details"
aria-labelledby="simple-node1 expand-toggle1"
class="pf-c-button pf-m-plain pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-Button-plain-16"
+
data-ouia-component-id="OUIA-Generated-Button-plain-30"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
id="expand-toggle1"
@@ -1419,7 +1429,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
</tr>
<tr
class="pf-c-table__expandable-row pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-TableRow-19"
+
data-ouia-component-id="OUIA-Generated-TableRow-56"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1445,7 +1455,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
</tr>
<tr
class="pf-c-table__expandable-row pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-TableRow-20"
+
data-ouia-component-id="OUIA-Generated-TableRow-57"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1471,7 +1481,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
</tr>
<tr
class="pf-c-table__expandable-row pf-m-expanded"
-
data-ouia-component-id="OUIA-Generated-TableRow-21"
+
data-ouia-component-id="OUIA-Generated-TableRow-58"
data-ouia-component-type="PF4/TableRow"
data-ouia-safe="true"
>
@@ -1507,7 +1517,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-disabled="false"
class="pf-c-button pf-m-primary"
- data-ouia-component-id="OUIA-Generated-Button-primary-6"
+ data-ouia-component-id="OUIA-Generated-Button-primary-12"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
type="submit"
@@ -1517,7 +1527,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-disabled="false"
class="pf-c-button pf-m-secondary"
- data-ouia-component-id="OUIA-Generated-Button-secondary-9"
+ data-ouia-component-id="OUIA-Generated-Button-secondary-14"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
type="button"
@@ -1530,7 +1540,7 @@ exports[`ImportJavaClasses component tests Should move to
third step 1`] = `
<button
aria-disabled="false"
class="pf-c-button pf-m-link"
- data-ouia-component-id="OUIA-Generated-Button-link-6"
+ data-ouia-component-id="OUIA-Generated-Button-link-8"
data-ouia-component-type="PF4/Button"
data-ouia-safe="true"
type="button"
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/DelegateHandler.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/DelegateHandler.java
index 3ef64a95d43..12aa8005050 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/DelegateHandler.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/DelegateHandler.java
@@ -32,17 +32,19 @@ import org.kogito.core.internal.handlers.GetClassesHandler;
import org.kogito.core.internal.handlers.Handler;
import org.kogito.core.internal.handlers.HandlerConstants;
import org.kogito.core.internal.handlers.IsLanguageServerAvailableHandler;
+import org.kogito.core.internal.handlers.TypeHierarchyHandler;
public class DelegateHandler implements IDelegateCommandHandler {
private static final JavaEngine JAVA_ENGINE = new JavaEngine();
private static final ActivationChecker ACTIVATION_CHECKER = new
ActivationChecker();
private static final AutocompleteHandler AUTOCOMPLETE_HANDLER = new
AutocompleteHandler(ACTIVATION_CHECKER);
+ private static final TypeHierarchyHandler TYPE_HIERARCHY_HANDLER = new
TypeHierarchyHandler(ACTIVATION_CHECKER);
private final IsLanguageServerAvailableHandler isAvailableHandler;
private static final List<Handler<?>> handlers = List.of(
new GetClassesHandler(HandlerConstants.GET_CLASSES, JAVA_ENGINE,
AUTOCOMPLETE_HANDLER),
- new GetAccessorsHandler(HandlerConstants.GET_ACCESSORS,
JAVA_ENGINE, AUTOCOMPLETE_HANDLER));
+ new GetAccessorsHandler(HandlerConstants.GET_ACCESSORS,
JAVA_ENGINE, AUTOCOMPLETE_HANDLER, TYPE_HIERARCHY_HANDLER));
public DelegateHandler() {
ACTIVATION_CHECKER.check();
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/api/GetPublicResult.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/api/GetPublicResult.java
index d8b47997fbb..98c14c111a8 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/api/GetPublicResult.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/api/GetPublicResult.java
@@ -19,11 +19,22 @@
package org.kogito.core.internal.api;
+/**
+ * Must be synchronized with JavaCodeCompletionAccessor.ts
+ */
public class GetPublicResult {
+ /**
+ * The Java Class that cointans the below accessor in FQCN format (eg.
`org.Author`)
+ */
private String fqcn;
+ /**
+ * Accessor's name (eg. `getName()` if a method, `name` if a field
+ */
private String accessor;
-
+ /**
+ * Accessor's type in FQCN format (eg. `java.lang.String`)
+ */
private String type;
public String getFqcn() {
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/engine/JavaEngine.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/engine/JavaEngine.java
index 650ff0c379f..a3e78fe4931 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/engine/JavaEngine.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/engine/JavaEngine.java
@@ -22,10 +22,8 @@ package org.kogito.core.internal.engine;
import java.io.IOException;
import java.io.StringWriter;
import java.io.Writer;
-import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.Paths;
import freemarker.template.Configuration;
import freemarker.template.Template;
@@ -77,9 +75,30 @@ public class JavaEngine {
return new BuildInformation(filePath, getContent(filePath), content,
5, getEndOfLinePosition(content, 5));
}
+ public BuildInformation buildVarTypePublicContent(Path filePath, String
fqcn, String completeText) {
+
+ TemplateParameters item = new TemplateParameters();
+ item.setClassName(getClassName(filePath));
+ item.setQuery(completeText);
+ item.setFqcn(fqcn);
+
+ String content = this.evaluate(Templates.TEMPLATE_ACCESSORS, item);
+ int varLine = 5;
+ int varMiddleChar = 2;
+
+ return new BuildInformation(filePath, getContent(filePath), content,
varLine, getFirstCharInLinePosition(content, varLine) + varMiddleChar);
+ }
+
+ protected int getFirstCharInLinePosition(String content, int lineNumber) {
+ String[] split = content.split("\n");
+ String line = split[lineNumber];
+ int index = line.indexOf(line.trim());
+
+ return index + 1;
+ }
+
protected int getEndOfLinePosition(String content, int lineNumber) {
String[] split = content.split("\n");
- JavaLanguageServerPlugin.logInfo(split[lineNumber]);
return split[lineNumber].length();
}
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/AutocompleteHandler.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/AutocompleteHandler.java
index 24d052a88ef..9b905ffba7d 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/AutocompleteHandler.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/AutocompleteHandler.java
@@ -33,6 +33,7 @@ import org.eclipse.lsp4j.CompletionList;
import org.eclipse.lsp4j.CompletionParams;
import org.eclipse.lsp4j.CompletionTriggerKind;
import org.eclipse.lsp4j.DidChangeTextDocumentParams;
+import org.eclipse.lsp4j.DidCloseTextDocumentParams;
import org.eclipse.lsp4j.DidOpenTextDocumentParams;
import org.eclipse.lsp4j.Position;
import org.eclipse.lsp4j.TextDocumentContentChangeEvent;
@@ -117,6 +118,10 @@ public class AutocompleteHandler {
} catch (Exception e) {
JavaLanguageServerPlugin.logException("Problem with " +
identifier, e);
return Collections.emptyList();
+ } finally {
+ DidCloseTextDocumentParams didCloseTextDocumentParams = new
DidCloseTextDocumentParams();
+ didCloseTextDocumentParams.setTextDocument(textDocumentIdentifier);
+ languageServer.didClose(didCloseTextDocumentParams);
}
}
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/GetAccessorsHandler.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/GetAccessorsHandler.java
index 21634e484da..6c573801c3b 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/GetAccessorsHandler.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/GetAccessorsHandler.java
@@ -6,26 +6,27 @@
* 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.
+ * under the License.
*/
package org.kogito.core.internal.handlers;
import java.util.List;
-import java.util.Map;
+import java.util.Optional;
import java.util.stream.Collectors;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
import org.eclipse.lsp4j.CompletionItem;
+import org.eclipse.lsp4j.TypeHierarchyItem;
import org.kogito.core.internal.api.GetPublicParameters;
import org.kogito.core.internal.api.GetPublicResult;
import org.kogito.core.internal.engine.BuildInformation;
@@ -35,31 +36,32 @@ public class GetAccessorsHandler extends
Handler<List<GetPublicResult>> {
private final JavaEngine javaEngine;
private final AutocompleteHandler autocompleteHandler;
+ private final TypeHierarchyHandler typeHierarchyHandler;
- public GetAccessorsHandler(String id, JavaEngine javaEngine,
AutocompleteHandler autocompleteHandler) {
+ public GetAccessorsHandler(String id, JavaEngine javaEngine,
AutocompleteHandler autocompleteHandler, TypeHierarchyHandler
typeHierarchyHandler) {
super(id);
this.javaEngine = javaEngine;
this.autocompleteHandler = autocompleteHandler;
+ this.typeHierarchyHandler = typeHierarchyHandler;
}
@Override
public List<GetPublicResult> handle(List<Object> arguments,
IProgressMonitor progress) {
JavaLanguageServerPlugin.logInfo("Handle Accessors");
GetPublicParameters parameters = checkParameters(arguments);
- BuildInformation buildInformation =
javaEngine.buildPublicContent(this.autocompleteHandler.getActivatorPath(),
-
parameters.getFqcn(),
-
parameters.getQuery());
- JavaLanguageServerPlugin.logInfo(buildInformation.getText());
- List<CompletionItem> items =
this.autocompleteHandler.handle("GetAccessorsHandler", buildInformation);
+ BuildInformation autoCompleteBuildInformation =
+
javaEngine.buildPublicContent(this.autocompleteHandler.getActivatorPath(),
+ parameters.getFqcn(),
+ parameters.getQuery());
+
JavaLanguageServerPlugin.logInfo(autoCompleteBuildInformation.getText());
+ List<CompletionItem> items =
this.autocompleteHandler.handle("GetAccessorsHandler",
autoCompleteBuildInformation);
+
return this.transformCompletionItemsToResult(parameters.getFqcn(),
items);
}
private GetPublicParameters checkParameters(List<Object> arguments) {
if (arguments.size() < 2) {
throw new IllegalArgumentException("Not enough arguments for
GetClasses command. Need one argument containing a text to be autocompleted");
- } else {
- JavaLanguageServerPlugin.logInfo("Arguments[0]: " +
arguments.get(0));
- JavaLanguageServerPlugin.logInfo("Arguments[1]: " +
arguments.get(1));
}
GetPublicParameters parameters = new GetPublicParameters();
@@ -75,35 +77,40 @@ public class GetAccessorsHandler extends
Handler<List<GetPublicResult>> {
.collect(Collectors.toList());
}
- protected GetPublicResult getAccessor(CompletionItem item, String fqcn) {
- GetPublicResult result = new GetPublicResult();
- result.setFqcn(fqcn);
- result.setAccessor(item.getLabelDetails().getDetail() != null ?
+ protected GetPublicResult getAccessor(CompletionItem item, String
javaClassFqcn) {
+ String accessorName = item.getLabelDetails().getDetail() != null ?
item.getLabel() + item.getLabelDetails().getDetail() :
- item.getLabel());
- /* Retrieving the class type SIMPLE NAME */
- String type = item.getLabelDetails().getDescription();
- /* Retrieving the class type FQCN */
- /* The API we used to retrieve the FQNC are no more available. To
enable the Project
- * compilation, the following block is a temporary commented. The
impact on the feature, is
- * that the Fecthing feature will no work properly, until we found an
alternative solution
- * https://github.com/apache/incubator-kie-issues/issues/114
- */
- /*
- Map<String,String> data = (Map<String, String>) item.getData();
- for (Map.Entry<String, String> entry : data.entrySet()) {
- JavaLanguageServerPlugin.logInfo("ENTRY: " + entry.getKey() + " "
+ entry.getValue());
- }
- if (data != null && data.containsKey(DATA_FIELD_SIGNATURE)) {
- String fqcnType = data.get(DATA_FIELD_SIGNATURE);
- /* The DATA_FIELD_SIGNATURE format is:
`method()Ljava.lang.String;` */ /*
- if (fqcnType != null && fqcnType.contains(")L")) {
- type = fqcnType.split("\\)L")[1];
- type = type.replaceAll(";$", "");
- }
- } */
- result.setType(type);
+ item.getLabel();
+ String accessorTypeSimpleName =
item.getLabelDetails().getDescription();
+
+ GetPublicResult result = new GetPublicResult();
+ result.setFqcn(javaClassFqcn);
+ result.setAccessor(accessorName);
+ result.setType(retrieveAccessorTypeFqcn(javaClassFqcn,
accessorName).orElse(accessorTypeSimpleName));
return result;
}
+
+ private Optional<String> retrieveAccessorTypeFqcn(String javaClassFqcn,
String accessorName) {
+ BuildInformation hoverBuildInformation =
+
javaEngine.buildVarTypePublicContent(this.typeHierarchyHandler.getActivatorPath(),
+ javaClassFqcn,
+ accessorName + ";");
+
+ List<TypeHierarchyItem> typeHierarchyResults =
this.typeHierarchyHandler.handle("GetAccessorsHandler", hoverBuildInformation);
+
+ if (typeHierarchyResults.isEmpty() || typeHierarchyResults.size() > 1)
{
+ return Optional.empty();
+ }
+
+ String fullPackage = typeHierarchyResults.get(0).getDetail();
+ String classSimpleName = typeHierarchyResults.get(0).getName();
+
+ if (fullPackage == null || fullPackage.isBlank()) {
+ return Optional.empty();
+ }
+
+ return Optional.of(fullPackage + "." + classSimpleName);
+ }
+
}
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/TypeHierarchyHandler.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/TypeHierarchyHandler.java
new file mode 100644
index 00000000000..13819749410
--- /dev/null
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/java/org/kogito/core/internal/handlers/TypeHierarchyHandler.java
@@ -0,0 +1,96 @@
+/*
+ * 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.kogito.core.internal.handlers;
+
+import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin;
+import org.eclipse.jdt.ls.core.internal.handlers.JDTLanguageServer;
+import org.eclipse.lsp4j.DidCloseTextDocumentParams;
+import org.eclipse.lsp4j.DidOpenTextDocumentParams;
+
+import org.eclipse.lsp4j.Position;
+import org.eclipse.lsp4j.TextDocumentContentChangeEvent;
+import org.eclipse.lsp4j.TextDocumentItem;
+import org.eclipse.lsp4j.TextDocumentIdentifier;
+import org.eclipse.lsp4j.TypeHierarchyItem;
+import org.eclipse.lsp4j.TypeHierarchyPrepareParams;
+import org.eclipse.lsp4j.VersionedTextDocumentIdentifier;
+
+import org.kogito.core.internal.engine.ActivationChecker;
+import org.kogito.core.internal.engine.BuildInformation;
+
+import java.nio.file.Path;
+import java.util.List;
+import java.util.concurrent.CompletableFuture;
+
+public class TypeHierarchyHandler {
+
+ private ActivationChecker activationChecker;
+
+ public TypeHierarchyHandler(ActivationChecker activationChecker) {
+ this.activationChecker = activationChecker;
+ }
+
+ public List<TypeHierarchyItem> handle(String identifier, BuildInformation
buildInformation) {
+
+ JDTLanguageServer languageServer = (JDTLanguageServer)
JavaLanguageServerPlugin.getInstance().getProtocol();
+
+ String uri = buildInformation.getPath().toUri().toASCIIString();
+
+ JavaLanguageServerPlugin.logInfo("Opening URI:" + uri);
+
+ DidOpenTextDocumentParams didOpenTextDocumentParams = new
DidOpenTextDocumentParams();
+ TextDocumentItem textDocumentItem = new TextDocumentItem();
+ textDocumentItem.setLanguageId("java");
+ textDocumentItem.setText(buildInformation.getText());
+ textDocumentItem.setUri(uri);
+ textDocumentItem.setVersion(1);
+ didOpenTextDocumentParams.setTextDocument(textDocumentItem);
+ languageServer.didOpen(didOpenTextDocumentParams);
+
+ Position pos = new Position();
+ pos.setLine(buildInformation.getLine());
+ pos.setCharacter(buildInformation.getPosition());
+
+ TextDocumentIdentifier textDocumentIdentifier = new
TextDocumentIdentifier();
+ textDocumentIdentifier.setUri(uri);
+
+ TypeHierarchyPrepareParams typeHierarchyPrepareParams = new
TypeHierarchyPrepareParams();
+ typeHierarchyPrepareParams.setTextDocument(textDocumentIdentifier);
+ typeHierarchyPrepareParams.setPosition(pos);
+
+ CompletableFuture<List<TypeHierarchyItem>> javaCompletion =
languageServer.prepareTypeHierarchy(typeHierarchyPrepareParams);
+ try {
+ return javaCompletion.get();
+ } catch (Exception e) {
+ JavaLanguageServerPlugin.logException("Problem with " +
identifier, e);
+ return null;
+ } finally {
+ JavaLanguageServerPlugin.logInfo("Closing URI:" + uri);
+
+ DidCloseTextDocumentParams didCloseTextDocumentParams = new
DidCloseTextDocumentParams();
+ didCloseTextDocumentParams.setTextDocument(textDocumentIdentifier);
+ languageServer.didClose(didCloseTextDocumentParams);
+ }
+ }
+
+ public Path getActivatorPath() {
+ return this.activationChecker.getActivatorPath();
+ }
+}
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateAccessors.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateAccessors.java
index 1e338c22dfe..f121cfde42f 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateAccessors.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateAccessors.java
@@ -1,9 +1,9 @@
-package com.redhat;
+package org.apache.kie;
-public class ${ className }{
+public class ${ className } {
- public ${ className }(){
- new ${ fqcn }().${ query }
+ public ${ className }() {
+ var field = new ${ fqcn }().${ query }
}
}
\ No newline at end of file
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateClass.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateClass.java
index dee5fe4bb1b..d29e7333310 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateClass.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/main/resources/templates/templateClass.java
@@ -1,7 +1,7 @@
-package com.redhat;
+package org.apache.kie;
import ${ query }
-public class ${ className }{
+public class ${ className } {
}
\ No newline at end of file
diff --git
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/test/java/org/kogito/core/internal/handlers/GetAccessorsHandlerTest.java
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/test/java/org/kogito/core/internal/handlers/GetAccessorsHandlerTest.java
index 9a1e36fcde1..aa9914e14bc 100644
---
a/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/test/java/org/kogito/core/internal/handlers/GetAccessorsHandlerTest.java
+++
b/packages/vscode-java-code-completion-extension-plugin/vscode-java-code-completion-extension-plugin-core/src/test/java/org/kogito/core/internal/handlers/GetAccessorsHandlerTest.java
@@ -35,7 +35,7 @@ class GetAccessorsHandlerTest {
@BeforeEach
public void setUp() {
- this.getAccessorHandler = new GetAccessorsHandler(null, null, null);
+ this.getAccessorHandler = new GetAccessorsHandler(null, null, null,
null);
}
@Test
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]