Remove ChangeSetSingletonManager class Instead of relying on the `ChangeSetSingletonManager` class, lean on the Guice binding and injection. This change only removes the singleton manager and propagate the `ChangeSetData` manually via consturctors and method arguments. Later we can refactor code to use Guice injections and simplify it this way. Change-Id: Iacac3d620a00f7d1b6acb5151dc0db10ac4721f0
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java index d4baa7e..187d7c2 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/PatchSetReviewer.java
@@ -32,6 +32,7 @@ private final Configuration config; private final GerritClient gerritClient; + private final ChangeSetData changeSetData; @Getter private IChatGptClient chatGptClient; @@ -41,9 +42,10 @@ private List<Integer> reviewScores; @Inject - PatchSetReviewer(GerritClient gerritClient, Configuration config) { + PatchSetReviewer(GerritClient gerritClient, Configuration config, ChangeSetData changeSetData) { this.config = config; this.gerritClient = gerritClient; + this.changeSetData = changeSetData; } public void review(GerritChange change) throws Exception { @@ -57,7 +59,7 @@ log.info("No file to review has been found in the PatchSet"); return; } - ChangeSetDataHandler.update(config, change, gerritClient); + ChangeSetDataHandler.update(config, change, gerritClient, changeSetData); String reviewReply = getReviewReply(change, patchSet); log.debug("ChatGPT response: {}", reviewReply); @@ -96,7 +98,6 @@ private void retrieveReviewBatches(String reviewReply, GerritChange change) { ChatGptResponseContent reviewJson = getGson().fromJson(reviewReply, ChatGptResponseContent.class); - ChangeSetData changeSetData = ChangeSetDataHandler.getInstance(change); for (ChatGptReplyItem replyItem : reviewJson.getReplies()) { String reply = replyItem.getReply(); Integer score = replyItem.getScore(); @@ -134,7 +135,7 @@ "client.api.chatgpt.ChatGptClient", config); registerDynamicClasses(ChatGptClientStateless.class); - return chatGptClient.ask(config, change, patchSet); + return chatGptClient.ask(config, changeSetData, change, patchSet); } private Integer getReviewScore() {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java index 9f953ce..8ae9ac8 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataHandler.java
@@ -1,39 +1,26 @@ package com.googlesource.gerrit.plugins.chatgpt.data; import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; -import com.googlesource.gerrit.plugins.chatgpt.data.singleton.ChangeSetSingletonManager; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt.ChatGptUserPrompt; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange; -import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import lombok.extern.slf4j.Slf4j; import java.util.HashSet; @Slf4j public class ChangeSetDataHandler { - - public static ChangeSetData getNewInstance(Configuration config, GerritChange change, Integer gptAccountId) { - return ChangeSetSingletonManager.getNewInstance(ChangeSetData.class, change, - gptAccountId, - config.getVotingMinScore(), - config.getVotingMaxScore()); - } - - public static ChangeSetData getInstance(GerritChange change) { - return ChangeSetSingletonManager.getInstance(ChangeSetData.class, change); - } - - public static ChangeSetData getInstance(String changeId) { - return getInstance(new GerritChange(changeId)); - } - - public static void update(Configuration config, GerritChange change, GerritClient gerritClient) { - ChangeSetData changeSetData = getInstance(change); + public static void update( + Configuration config, + GerritChange change, + GerritClient gerritClient, + ChangeSetData changeSetData + ) { GerritClientData gerritClientData = gerritClient.getClientData(change); - ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, change, gerritClientData); + ChatGptUserPrompt chatGptUserPrompt = new ChatGptUserPrompt(config, changeSetData, change, gerritClientData); changeSetData.setCommentPropertiesSize(gerritClientData.getCommentProperties().size()); changeSetData.setDirectives(new HashSet<>()); @@ -52,9 +39,4 @@ } } } - - public static void removeInstance(GerritChange change) { - ChangeSetSingletonManager.removeInstance(ChangeSetData.class, change); - } - }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java new file mode 100644 index 0000000..6f3ac7c --- /dev/null +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/ChangeSetDataProvider.java
@@ -0,0 +1,23 @@ +package com.googlesource.gerrit.plugins.chatgpt.data; + +import com.google.gerrit.server.account.AccountCache; +import com.google.inject.Inject; +import com.google.inject.Provider; +import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; + +public class ChangeSetDataProvider implements Provider<ChangeSetData> { + private final int gptAccountId; + private final Configuration config; + + @Inject + ChangeSetDataProvider(Configuration config, AccountCache accountCache) { + this.config = config; + this.gptAccountId = accountCache.getByUsername(config.getGerritUserName()).get().account().id().get(); + } + + @Override + public ChangeSetData get() { + return new ChangeSetData(gptAccountId, config.getVotingMinScore(), config.getVotingMaxScore()); + } +}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java deleted file mode 100644 index d5b6d30..0000000 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/data/singleton/ChangeSetSingletonManager.java +++ /dev/null
@@ -1,22 +0,0 @@ -package com.googlesource.gerrit.plugins.chatgpt.data.singleton; - -import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; - -public class ChangeSetSingletonManager { - public static synchronized <T> T getNewInstance(Class<T> clazz, GerritChange change, Object... constructorArgs) { - return SingletonManager.getNewInstance(clazz, getInstanceKey(clazz, change), constructorArgs); - } - - public static synchronized <T> T getInstance(Class<T> clazz, GerritChange change, Object... constructorArgs) { - return SingletonManager.getInstance(clazz, getInstanceKey(clazz, change), constructorArgs); - } - - public static synchronized void removeInstance(Class<?> clazz, GerritChange change) { - SingletonManager.removeInstance(clazz, getInstanceKey(clazz, change)); - } - - private static String getInstanceKey(Class<?> clazz, GerritChange change) { - return clazz.getName() + ":" + change.getFullChangeId(); - } - -}
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java index 229d396..885736f 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/EventHandlerTask.java
@@ -8,7 +8,6 @@ import com.google.inject.Inject; import com.googlesource.gerrit.plugins.chatgpt.PatchSetReviewer; import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; -import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler; import com.googlesource.gerrit.plugins.chatgpt.data.PluginDataHandler; import com.googlesource.gerrit.plugins.chatgpt.data.ProjectDataHandler; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; @@ -39,6 +38,7 @@ private final Configuration config; private final GerritClient gerritClient; private final GitRepoFiles gitRepoFiles; + private final ChangeSetData changeSetData; private final GerritChange change; private final PatchSetReviewer reviewer; private final PluginDataHandler pluginDataHandler; @@ -46,12 +46,14 @@ @Inject EventHandlerTask( Configuration config, + ChangeSetData changeSetData, GerritChange change, PatchSetReviewer reviewer, GerritClient gerritClient, GitRepoFiles gitRepoFiles, PluginDataHandler pluginDataHandler ) { + this.changeSetData = changeSetData; this.change = change; this.reviewer = reviewer; this.gerritClient = gerritClient; @@ -67,13 +69,10 @@ @VisibleForTesting public Result execute() { - Integer gptAccountId = gerritClient.getNotNullAccountId(change, config.getGerritUserName()); - ChangeSetData changeSetData = ChangeSetDataHandler.getNewInstance(config, change, gptAccountId); GitRepoFilesHandler.createNewInstance(gitRepoFiles); ProjectDataHandler.createNewInstance(pluginDataHandler); if (!preProcessEvent(change, changeSetData)) { - destroy(change); return Result.NOT_SUPPORTED; } @@ -87,8 +86,6 @@ Thread.currentThread().interrupt(); } return Result.FAILURE; - } finally { - destroy(change); } return Result.OK; } @@ -128,11 +125,6 @@ return true; } - private void destroy(GerritChange change) { - log.info("destroying {}",change); - ChangeSetDataHandler.removeInstance(change); - } - private boolean isReviewEnabled(GerritChange change) { List<String> enabledProjects = Splitter.on(",").omitEmptyStrings() .splitToList(config.getEnabledProjects());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java index b25d564..9baa8ef 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/listener/GerritEventContextModule.java
@@ -3,7 +3,11 @@ import com.google.gerrit.extensions.config.FactoryModule; import com.google.gerrit.server.events.Event; import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; +import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataProvider; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; + +import static com.google.inject.Scopes.SINGLETON; public class GerritEventContextModule extends FactoryModule { private final Event event; @@ -18,5 +22,6 @@ protected void configure() { bind(Configuration.class).toInstance(config); bind(GerritChange.class).toInstance(new GerritChange(event)); + bind(ChangeSetData.class).toProvider(ChangeSetDataProvider.class).in(SINGLETON); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java index dedd320..e5b8548 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClient.java
@@ -47,7 +47,7 @@ return gerritClientFacade.getFileDiffsProcessed(); } - public Integer getNotNullAccountId(GerritChange change, String authorUsername) { + public Integer getNotNullAccountId(String authorUsername) { return gerritClientFacade.getNotNullAccountId(authorUsername); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java index cecebbb..9729c4a 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientComments.java
@@ -6,6 +6,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -22,6 +23,7 @@ public class GerritClientComments extends GerritClientAccount { private static final Integer MAX_SECS_GAP_BETWEEN_EVENT_AND_COMMENT = 2; + private final ChangeSetData changeSetData; private final HashMap<String, GerritComment> commentMap; private final HashMap<String, GerritComment> patchSetCommentMap; @@ -29,8 +31,9 @@ @Getter private List<GerritComment> commentProperties; - public GerritClientComments(Configuration config) { + public GerritClientComments(Configuration config, ChangeSetData changeSetData) { super(config); + this.changeSetData = changeSetData; commentProperties = new ArrayList<>(); commentMap = new HashMap<>(); patchSetCommentMap = new HashMap<>(); @@ -104,7 +107,7 @@ } private void addLastComments(GerritChange change) { - ClientMessage clientMessage = new ClientMessage(config, change); + ClientMessage clientMessage = new ClientMessage(config, changeSetData, change); try { List<GerritComment> latestComments = retrieveComments(change); if (latestComments == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java index 03bc163..f67c82a 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientDetail.java
@@ -1,11 +1,11 @@ package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit; import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; -import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetDetail; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import lombok.extern.slf4j.Slf4j; import java.net.URI; @@ -16,9 +16,11 @@ @Slf4j public class GerritClientDetail extends GerritClientBase { private GerritPatchSetDetail gerritPatchSetDetail; + private final int gptAccountId; - public GerritClientDetail(Configuration config) { + public GerritClientDetail(Configuration config, ChangeSetData changeSetData) { super(config); + this.gptAccountId = changeSetData.getGptAccountId(); } public List<GerritComment> getMessages(GerritChange change) { @@ -32,7 +34,6 @@ } public GerritPermittedVotingRange getPermittedVotingRange(GerritChange change) { - int gptAccountId = ChangeSetDataHandler.getInstance(change).getGptAccountId(); loadPatchSetDetail(change); List<GerritPatchSetDetail.Permission> permissions = gerritPatchSetDetail.getLabels().getCodeReview().getAll(); if (permissions == null) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java index 0c253c1..0da1a4e 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientFacade.java
@@ -5,6 +5,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.ModeClassLoader; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPermittedVotingRange; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.gerrit.GerritClientPatchSetStateless; import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit.GerritClientPatchSetStateful; @@ -17,17 +18,19 @@ @Slf4j public class GerritClientFacade { + private final ChangeSetData changeSetData; private final GerritClientDetail gerritClientDetail; private final IGerritClientPatchSet gerritClientPatchSet; private final GerritClientComments gerritClientComments; @Inject - public GerritClientFacade(Configuration config) { - gerritClientDetail = new GerritClientDetail(config); + public GerritClientFacade(Configuration config, ChangeSetData changeSetData) { + gerritClientDetail = new GerritClientDetail(config, changeSetData); gerritClientPatchSet = (IGerritClientPatchSet) ModeClassLoader.getInstance( "client.api.gerrit.GerritClientPatchSet", config, config); + this.changeSetData = changeSetData; registerDynamicClasses(GerritClientPatchSetStateless.class, GerritClientPatchSetStateful.class); - gerritClientComments = new GerritClientComments(config); + gerritClientComments = new GerritClientComments(config, changeSetData); } public GerritPermittedVotingRange getPermittedVotingRange(GerritChange change) { @@ -35,7 +38,7 @@ } public String getPatchSet(GerritChange change) throws Exception { - return gerritClientPatchSet.getPatchSet(change); + return gerritClientPatchSet.getPatchSet(changeSetData, change); } public boolean isDisabledUser(String authorUsername) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java index a30bc85..bbb8bfc 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/api/gerrit/GerritClientPatchSet.java
@@ -4,6 +4,7 @@ import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -34,12 +35,12 @@ } } - protected int getChangeSetRevisionBase(GerritChange change) { - return isChangeSetBased(change) ? 0 : revisionBase; + protected int getChangeSetRevisionBase(ChangeSetData changeSetData) { + return isChangeSetBased(changeSetData) ? 0 : revisionBase; } - private boolean isChangeSetBased(GerritChange change) { - return !ChangeSetDataHandler.getInstance(change).getForcedReviewLastPatchSet(); + private boolean isChangeSetBased(ChangeSetData changeSetData) { + return !changeSetData.getForcedReviewLastPatchSet(); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java index baf4373..43edc62 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/commands/ClientCommands.java
@@ -52,9 +52,9 @@ @Getter private boolean containingHistoryCommand; - public ClientCommands(GerritChange change) { - changeSetData = ChangeSetDataHandler.getInstance(change); - directives = new Directives(change); + public ClientCommands(ChangeSetData changeSetData, GerritChange change) { + this.changeSetData = changeSetData; + directives = new Directives(changeSetData); containingHistoryCommand = false; }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java index a3b0bfc..8e3a0bf 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/messages/ClientMessage.java
@@ -4,6 +4,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.ClientBase; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.commands.ClientCommands; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -21,14 +22,14 @@ @Getter private String message; - public ClientMessage(Configuration config, GerritChange change) { + public ClientMessage(Configuration config, ChangeSetData changeSetData, GerritChange change) { super(config); botMentionPattern = getBotMentionPattern(); - clientCommands = new ClientCommands(change); + clientCommands = new ClientCommands(changeSetData, change); } - public ClientMessage(Configuration config, GerritChange change, String message) { - this(config, change); + public ClientMessage(Configuration config, ChangeSetData changeSetData, GerritChange change, String message) { + this(config, changeSetData, change); this.message = message; }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java index ea7ef6e..59e9a89 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptComment.java
@@ -6,23 +6,24 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.messages.ClientMessage; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import lombok.extern.slf4j.Slf4j; @Slf4j public class ChatGptComment extends ClientBase { protected ClientMessage commentMessage; - private final Integer gptAccountId; private final GerritChange change; + private final ChangeSetData changeSetData; - public ChatGptComment(Configuration config, GerritChange change) { + public ChatGptComment(Configuration config, ChangeSetData changeSetData, GerritChange change) { super(config); this.change = change; - gptAccountId = ChangeSetDataHandler.getInstance(change).getGptAccountId(); + this.changeSetData = changeSetData; } protected String getCleanedMessage(GerritComment commentProperty) { - commentMessage = new ClientMessage(config, change, commentProperty.getMessage()); + commentMessage = new ClientMessage(config, changeSetData, change, commentProperty.getMessage()); if (isFromAssistant(commentProperty)) { commentMessage.removeDebugMessages(); } @@ -33,7 +34,7 @@ } protected boolean isFromAssistant(GerritComment commentProperty) { - return commentProperty.getAuthor().getAccountId() == gptAccountId; + return commentProperty.getAuthor().getAccountId() == changeSetData.getGptAccountId(); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java index b5eb5ec..b2b50e3 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptHistory.java
@@ -4,6 +4,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import com.googlesource.gerrit.plugins.chatgpt.settings.Settings; @@ -30,8 +31,8 @@ private boolean filterActive; - public ChatGptHistory(Configuration config, GerritChange change, GerritClientData gerritClientData) { - super(config, change); + public ChatGptHistory(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) { + super(config, changeSetData, change); CommentData commentData = gerritClientData.getCommentData(); commentMap = commentData.getCommentMap(); patchSetCommentMap = commentData.getPatchSetCommentMap();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java index 244899c..5a4b3aa 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPrompt.java
@@ -3,6 +3,7 @@ import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import lombok.extern.slf4j.Slf4j; @@ -14,12 +15,12 @@ public class ChatGptUserPrompt { private final ChatGptUserPromptBase chatGptUserPromptBase; - public ChatGptUserPrompt(Configuration config, GerritChange change, GerritClientData gerritClientData) { + public ChatGptUserPrompt(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) { if (change.getIsCommentEvent()) { - chatGptUserPromptBase = new ChatGptUserPromptRequests(config, change, gerritClientData); + chatGptUserPromptBase = new ChatGptUserPromptRequests(config, changeSetData, change, gerritClientData); } else { - chatGptUserPromptBase = new ChatGptUserPromptReview(config, change, gerritClientData); + chatGptUserPromptBase = new ChatGptUserPromptReview(config, changeSetData, change, gerritClientData); } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java index 6c273a8..78482dc 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptBase.java
@@ -7,6 +7,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritComment; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.CommentData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import lombok.Getter; @@ -28,11 +29,11 @@ @Getter protected List<GerritComment> commentProperties; - public ChatGptUserPromptBase(Configuration config, GerritChange change, GerritClientData gerritClientData) { + public ChatGptUserPromptBase(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) { this.gerritClientData = gerritClientData; fileDiffsProcessed = gerritClientData.getFileDiffsProcessed(); commentData = gerritClientData.getCommentData(); - gptMessageHistory = new ChatGptHistory(config, change, gerritClientData); + gptMessageHistory = new ChatGptHistory(config, changeSetData, change, gerritClientData); messageItems = new ArrayList<>(); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java index 2b4fdf1..1cde7c5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptRequests.java
@@ -4,6 +4,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import lombok.extern.slf4j.Slf4j; @@ -11,8 +12,8 @@ @Slf4j public class ChatGptUserPromptRequests extends ChatGptUserPromptBase { - public ChatGptUserPromptRequests(Configuration config, GerritChange change, GerritClientData gerritClientData) { - super(config, change, gerritClientData); + public ChatGptUserPromptRequests(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) { + super(config, changeSetData, change, gerritClientData); commentProperties = commentData.getCommentProperties(); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java index 0baea6c..7c87b63 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/ChatGptUserPromptReview.java
@@ -4,6 +4,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptMessageItem; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.ChatGptRequestMessage; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.GerritClientData; import lombok.extern.slf4j.Slf4j; @@ -12,8 +13,8 @@ @Slf4j public class ChatGptUserPromptReview extends ChatGptUserPromptBase { - public ChatGptUserPromptReview(Configuration config, GerritChange change, GerritClientData gerritClientData) { - super(config, change, gerritClientData); + public ChatGptUserPromptReview(Configuration config, ChangeSetData changeSetData, GerritChange change, GerritClientData gerritClientData) { + super(config, changeSetData, change, gerritClientData); commentProperties = new ArrayList<>(commentData.getCommentMap().values()); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java index 6abcfd4..a714013 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/common/client/prompt/Directives.java
@@ -1,15 +1,13 @@ package com.googlesource.gerrit.plugins.chatgpt.mode.common.client.prompt; -import com.googlesource.gerrit.plugins.chatgpt.data.ChangeSetDataHandler; -import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; public class Directives { private final ChangeSetData changeSetData; private String directive; - public Directives(GerritChange change) { - changeSetData = ChangeSetDataHandler.getInstance(change); + public Directives(ChangeSetData changeSetData) { + this.changeSetData = changeSetData; } public void addDirective(String directive) {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java index 4c307ed..c13e410 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/chatgpt/IChatGptClient.java
@@ -2,9 +2,10 @@ import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; public interface IChatGptClient { - String ask(Configuration config, String changeId, String patchSet) throws Exception; - String ask(Configuration config, GerritChange change, String patchSet) throws Exception; + String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception; + String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception; String getRequestBody(); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java index 38dfc60..829b66c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/interfaces/client/api/gerrit/IGerritClientPatchSet.java
@@ -2,11 +2,12 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import java.util.HashMap; public interface IGerritClientPatchSet { - String getPatchSet(GerritChange change) throws Exception; + String getPatchSet(ChangeSetData changeSetData, GerritChange gerritChange) throws Exception; boolean isDisabledUser(String authorUsername); boolean isDisabledTopic(String topic); void retrieveRevisionBase(GerritChange change);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java index 9e72e98..f409fb5 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/chatgpt/ChatGptClientStateful.java
@@ -3,6 +3,7 @@ import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient; import lombok.extern.slf4j.Slf4j; @@ -10,13 +11,13 @@ @Singleton public class ChatGptClientStateful implements IChatGptClient { @Override - public String ask(Configuration config, String changeId, String patchSet) throws Exception { + public String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception { // Placeholder implementation, change to actual logic later. throw new UnsupportedOperationException("Method not implemented yet."); } @Override - public String ask(Configuration config, GerritChange change, String patchSet) throws Exception { + public String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception { // Placeholder implementation, change to actual logic later. throw new UnsupportedOperationException("Method not implemented yet."); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java index 1336685..e563337 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateful/client/api/gerrit/GerritClientPatchSetStateful.java
@@ -1,6 +1,7 @@ package com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.gerrit; import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.chatgpt.ChatGptAssistant; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientPatchSet; @@ -14,7 +15,7 @@ super(config); } - public String getPatchSet(GerritChange change) { + public String getPatchSet(ChangeSetData changeSetData, GerritChange change) { ChatGptAssistant chatGptAssistant = new ChatGptAssistant(config, change); chatGptAssistant.setupAssistant();
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java index ef2fa20..b8f9d85 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/chatgpt/ChatGptClientStateless.java
@@ -7,6 +7,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.http.HttpClientWithRetry; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.chatgpt.*; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient; import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.UriResourceLocatorStateless; import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptPromptStateless; @@ -37,9 +38,9 @@ private boolean isCommentEvent = false; @Override - public String ask(Configuration config, String changeId, String patchSet) throws Exception { + public String ask(Configuration config, ChangeSetData changeSetData, String changeId, String patchSet) throws Exception { for (int attemptInd = 0; attemptInd < REVIEW_ATTEMPT_LIMIT; attemptInd++) { - HttpRequest request = createRequest(config, changeId, patchSet); + HttpRequest request = createRequest(config, changeSetData, patchSet); log.debug("ChatGPT request: {}", request.toString()); HttpResponse<String> response = httpClientWithRetry.execute(request); @@ -59,10 +60,10 @@ } @Override - public String ask(Configuration config, GerritChange change, String patchSet) throws Exception { + public String ask(Configuration config, ChangeSetData changeSetData, GerritChange change, String patchSet) throws Exception { isCommentEvent = change.getIsCommentEvent(); - return this.ask(config, change.getFullChangeId(), patchSet); + return this.ask(config, changeSetData, change.getFullChangeId(), patchSet); } private String extractContent(Configuration config, String body) throws Exception { @@ -101,10 +102,10 @@ return toolCalls.get(0).getFunction().getArguments(); } - private HttpRequest createRequest(Configuration config, String changeId, String patchSet) { + private HttpRequest createRequest(Configuration config, ChangeSetData changeSetData, String patchSet) { URI uri = URI.create(config.getGptDomain() + UriResourceLocatorStateless.chatCompletionsUri()); log.debug("ChatGPT request URI: {}", uri); - requestBody = createRequestBody(config, changeId, patchSet); + requestBody = createRequestBody(config, changeSetData, patchSet); log.debug("ChatGPT request body: {}", requestBody); return HttpRequest.newBuilder() @@ -115,7 +116,7 @@ .build(); } - private String createRequestBody(Configuration config, String changeId, String patchSet) { + private String createRequestBody(Configuration config, ChangeSetData changeSetData, String patchSet) { ChatGptPromptStateless chatGptPromptStateless = new ChatGptPromptStateless(config, isCommentEvent); ChatGptRequestMessage systemMessage = ChatGptRequestMessage.builder() .role("system") @@ -123,7 +124,7 @@ .build(); ChatGptRequestMessage userMessage = ChatGptRequestMessage.builder() .role("user") - .content(chatGptPromptStateless.getGptUserPrompt(patchSet, changeId)) + .content(chatGptPromptStateless.getGptUserPrompt(changeSetData, patchSet)) .build(); ChatGptParameters chatGptParameters = new ChatGptParameters(config, isCommentEvent);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java index b22de58..a843172 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/api/gerrit/GerritClientPatchSetStateless.java
@@ -8,6 +8,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.patch.diff.FileDiffProcessed; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritPatchSetFileDiff; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.api.gerrit.GerritReviewFileDiff; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.gerrit.IGerritClientPatchSet; import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.api.UriResourceLocatorStateless; import lombok.extern.slf4j.Slf4j; @@ -30,8 +31,8 @@ diffs = new ArrayList<>(); } - public String getPatchSet(GerritChange change) throws Exception { - int revisionBase = getChangeSetRevisionBase(change); + public String getPatchSet(ChangeSetData changeSetData, GerritChange change) throws Exception { + int revisionBase = getChangeSetRevisionBase(changeSetData); log.debug("Revision base: {}", revisionBase); List<String> files = getAffectedFiles(change.getFullChangeId(), revisionBase);
diff --git a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java index 3aa4621..484ba0d 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java +++ b/src/main/java/com/googlesource/gerrit/plugins/chatgpt/mode/stateless/client/prompt/ChatGptPromptStateless.java
@@ -50,9 +50,8 @@ return concatenate(prompt); } - public String getGptUserPrompt(String patchSet, String changeId) { + public String getGptUserPrompt(ChangeSetData changeSetData, String patchSet) { List<String> prompt = new ArrayList<>(); - ChangeSetData changeSetData = ChangeSetDataHandler.getInstance(changeId); String gptRequestUserPrompt = changeSetData.getGptRequestUserPrompt(); boolean isValidRequestUserPrompt = gptRequestUserPrompt != null && !gptRequestUserPrompt.isEmpty(); if (isCommentEvent && isValidRequestUserPrompt) {
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java index 5f73c4d..c63ec7e 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java +++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/ChatGptReviewTestBase.java
@@ -5,9 +5,12 @@ import com.github.tomakehurst.wiremock.matching.RequestPatternBuilder; import com.github.tomakehurst.wiremock.verification.LoggedRequest; import com.google.common.net.HttpHeaders; +import com.google.gerrit.entities.Account; import com.google.gerrit.entities.BranchNameKey; import com.google.gerrit.entities.Change; import com.google.gerrit.entities.Project; +import com.google.gerrit.server.account.AccountCache; +import com.google.gerrit.server.account.AccountState; import com.google.gerrit.server.config.PluginConfig; import com.google.gerrit.server.data.AccountAttribute; import com.google.gerrit.server.data.PatchSetAttribute; @@ -29,6 +32,7 @@ import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritChange; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientFacade; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.stateful.client.api.git.GitRepoFiles; import lombok.NonNull; import org.apache.http.entity.ContentType; @@ -43,13 +47,17 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.time.Instant; +import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; import static com.google.gerrit.extensions.client.ChangeKind.REWORK; import static com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.UriResourceLocator.*; import static com.googlesource.gerrit.plugins.chatgpt.utils.GsonUtils.getGson; import static java.net.HttpURLConnection.HTTP_OK; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; @@ -71,6 +79,7 @@ protected static final BranchNameKey BRANCH_NAME = BranchNameKey.create(PROJECT_NAME, "myBranchName"); protected static final boolean GPT_STREAM_OUTPUT = true; protected static final long TEST_TIMESTAMP = 1699270812; + private static final int GPT_USER_ACCOUNT_ID = 1000000; @Rule public WireMockRule wireMockRule = new WireMockRule(9527); @@ -216,6 +225,7 @@ bind(ConfigCreator.class).toInstance(mockConfigCreator); bind(PatchSetReviewer.class).toInstance(patchSetReviewer); bind(PluginDataHandler.class).toInstance(pluginDataHandler); + bind(AccountCache.class).toInstance(mockAccountCache()); } }).getInstance(EventHandlerTask.class); return task.execute(); @@ -232,8 +242,9 @@ } private void initTest () throws NoSuchProjectException { - gerritClient = new GerritClient(new GerritClientFacade(config)); - patchSetReviewer = new PatchSetReviewer(gerritClient, config); + ChangeSetData changeSetData = new ChangeSetData(GPT_USER_ACCOUNT_ID, config.getVotingMinScore(), config.getMaxReviewFileSize()); + gerritClient = new GerritClient(new GerritClientFacade(config, changeSetData)); + patchSetReviewer = new PatchSetReviewer(gerritClient, config, changeSetData); mockConfigCreator = mock(ConfigCreator.class); } @@ -280,4 +291,12 @@ when(event.getChangeKey()).thenReturn(CHANGE_ID); } + private AccountCache mockAccountCache() { + AccountCache accountCache = mock(AccountCache.class); + Account account = Account.builder(Account.id(GPT_USER_ACCOUNT_ID), Instant.now()).build(); + AccountState accountState = AccountState.forAccount(account, Collections.emptyList()); + doReturn(Optional.of(accountState)).when(accountCache).getByUsername(GERRIT_GPT_USERNAME); + + return accountCache; + } }
diff --git a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java index 77baa74..854de47 100644 --- a/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java +++ b/src/test/java/com/googlesource/gerrit/plugins/chatgpt/integration/CodeReviewPluginIT.java
@@ -3,6 +3,7 @@ import com.googlesource.gerrit.plugins.chatgpt.config.Configuration; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClient; import com.googlesource.gerrit.plugins.chatgpt.mode.common.client.api.gerrit.GerritClientReview; +import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.data.ChangeSetData; import com.googlesource.gerrit.plugins.chatgpt.mode.common.model.review.ReviewBatch; import com.googlesource.gerrit.plugins.chatgpt.mode.interfaces.client.api.chatgpt.IChatGptClient; import com.googlesource.gerrit.plugins.chatgpt.mode.stateless.client.prompt.ChatGptPromptStateless; @@ -36,13 +37,14 @@ @Test public void sayHelloToGPT() throws Exception { + ChangeSetData changeSetData = new ChangeSetData(1, config.getVotingMinScore(), config.getMaxReviewFileSize()); ChatGptPromptStateless chatGptPromptStateless = new ChatGptPromptStateless(config, true); when(config.getGptDomain()).thenReturn(Configuration.OPENAI_DOMAIN); when(config.getGptToken()).thenReturn("Your GPT token"); when(config.getGptModel()).thenReturn(Configuration.DEFAULT_GPT_MODEL); when(chatGptPromptStateless.getGptSystemPrompt()).thenReturn(ChatGptPromptStateless.DEFAULT_GPT_SYSTEM_PROMPT); - String answer = chatGptClient.ask(config, "", "hello"); + String answer = chatGptClient.ask(config, changeSetData, "", "hello"); log.info("answer: {}", answer); assertNotNull(answer); }