Skip to content

Commit

Permalink
chore: Add telemetry for authoring features (#1127)
Browse files Browse the repository at this point in the history
  • Loading branch information
CsCherrYY authored Dec 22, 2021
1 parent 6b99786 commit f00c98b
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 20 deletions.
71 changes: 54 additions & 17 deletions extension/src/Extension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,16 @@ import { GradleDependencyProvider } from "./dependencies/GradleDependencyProvide
import { isLanguageServerStarted, startLanguageServer, syncLanguageServer } from "./languageServer/languageServer";
import { DefaultProjectsTreeDataProvider } from "./views/defaultProject/DefaultProjectsTreeDataProvider";
import { GradleProjectContentProvider } from "./projectContent/GradleProjectContentProvider";
import { Context } from "./constant";
import {
CompletionKinds,
Context,
GRADLE_BUILD_FILE_CHANGE,
GRADLE_BUILD_FILE_OPEN,
GRADLE_COMPLETION,
GRADLE_PROPERTIES_FILE_CHANGE,
VSCODE_TRIGGER_COMPLETION,
} from "./constant";
import { instrumentOperation, sendInfo } from "vscode-extension-telemetry-wrapper";

export class Extension {
private readonly client: GradleClient;
Expand Down Expand Up @@ -181,6 +190,28 @@ export class Extension {
}
});

this.context.subscriptions.push(
vscode.commands.registerCommand(
GRADLE_COMPLETION,
instrumentOperation(GRADLE_COMPLETION, async (operationId: string, ...args: string[]) => {
if (args.length === 2) {
const completionKind = args[0];
const completionContent = args[1];
sendInfo(operationId, {
kind: completionKind,
content: completionContent,
});
if (
completionKind === CompletionKinds.DEPENDENCY_GROUP ||
completionKind === CompletionKinds.DEPENDENCY_ARTIFACT
) {
vscode.commands.executeCommand(VSCODE_TRIGGER_COMPLETION);
}
}
})
)
);

void this.activate();
void startLanguageServer(this.context, this.gradleProjectContentProvider);
void vscode.commands.executeCommand("setContext", "allowParallelRun", getAllowParallelRun());
Expand Down Expand Up @@ -258,22 +289,28 @@ export class Extension {
}

private handleWatchEvents(): void {
this.buildFileWatcher.onDidChange(async (uri: vscode.Uri) => {
logger.info("Build file changed:", uri.fsPath);
await this.refresh();
void this.syncBuildFile(uri);
});
this.buildFileWatcher.onDidOpen(async (uri: vscode.Uri) => {
logger.info("Build file opened:", uri.fsPath);
void this.syncBuildFile(uri);
});
this.gradleWrapperWatcher.onDidChange(async (uri: vscode.Uri) => {
logger.info("Gradle wrapper properties changed:", uri.fsPath);
await this.restartServer();
if (isLanguageServerStarted) {
void vscode.commands.executeCommand("gradle.distributionChanged");
}
});
this.buildFileWatcher.onDidChange(
instrumentOperation(GRADLE_BUILD_FILE_CHANGE, async (_operationId: string, uri: vscode.Uri) => {
logger.info("Build file changed:", uri.fsPath);
await this.refresh();
void this.syncBuildFile(uri);
})
);
this.buildFileWatcher.onDidOpen(
instrumentOperation(GRADLE_BUILD_FILE_OPEN, async (_operationId: string, uri: vscode.Uri) => {
logger.info("Build file opened:", uri.fsPath);
void this.syncBuildFile(uri);
})
);
this.gradleWrapperWatcher.onDidChange(
instrumentOperation(GRADLE_PROPERTIES_FILE_CHANGE, async (_operationId: string, uri: vscode.Uri) => {
logger.info("Gradle wrapper properties changed:", uri.fsPath);
await this.restartServer();
if (isLanguageServerStarted) {
void vscode.commands.executeCommand("gradle.distributionChanged");
}
})
);
}

