Skip to content

Commit 8c4a953

Browse files
committed
UnsupportedOperationException when creating 'scratch file' in IntelliJ IDEA
Signed-off-by: Dmytro Nosan <[email protected]>
1 parent e0f7699 commit 8c4a953

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/main/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public boolean canFormat(@NotNull PsiFile file) {
7878
public void formatDocument(@NotNull Document document, @NotNull List<TextRange> formattingRanges,
7979
@NotNull FormattingContext formattingContext, boolean canChangeWhiteSpaceOnly, boolean quickFormat) {
8080
VirtualFile file = formattingContext.getVirtualFile();
81-
Path path = (file != null) ? file.toNioPath() : null;
81+
Path path = (file != null) ? file.getFileSystem().getNioPath(file) : null;
8282
JavaFormatConfig config = JavaFormatConfig.findFrom(path);
8383
Formatter formatter = new Formatter(config);
8484
String source = document.getText();

spring-javaformat-intellij-idea/spring-javaformat-intellij-idea-plugin/src/test/java/io/spring/format/formatter/intellij/formatting/SpringJavaFormatFormattingServiceTests.java

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package io.spring.format.formatter.intellij.formatting;
1818

19+
import java.nio.file.Files;
20+
import java.nio.file.Path;
1921
import java.util.Collections;
2022

2123
import com.intellij.formatting.FormattingContext;
@@ -25,16 +27,19 @@
2527
import com.intellij.openapi.fileTypes.FileTypeManager;
2628
import com.intellij.openapi.fileTypes.PlainTextFileType;
2729
import com.intellij.openapi.project.Project;
30+
import com.intellij.openapi.vfs.VirtualFile;
31+
import com.intellij.openapi.vfs.VirtualFileSystem;
2832
import com.intellij.psi.PsiFile;
2933
import org.junit.jupiter.api.Test;
34+
import org.junit.jupiter.api.io.TempDir;
3035

3136
import io.spring.format.formatter.intellij.state.State;
3237

3338
import static org.assertj.core.api.Assertions.assertThat;
3439
import static org.mockito.ArgumentMatchers.any;
3540
import static org.mockito.BDDMockito.given;
41+
import static org.mockito.BDDMockito.willAnswer;
3642
import static org.mockito.Mockito.mock;
37-
import static org.mockito.Mockito.verify;
3843

3944
/**
4045
* Tests for {@link SpringJavaFormatFormattingService}.
@@ -73,13 +78,31 @@ void canFormatWhenJavaFileAndActiveReturnsTrue() {
7378
}
7479

7580
@Test
76-
void formatDocumentAppliesFormatting() {
81+
void formatDocumentAppliesFormatting(@TempDir Path tempDir) throws Exception {
82+
Files.writeString(tempDir.resolve(".springjavaformatconfig"), "indentation-style=spaces");
7783
Document document = mock(Document.class);
78-
String text = "public class Hello {}";
79-
given(document.getText()).willReturn(text);
84+
StringBuilder text = new StringBuilder("public class Hello{"
85+
+ "\tpublic void hello() {"
86+
+ "\tString value =\t\"Hello World\";}}");
87+
willAnswer((invocation) -> {
88+
text.replace(invocation.getArgument(0), invocation.getArgument(1), invocation.getArgument(2));
89+
return null;
90+
}).given(document).replaceString(any(Integer.class), any(Integer.class), any(CharSequence.class));
91+
given(document.getText()).willAnswer((invocation) -> text.toString());
8092
FormattingContext formattingContext = mock(FormattingContext.class);
93+
VirtualFile virtualFile = mock(VirtualFile.class);
94+
VirtualFileSystem virtualFileSystem = mock(VirtualFileSystem.class);
95+
given(virtualFile.getFileSystem()).willReturn(virtualFileSystem);
96+
given(formattingContext.getVirtualFile()).willReturn(virtualFile);
97+
given(virtualFileSystem.getNioPath(virtualFile)).willReturn(tempDir.resolve("Hello.java"));
8198
this.service.formatDocument(document, Collections.emptyList(), formattingContext, false, false);
82-
verify(document).replaceString(20, 20, "\n\n");
99+
assertThat(text.toString()).isEqualTo("public class Hello {"
100+
+ "\n\n"
101+
+ " public void hello() {\n"
102+
+ " String value = \"Hello World\";\n"
103+
+ " }\n"
104+
+ "\n"
105+
+ "}");
83106
}
84107

85108
private PsiFile mockFile(FileType fileType, State state) {

0 commit comments

Comments
 (0)