From 7250a56f47c55ebea4fd355c5179d33f14107a07 Mon Sep 17 00:00:00 2001 From: Juan Manuel Leflet Estrada Date: Mon, 20 Jan 2025 14:04:09 +0100 Subject: [PATCH] Add CLASS location Signed-off-by: Juan Manuel Leflet Estrada --- .../SampleDelegateCommandHandler.java | 3 + .../ClassDeclarationSymbolProvider.java | 62 +++++++++++++++++++ .../symbol/SymbolProviderResolver.java | 1 + 3 files changed, 66 insertions(+) create mode 100644 java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/ClassDeclarationSymbolProvider.java diff --git a/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/SampleDelegateCommandHandler.java b/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/SampleDelegateCommandHandler.java index 59e3b27..160047c 100644 --- a/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/SampleDelegateCommandHandler.java +++ b/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/SampleDelegateCommandHandler.java @@ -140,6 +140,7 @@ private static SearchPattern mapLocationToSearchPatternLocation(int location, St * "package": 11, * "field": 12, * "method_declaration": 13, + * "class_declaration": 14, * * @param location * @param query @@ -179,6 +180,8 @@ private static SearchPattern getPatternSingleQuery(int location, String query) t return SearchPattern.createPattern(query, IJavaSearchConstants.TYPE, IJavaSearchConstants.FIELD_DECLARATION_TYPE_REFERENCE, pattern); case 13: return SearchPattern.createPattern(query, IJavaSearchConstants.METHOD, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_PATTERN_MATCH); + case 14: + return SearchPattern.createPattern(query, IJavaSearchConstants.CLASS, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_EXACT_MATCH | SearchPattern.R_PATTERN_MATCH); } throw new Exception("unable to create search pattern"); } diff --git a/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/ClassDeclarationSymbolProvider.java b/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/ClassDeclarationSymbolProvider.java new file mode 100644 index 0000000..716c487 --- /dev/null +++ b/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/ClassDeclarationSymbolProvider.java @@ -0,0 +1,62 @@ +package io.konveyor.tackle.core.internal.symbol; + +import io.konveyor.tackle.core.internal.query.AnnotationQuery; +import org.eclipse.jdt.core.IJavaElement; +import org.eclipse.jdt.core.IMethod; +import org.eclipse.jdt.core.IType; +import org.eclipse.jdt.core.search.MethodDeclarationMatch; +import org.eclipse.jdt.core.search.SearchMatch; +import org.eclipse.jdt.core.search.TypeDeclarationMatch; +import org.eclipse.jdt.internal.core.ResolvedSourceMethod; +import org.eclipse.jdt.internal.core.ResolvedSourceType; +import org.eclipse.jdt.internal.core.SourceRefElement; +import org.eclipse.lsp4j.SymbolInformation; +import org.eclipse.lsp4j.SymbolKind; + +import java.util.ArrayList; +import java.util.List; + +import static org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin.logInfo; + +public class ClassDeclarationSymbolProvider implements SymbolProvider, WithQuery, WithAnnotationQuery { + private String query; + private AnnotationQuery annotationQuery; + + public List get(SearchMatch match) { + SymbolKind k = convertSymbolKind((IJavaElement) match.getElement()); + List symbols = new ArrayList<>(); + try { + TypeDeclarationMatch m = (TypeDeclarationMatch) match; + IType e = (IType) m.getElement(); + SymbolInformation symbol = new SymbolInformation(); + symbol.setName(e.getElementName()); + symbol.setKind(convertSymbolKind(e)); + symbol.setContainerName(e.getParent().getElementName()); + symbol.setLocation(getLocation(e, match)); + + List> classes = new ArrayList<>(); + classes.add(ResolvedSourceType.class); + if (matchesAnnotationQuery(match, classes)) { + symbols.add(symbol); + } + } catch (Exception e) { + logInfo("unable to convert for variable: " + e); + } + + return symbols; + } + + public void setQuery(String query) { + this.query = query; + } + + @Override + public AnnotationQuery getAnnotationQuery() { + return this.annotationQuery; + } + + public void setAnnotationQuery(AnnotationQuery annotationQuery) { + this.annotationQuery = annotationQuery; + } + +} diff --git a/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/SymbolProviderResolver.java b/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/SymbolProviderResolver.java index b2063a9..64f3875 100644 --- a/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/SymbolProviderResolver.java +++ b/java-analyzer-bundle.core/src/main/java/io/konveyor/tackle/core/internal/symbol/SymbolProviderResolver.java @@ -22,6 +22,7 @@ public SymbolProviderResolver() { map.put(11, new ReferenceSymbolProvider()); map.put(12, new FieldSymbolProvider()); map.put(13, new MethodDeclarationSymbolProvider()); + map.put(14, new ClassDeclarationSymbolProvider()); } public SymbolProvider resolve(Integer i) {