Skip to content

Commit

Permalink
Add AutoSwitcher
Browse files Browse the repository at this point in the history
Update CHelper
Set version to 0.16
Some code reformatting
  • Loading branch information
AlexeyDmitriev committed Nov 17, 2018
1 parent 23e2acc commit 8853af9
Show file tree
Hide file tree
Showing 7 changed files with 129 additions and 12 deletions.
3 changes: 2 additions & 1 deletion JHelper.iml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@
<JAVADOC />
<SOURCES>
<root url="file://$LIB_SOURCES$/idea-chelper/src" />
<root url="file://$USER_HOME$/opensource/chelper/src" />
</SOURCES>
</library>
</orderEntry>
</component>
</module>
</module>
5 changes: 4 additions & 1 deletion META-INF/plugin.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<idea-plugin>
<id>name.admitriev.jhelper</id>
<name>JHelper</name>
<version>0.15</version>
<version>0.16</version>
<vendor>Alexey Dmitriev</vendor>

<description>Sport programming tool to inline library code and provide testing framework.</description>
Expand Down Expand Up @@ -32,6 +32,9 @@
<component>
<implementation-class>name.admitriev.jhelper.components.ChromeParser</implementation-class>
</component>
<component>
<implementation-class>name.admitriev.jhelper.components.AutoSwitcher</implementation-class>
</component>
</project-components>

<actions>
Expand Down
Binary file modified lib/chelper.jar
Binary file not shown.
118 changes: 118 additions & 0 deletions src/name/admitriev/jhelper/components/AutoSwitcher.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
package name.admitriev.jhelper.components;

import com.intellij.execution.RunManager;
import com.intellij.execution.RunManagerListener;
import com.intellij.execution.RunnerAndConfigurationSettings;
import com.intellij.execution.configurations.RunConfiguration;
import com.intellij.execution.impl.RunManagerImpl;
import com.intellij.execution.impl.RunnerAndConfigurationSettingsImpl;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.components.ProjectComponent;
import com.intellij.openapi.fileEditor.FileEditorManager;
import com.intellij.openapi.fileEditor.FileEditorManagerEvent;
import com.intellij.openapi.fileEditor.FileEditorManagerListener;
import com.intellij.openapi.project.DumbService;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.util.messages.MessageBus;
import name.admitriev.jhelper.configuration.TaskConfiguration;
import org.jetbrains.annotations.NotNull;

public class AutoSwitcher implements ProjectComponent {
private final Project project;
private boolean busy = false;

public AutoSwitcher(Project project) {
this.project = project;
}

@Override
public @NotNull
String getComponentName() {
return "AutoSwitcher";
}

@Override
public void projectOpened() {
addSelectedConfigurationListener();
addFileEditorListeners();
}

private void addFileEditorListeners() {
MessageBus messageBus = project.getMessageBus();
messageBus.connect().subscribe(FileEditorManagerListener.FILE_EDITOR_MANAGER, new FileEditorManagerListener() {
@Override
public void fileOpened(@NotNull FileEditorManager source, @NotNull VirtualFile file) {
selectTask(file);
}

private void selectTask(VirtualFile file) {
Runnable selectTaskRunnable = () -> {
if (busy || file == null) {
return;
}
RunManagerImpl runManager = RunManagerImpl.getInstanceImpl(project);
RunnerAndConfigurationSettings oldConfiguration = runManager.getSelectedConfiguration();
if (oldConfiguration != null && !(oldConfiguration.getConfiguration() instanceof TaskConfiguration)) {
return;
}
for (RunConfiguration configuration : runManager.getAllConfigurationsList()) {
if (configuration instanceof TaskConfiguration) {
TaskConfiguration task = (TaskConfiguration) configuration;
String pathToClassFile = task.getCppPath();
VirtualFile expectedFie = project.getBaseDir().findFileByRelativePath(pathToClassFile);
if (file.equals(expectedFie)) {
busy = true;
RunManager.getInstance(project).setSelectedConfiguration(
new RunnerAndConfigurationSettingsImpl(
runManager,
configuration,
false
)
);
busy = false;
return;
}
}
}

};

DumbService.getInstance(project).smartInvokeLater(selectTaskRunnable);
}

@Override
public void selectionChanged(@NotNull FileEditorManagerEvent event) {
selectTask(event.getNewFile());
}
});
}

private void addSelectedConfigurationListener() {
RunManagerImpl.getInstanceImpl(project).addRunManagerListener(new RunManagerListener() {
@Override
public void runConfigurationSelected() {
RunnerAndConfigurationSettings selectedConfiguration =
RunManagerImpl.getInstanceImpl(project).getSelectedConfiguration();
if (selectedConfiguration == null) {
return;
}
RunConfiguration configuration = selectedConfiguration.getConfiguration();
if (busy || !(configuration instanceof TaskConfiguration)) {
return;
}
busy = true;
String pathToClassFile = ((TaskConfiguration) configuration).getCppPath();
VirtualFile toOpen = project.getBaseDir().findFileByRelativePath(pathToClassFile);
if (toOpen != null) {
TransactionGuard.getInstance().submitTransactionAndWait(() -> FileEditorManager.getInstance(project).openFile(
toOpen,
true
));
}
busy = false;
}
});
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,8 @@ protected void applyEditorTo(@NotNull TaskConfiguration settings) {
settings.testType = data.getTestType();
}

@NotNull
@Override
protected JComponent createEditor() {
protected @NotNull JComponent createEditor() {
return component;
}
};
Expand All @@ -92,9 +91,8 @@ protected JComponent createEditor() {
public void checkConfiguration() throws RuntimeConfigurationException {
}

@Nullable
@Override
public CidrCommandLineState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) {
public @Nullable CidrCommandLineState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) {
throw new JHelperException("This method is not expected to be used");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,7 @@ private static String generateRunFileContent(Project project, TaskConfiguration
return template;
}

@NotNull
private static String generateTestDeclaration(Test[] tests) {
private static @NotNull String generateTestDeclaration(Test[] tests) {
StringBuilder result = new StringBuilder();
for (Test test : tests) {
result.append(
Expand Down Expand Up @@ -230,8 +229,7 @@ else if (task.getInput().type == StreamConfiguration.StreamType.STANDARD) {
}
}

@NotNull
private static PsiFile getOutputFile(Project project) {
private static @NotNull PsiFile getOutputFile(Project project) {
Configurator configurator = project.getComponent(Configurator.class);
Configurator.State configuration = configurator.getState();

Expand Down
3 changes: 1 addition & 2 deletions src/name/admitriev/jhelper/generation/IncludesProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,7 @@ private void processAngleBracketsInclude(OCIncludeDirective include) {
result.append(include.getText());
}

@NotNull
public static String process(PsiFile file) {
public static @NotNull String process(PsiFile file) {
IncludesProcessor processor = new IncludesProcessor();
processor.processFile(file);
return processor.result.toString();
Expand Down

0 comments on commit 8853af9

Please sign in to comment.