private async syncBuildFile(uri: vscode.Uri): Promise<void> {
Expand Down
18 changes: 18 additions & 0 deletions extension/src/constant.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,21 @@
export namespace Context {
export const ACTIVATION_CONTEXT_KEY = "gradle:extensionActivated";
}

export const GRADLE_BUILD_FILE_CHANGE = "gradle.buildFileChanged";

export const GRADLE_BUILD_FILE_OPEN = "gradle.buildFileOpened";

export const GRADLE_PROPERTIES_FILE_CHANGE = "gradle.propertiesFileChanged";

export const GRADLE_COMPLETION = "gradle.completion";

export const VSCODE_TRIGGER_COMPLETION = "editor.action.triggerSuggest";

export enum CompletionKinds {
DEPENDENCY_GROUP = "dependency_group",
DEPENDENCY_ARTIFACT = "dependency_artifact",
DEPENDENCY_VERSION = "dependency_version",
METHOD_CALL = "method_call",
PROPERTY = "property",
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.microsoft.gradle.resolver.GradleField;
import com.microsoft.gradle.resolver.GradleLibraryResolver;
import com.microsoft.gradle.resolver.GradleMethod;
import com.microsoft.gradle.utils.CompletionUtils;
import com.microsoft.gradle.utils.CompletionUtils.CompletionKinds;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
Expand All @@ -21,6 +23,7 @@
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.ObjectType;
import org.codehaus.groovy.ast.expr.MethodCallExpression;
import org.eclipse.lsp4j.Command;
import org.eclipse.lsp4j.CompletionItem;
import org.eclipse.lsp4j.CompletionItemKind;
import org.eclipse.lsp4j.CompletionItemTag;
Expand Down Expand Up @@ -121,6 +124,11 @@ private List<CompletionItem> getCompletionItemsFromClass(JavaClass javaClass, Gr
property.setTags(Arrays.asList(CompletionItemTag.Deprecated));
}
property.setKind(CompletionItemKind.Property);
List<Object> propertyArguments = new ArrayList<>();
propertyArguments.add(CompletionKinds.PROPERTY.toString());
propertyArguments.add(propertyName);
item.setCommand(new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand,
propertyArguments));
if (resultSet.add(propertyName)) {
results.add(property);
}
Expand All @@ -140,6 +148,11 @@ private List<CompletionItem> getCompletionItemsFromClass(JavaClass javaClass, Gr
item.setKind(CompletionItemKind.Function);
item.setInsertTextFormat(InsertTextFormat.Snippet);
item.setInsertText(insertBuilder.toString());
List<Object> arguments = new ArrayList<>();
arguments.add(CompletionKinds.METHOD_CALL.toString());
arguments.add(plugin);
item.setCommand(
new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand, arguments));
results.add(item);
}
}
Expand All @@ -164,6 +177,10 @@ private List<CompletionItem> getCompletionItemsFromExtClosures(GradleLibraryReso
insertTextBuilder.append(closure.name);
insertTextBuilder.append(" {$0}");
item.setInsertText(insertTextBuilder.toString());
List<Object> arguments = new ArrayList<>();
arguments.add(CompletionKinds.METHOD_CALL.toString());
arguments.add(closure.name);
item.setCommand(new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand, arguments));
if (resultSet.add(item.getLabel())) {
results.add(item);
}
Expand Down Expand Up @@ -193,6 +210,11 @@ private List<CompletionItem> getCompletionItemsFromExtClosures(GradleLibraryReso
if (field.deprecated) {
property.setTags(Arrays.asList(CompletionItemTag.Deprecated));
}
List<Object> arguments = new ArrayList<>();
arguments.add(CompletionKinds.PROPERTY.toString());
arguments.add(field.name);
property.setCommand(
new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand, arguments));
if (resultSet.add(field.name)) {
results.add(property);
}
Expand Down Expand Up @@ -237,6 +259,10 @@ private static CompletionItem generateCompletionItemForMethod(String name, List<
builder.append("($0)");
}
item.setInsertText(builder.toString());
List<Object> itemArguments = new ArrayList<>();
itemArguments.add(CompletionKinds.METHOD_CALL.toString());
itemArguments.add(name);
item.setCommand(new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand, itemArguments));
return item;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.google.gson.JsonObject;
import com.microsoft.gradle.compile.CompletionVisitor.DependencyItem;
import com.microsoft.gradle.utils.CompletionUtils;
import com.microsoft.gradle.utils.CompletionUtils.CompletionKinds;
import com.microsoft.gradle.utils.LSPUtils;
import java.io.InputStreamReader;
import java.net.URL;
Expand Down Expand Up @@ -100,6 +101,7 @@ private List<CompletionItem> getDependenciesFromRestAPI(String url, DependencyCo
CompletionItem completionItem = new CompletionItem();
String groupId = ((JsonObject) element).get("g").getAsJsonPrimitive().getAsString();
String artifactId = ((JsonObject) element).get("a").getAsJsonPrimitive().getAsString();
List<Object> arguments = new ArrayList<>();
if (kind == DependencyCompletionKind.GROUPID) {
TextEdit textEdit = new TextEdit(range, groupId + ":");
completionItem.setTextEdit(Either.forLeft(textEdit));
Expand All @@ -108,6 +110,8 @@ private List<CompletionItem> getDependenciesFromRestAPI(String url, DependencyCo
completionItem.setDetail("GroupID: " + groupId);
completionItem.setCommand(
new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand));
arguments.add(CompletionKinds.DEPENDENCY_GROUP.toString());
arguments.add(groupId);
} else if (kind == DependencyCompletionKind.ARTIFACTID) {
// ${groupId}:${artifactId}
int character = range.getStart().getCharacter() + groupId.length() + 1;
Expand All @@ -120,6 +124,8 @@ private List<CompletionItem> getDependenciesFromRestAPI(String url, DependencyCo
completionItem.setDetail("ArtifactID: " + artifactId);
completionItem.setCommand(
new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand));
arguments.add(CompletionKinds.DEPENDENCY_ARTIFACT.toString());
arguments.add(groupId + ":" + artifactId);
} else if (kind == DependencyCompletionKind.VERSION) {
String version = ((JsonObject) element).get("v").getAsJsonPrimitive().getAsString();
String timestampValue = ((JsonObject) element).get("timestamp").getAsJsonPrimitive()
Expand All @@ -136,7 +142,11 @@ private List<CompletionItem> getDependenciesFromRestAPI(String url, DependencyCo
completionItem.setLabel(version);
completionItem.setKind(CompletionItemKind.Constant);
completionItem.setDetail("Updated: " + date.toString());
arguments.add(CompletionKinds.DEPENDENCY_VERSION.toString());
arguments.add(groupId + ":" + artifactId + ":" + version);
}
completionItem.setCommand(
new Command(CompletionUtils.completionTitle, CompletionUtils.completionCommand, arguments));
completionItem.setSortText(sequence + String.format("%08d", i));
completions.add(completionItem);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,25 @@

public class CompletionUtils {

public static String completionCommand = "editor.action.triggerSuggest";
public static String completionCommand = "gradle.completion";
public static String completionTitle = "completion";

public enum CompletionKinds {
DEPENDENCY_GROUP("dependency_group"), DEPENDENCY_ARTIFACT("dependency_artifact"), DEPENDENCY_VERSION(
"dependency_version"), METHOD_CALL("method_call"), PROPERTY("property");

private final String text;

CompletionKinds(final String text) {
this.text = text;
}

@Override
public String toString() {
return text;
}
}

public static List<CompletionItem> getGroupIdCompletions(String text, Range range, Collection<String> keys,
String sequence) {
List<String> results = CompletionUtils.sortResults(text, keys);
Expand All @@ -34,7 +50,10 @@ public static List<CompletionItem> getGroupIdCompletions(String text, Range rang
completionItem.setKind(CompletionItemKind.Module);
completionItem.setDetail("GroupID: " + groupId);
completionItem.setSortText(sequence + String.format("%08d", i));
completionItem.setCommand(new Command(completionTitle, completionCommand));
List<Object> arguments = new ArrayList<>();
arguments.add(CompletionKinds.DEPENDENCY_GROUP.toString());
arguments.add(groupId);
completionItem.setCommand(new Command(completionTitle, completionCommand, arguments));
items.add(completionItem);
}
return items;
Expand All @@ -56,7 +75,10 @@ public static List<CompletionItem> getArtifactIdCompletions(String groupId, Stri
completionItem.setKind(CompletionItemKind.Module);
completionItem.setDetail("ArtifactID: " + artifactId);
completionItem.setSortText(sequence + String.format("%08d", i));
completionItem.setCommand(new Command(completionTitle, completionCommand));
List<Object> arguments = new ArrayList<>();
arguments.add(CompletionKinds.DEPENDENCY_ARTIFACT.toString());
arguments.add(groupId + ":" + artifactId);
completionItem.setCommand(new Command(completionTitle, completionCommand, arguments));
items.add(completionItem);
}
return items;
Expand Down

0 comments on commit f00c98b

Please sign in to comment.