Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ dependencies {
implementation("com.fasterxml.jackson.core:jackson-databind:2.18.0")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.2") // Use latest version
implementation("org.commonmark:commonmark:0.21.0")

implementation("org.apache.httpcomponents:httpclient:4.5.13")

// IntelliJ Platform Gradle Plugin Dependencies Extension - read more: https://plugins.jetbrains.com/docs/intellij/tools-intellij-platform-gradle-plugin-dependencies-extension.html
intellijPlatform {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.github.jaksonlin.testcraft.presentation.actions;
package com.github.jaksonlin.testcraft.application.actions;

import com.github.jaksonlin.testcraft.application.commands.testscan.UnittestFileBatchScanCommand;
import com.github.jaksonlin.testcraft.core.services.InvalidTestCaseConfigService;
import com.github.jaksonlin.testcraft.infrastructure.commands.testscan.UnittestFileBatchScanCommand;
import com.github.jaksonlin.testcraft.infrastructure.services.config.InvalidTestCaseConfigService;
import com.github.jaksonlin.testcraft.infrastructure.services.system.I18nService;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.application.ApplicationManager;
Expand All @@ -11,6 +12,12 @@

public class CheckInvalidTestCasesAction extends AnAction {

@Override
public void update(@NotNull AnActionEvent e) {
super.update(e);
e.getPresentation().setText(I18nService.getInstance().message("action.CheckInvalidTestCasesAction.text"));
}


@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.github.jaksonlin.testcraft.presentation.actions;
package com.github.jaksonlin.testcraft.application.actions;

import com.github.jaksonlin.testcraft.application.commands.unittestannotations.GenerateAnnotationCommand;
import com.github.jaksonlin.testcraft.core.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.infrastructure.commands.unittestannotations.GenerateAnnotationCommand;
import com.github.jaksonlin.testcraft.infrastructure.services.system.I18nService;
import com.github.jaksonlin.testcraft.domain.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.util.Pair;
import com.github.jaksonlin.testcraft.util.PsiUtil;
import com.intellij.openapi.actionSystem.AnAction;
Expand All @@ -13,6 +14,12 @@

public class GenerateAnnotationCommandAction extends AnAction {

@Override
public void update(@NotNull AnActionEvent e) {
super.update(e);
e.getPresentation().setText(I18nService.getInstance().message("action.GenerateAnnotationCommandAction.text"));
}

@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Pair<PsiMethod, PsiClass> psiMethodInfo = PsiUtil.findMethodAtCaret(e); // Call the static method
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
package com.github.jaksonlin.testcraft.presentation.actions;
package com.github.jaksonlin.testcraft.application.actions;

import com.github.jaksonlin.testcraft.application.commands.unittestannotations.CheckAnnotationCommand;
import com.github.jaksonlin.testcraft.core.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.infrastructure.commands.unittestannotations.CheckAnnotationCommand;
import com.github.jaksonlin.testcraft.infrastructure.services.system.I18nService;
import com.github.jaksonlin.testcraft.domain.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.util.Pair;
import com.github.jaksonlin.testcraft.util.PsiUtil;
import com.intellij.openapi.actionSystem.AnAction;
Expand All @@ -28,4 +29,10 @@ public void actionPerformed(@NotNull AnActionEvent e) {
}
}

@Override
public void update(@NotNull AnActionEvent e) {
super.update(e);
e.getPresentation().setText(I18nService.getInstance().message("action.RunCaseAnnoationCheckAction.text"));
}

}
Original file line number Diff line number Diff line change
@@ -1,26 +1,60 @@
package com.github.jaksonlin.testcraft.core.services;
package com.github.jaksonlin.testcraft.application.actions;

import com.github.jaksonlin.testcraft.application.commands.CommandCancellationException;
import com.github.jaksonlin.testcraft.application.commands.pitest.*;
import com.github.jaksonlin.testcraft.core.context.PitestContext;
import com.github.jaksonlin.testcraft.domain.context.PitestContext;
import com.github.jaksonlin.testcraft.infrastructure.commands.CommandCancellationException;
import com.github.jaksonlin.testcraft.infrastructure.commands.pitest.*;
import com.github.jaksonlin.testcraft.infrastructure.services.business.PitestService;
import com.github.jaksonlin.testcraft.infrastructure.services.system.I18nService;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.PlatformDataKeys;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.Service;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.Task;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.ui.components.JBScrollPane;
import org.jetbrains.annotations.NotNull;
import com.github.jaksonlin.testcraft.util.MyBundle;

import javax.swing.*;
import java.awt.*;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.Arrays;
import java.util.List;

@Service(Service.Level.APP)
public final class PitestService {
public class RunPitestAction extends AnAction {

private final PitestService pitestService;

Check warning on line 29 in src/main/java/com/github/jaksonlin/testcraft/application/actions/RunPitestAction.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Field can be local

Field can be converted to a local variable

public RunPitestAction() {
pitestService = ApplicationManager.getApplication().getService(PitestService.class);
}

@Override
public void update(@NotNull AnActionEvent e) {
super.update(e);
// You can change the text here
e.getPresentation().setText(I18nService.getInstance().message("action.RunPitestAction.text"));


}

@Override
public void actionPerformed(@NotNull AnActionEvent e) {
Project targetProject = e.getProject();
if (targetProject == null) {
return;
}

VirtualFile testVirtualFile = e.getData(PlatformDataKeys.VIRTUAL_FILE);
if (testVirtualFile == null) {
return;
}

runPitest(targetProject, testVirtualFile.getPath());
}

public void runPitest(Project targetProject, String testFilePath) {
PitestContext context = new PitestContext(testFilePath, System.currentTimeMillis());
Expand All @@ -40,7 +74,7 @@
for (PitestCommand command : commands) {
if (indicator.isCanceled()) {
ApplicationManager.getApplication().invokeLater(() ->
Messages.showInfoMessage(MyBundle.message("pitest.run.canceled"), MyBundle.message("pitest.run.canceled.title"))
Messages.showInfoMessage(I18nService.getInstance().message("pitest.run.canceled"), I18nService.getInstance().message("pitest.run.canceled.title"))
);
break;
}
Expand All @@ -49,7 +83,7 @@
} catch (Exception e) {
if (e.getCause() instanceof CommandCancellationException) {
ApplicationManager.getApplication().invokeLater(() ->
Messages.showInfoMessage(MyBundle.message("pitest.run.canceled"), MyBundle.message("pitest.run.canceled.title"))
Messages.showInfoMessage(I18nService.getInstance().message("pitest.run.canceled"), I18nService.getInstance().message("pitest.run.canceled.title"))
);
} else {
showErrorDialog(e, context);
Expand All @@ -64,7 +98,7 @@
e.printStackTrace(new PrintWriter(sw));
String stackTrace = sw.toString();
String contextInformation = PitestContext.dumpPitestContext(context);
String errorMessage = MyBundle.message("error.pitest.general.title") + ": " + e.getMessage() + "; " + contextInformation + "\n" + stackTrace;
String errorMessage = I18nService.getInstance().message("error.pitest.general.title") + ": " + e.getMessage() + "; " + contextInformation + "\n" + stackTrace;

JTextArea textArea = new JTextArea(errorMessage);
textArea.setEditable(false);
Expand All @@ -78,4 +112,4 @@
Messages.showErrorDialog(scrollPane, errorMessage)
);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.github.jaksonlin.testcraft.presentation.actions;
package com.github.jaksonlin.testcraft.application.actions;

import com.github.jaksonlin.testcraft.application.commands.unittestannotations.CheckAnnotationCommand;
import com.github.jaksonlin.testcraft.core.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.infrastructure.commands.unittestannotations.CheckAnnotationCommand;
import com.github.jaksonlin.testcraft.domain.context.CaseCheckContext;
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.CommonDataKeys;
Expand All @@ -25,7 +25,7 @@

psiJavaFile.accept(new JavaRecursiveElementVisitor() {
@Override
public void visitMethod(PsiMethod method) {

Check warning on line 28 in src/main/java/com/github/jaksonlin/testcraft/application/actions/RunTestFileAnnoationCheckAction.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

@NotNull/@Nullable problems

Not annotated parameter overrides @NotNull parameter
super.visitMethod(method);
// inspect the method annotations
PsiAnnotation[] annotations = method.getAnnotations();
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
package com.github.jaksonlin.testcraft.presentation.completions;
package com.github.jaksonlin.testcraft.application.completions;

import com.github.jaksonlin.testcraft.core.annotations.AnnotationFieldConfig;
import com.github.jaksonlin.testcraft.core.annotations.AnnotationSchema;
import com.github.jaksonlin.testcraft.core.annotations.DefaultValue;
import com.github.jaksonlin.testcraft.core.services.AnnotationConfigService;
import com.github.jaksonlin.testcraft.domain.annotations.AnnotationFieldConfig;
import com.github.jaksonlin.testcraft.domain.annotations.AnnotationSchema;
import com.github.jaksonlin.testcraft.domain.annotations.DefaultValue;
import com.github.jaksonlin.testcraft.infrastructure.services.config.AnnotationConfigService;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.lang.java.JavaLanguage;
Expand Down Expand Up @@ -42,13 +42,13 @@

LOG.info("Found attribute: " + nameValuePair.getName());

if (nameValuePair == null || annotation == null) {

Check warning on line 45 in src/main/java/com/github/jaksonlin/testcraft/application/completions/AnnotationCompletionContributor.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Constant values

Condition `nameValuePair == null || annotation == null` is always `false`

Check warning on line 45 in src/main/java/com/github/jaksonlin/testcraft/application/completions/AnnotationCompletionContributor.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Constant values

Condition `annotation == null` is always `false` when reached

Check warning on line 45 in src/main/java/com/github/jaksonlin/testcraft/application/completions/AnnotationCompletionContributor.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Constant values

Condition `nameValuePair == null` is always `false`
LOG.info("Required PSI elements not found");
return;
}
AnnotationConfigService configService = ApplicationManager.getApplication().getService(AnnotationConfigService.class);
AnnotationSchema schema = configService.getSchema();
LOG.info("Schema annotation class: " + schema.getAnnotationClassName());

Check warning on line 51 in src/main/java/com/github/jaksonlin/testcraft/application/completions/AnnotationCompletionContributor.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Nullability and data flow problems

Method invocation `getAnnotationClassName` may produce `NullPointerException`
LOG.info("Actual annotation class: " + annotation.getQualifiedName());

if (annotation.getQualifiedName() == null || !annotation.getQualifiedName().endsWith(schema.getAnnotationClassName())) {
Expand All @@ -72,8 +72,8 @@
}

AnnotationFieldConfig finalField = field;
field.getValidation().getValidValues().forEach(value -> {

Check warning on line 75 in src/main/java/com/github/jaksonlin/testcraft/application/completions/AnnotationCompletionContributor.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Nullability and data flow problems

Method invocation `getValidValues` may produce `NullPointerException`
boolean isDefault = false;

Check notice on line 76 in src/main/java/com/github/jaksonlin/testcraft/application/completions/AnnotationCompletionContributor.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Method can be extracted

It's possible to extract method returning 'isDefault' from a long surrounding method
if (finalField.getDefaultValue() instanceof DefaultValue.StringValue) {
isDefault = ((DefaultValue.StringValue) finalField.getDefaultValue()).getValue().equals(value);
} else if (finalField.getDefaultValue() instanceof DefaultValue.StringListValue) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.github.jaksonlin.testcraft.presentation.completions;
package com.github.jaksonlin.testcraft.application.completions;

import com.github.jaksonlin.testcraft.core.annotations.AnnotationFieldType;
import com.github.jaksonlin.testcraft.domain.annotations.AnnotationFieldType;
import com.intellij.codeInsight.completion.InsertionContext;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementPresentation;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.github.jaksonlin.testcraft.presentation.inspectors;
package com.github.jaksonlin.testcraft.application.inspectors;

import com.github.jaksonlin.testcraft.util.MyBundle;
import com.github.jaksonlin.testcraft.application.commands.testscan.UnittestFileInspectorCommand;
import com.github.jaksonlin.testcraft.core.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.infrastructure.commands.testscan.UnittestFileInspectorCommand;
import com.github.jaksonlin.testcraft.domain.context.CaseCheckContext;
import com.github.jaksonlin.testcraft.infrastructure.services.system.I18nService;
import com.intellij.codeInspection.AbstractBaseJavaLocalInspectionTool;
import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.openapi.project.Project;
Expand All @@ -18,12 +18,12 @@

@Override
public @NotNull String getGroupDisplayName() {
return MyBundle.message("inspection.group.name");
return I18nService.getInstance().message("inspection.group.name");
}

@Override
public @NotNull String getDisplayName() {
return MyBundle.message("inspection.display.name");
return I18nService.getInstance().message("inspection.display.name");
}

@Override
Expand All @@ -37,7 +37,7 @@
"Test"
));

private final Set<String> testClassAnnotations = new HashSet<>(Arrays.asList(

Check warning on line 40 in src/main/java/com/github/jaksonlin/testcraft/application/inspectors/UnittestInspector.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

Mismatched query and update of collection

Contents of collection `testClassAnnotations` are updated, but never queried
"org.junit.runner.RunWith",
"org.junit.jupiter.api.TestInstance",
"org.junit.platform.suite.api.Suite"
Expand All @@ -49,7 +49,7 @@
Project project = holder.getProject();
return new JavaElementVisitor() {
@Override
public void visitMethod(PsiMethod psiMethod) {

Check warning on line 52 in src/main/java/com/github/jaksonlin/testcraft/application/inspectors/UnittestInspector.java

View workflow job for this annotation

GitHub Actions / Qodana Community for JVM

@NotNull/@Nullable problems

Not annotated parameter overrides @NotNull parameter
if (!hasTestAnnotation(psiMethod)) {
return;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.github.jaksonlin.testcraft.application.processors;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class LLMProcessor {

private String readFileContent(String filePath) {
try {
return new String(Files.readAllBytes(Paths.get(filePath)), StandardCharsets.UTF_8);
} catch (IOException e) {
throw new RuntimeException("Failed to read file: " + filePath, e);
}
}

private String getSourceCode(String sourceCodeFile) {
return readFileContent(sourceCodeFile);
}
}

This file was deleted.

Loading
Loading