Skip to content

Commit

Permalink
Receive Charset of Document in the constructor
Browse files Browse the repository at this point in the history
  • Loading branch information
gibarsin committed Jan 8, 2018
1 parent de09472 commit 40ad978
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 23 deletions.
Expand Up @@ -4,15 +4,16 @@

package net.sourceforge.pmd.util.document;

import static java.util.Objects.requireNonNull;

import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.IOException;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
Expand All @@ -35,10 +36,11 @@ public class DocumentFile implements Document, Closeable {
private int currentPosition = 0;

private final Path temporaryPath = Files.createTempFile("pmd-", ".tmp");
private final Writer writer = Files.newBufferedWriter(temporaryPath, StandardCharsets.UTF_8);
private final Writer writer;

public DocumentFile(final File file) throws IOException {
reader = Files.newBufferedReader(file.toPath(), StandardCharsets.UTF_8);
public DocumentFile(final File file, final Charset charset) throws IOException {
reader = Files.newBufferedReader(requireNonNull(file).toPath(), requireNonNull(charset));
writer = Files.newBufferedWriter(temporaryPath, charset);
this.filePath = file.toPath();
mapLinesToOffsets();
}
Expand Down
Expand Up @@ -38,7 +38,7 @@ public void setUpTemporaryFiles() throws IOException {
public void insertAtStartOfTheFileShouldSucceed() throws IOException {
writeContentToTemporaryFile("static void main(String[] args) {}");

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.insert(0, 0, "public ");
}

Expand Down Expand Up @@ -85,7 +85,7 @@ private byte[] readAllBytes(final FileInputStream stream) throws IOException {
public void insertVariousTokensIntoTheFileShouldSucceed() throws IOException {
writeContentToTemporaryFile("static void main(String[] args) {}");

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.insert(0, 0, "public ");
documentFile.insert(0, 17, "final ");
}
Expand All @@ -101,7 +101,7 @@ public void insertAtTheEndOfTheFileShouldSucceed() throws IOException {
final String code = "public static void main(String[] args)";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.insert(0, code.length(), "{}");
}

Expand All @@ -116,7 +116,7 @@ public void removeTokenShouldSucceed() throws IOException {
final String code = "public static void main(final String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.delete(new RegionByLineImp(0, 0, 24, 30));
}

Expand All @@ -131,7 +131,7 @@ public void insertAndRemoveTokensShouldSucceed() throws IOException {
final String code = "static void main(final String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.insert(0, 0, "public ");
documentFile.delete(new RegionByLineImp(0, 0, 17, 23));
}
Expand All @@ -147,7 +147,7 @@ public void insertAndDeleteVariousTokensShouldSucceed() throws IOException {
final String code = "void main(String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.insert(0, 0, "public ");
documentFile.insert(0, 0, "static ");
documentFile.delete(new RegionByLineImp(0, 0, 0, 4));
Expand All @@ -166,7 +166,7 @@ public void replaceATokenShouldSucceed() throws IOException {
final String code = "int main(String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.replace(new RegionByLineImp(0, 0, 0, 3), "void");
}

Expand All @@ -181,7 +181,7 @@ public void replaceVariousTokensShouldSucceed() throws IOException {
final String code = "int main(String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.replace(new RegionByLineImp(0, 0, 0, "int".length()), "void");
documentFile.replace(new RegionByLineImp(0, 0, 4, 4 + "main".length()), "foo");
documentFile.replace(new RegionByLineImp(0, 0, 9, 9 + "String".length()), "CharSequence");
Expand All @@ -198,7 +198,7 @@ public void insertDeleteAndReplaceVariousTokensShouldSucceed() throws IOExceptio
final String code = "static int main(CharSequence[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
documentFile.insert(0, 0, "public");
documentFile.delete(new RegionByLineImp(0, 0, 0, 6));
documentFile.replace(new RegionByLineImp(0, 0, 7, 7 + "int".length()), "void");
Expand All @@ -224,7 +224,7 @@ public void lineToOffsetMappingWithLineFeedShouldSucceed() throws IOException {
expectedLineToOffset.add(40);
expectedLineToOffset.add(49);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
assertEquals(expectedLineToOffset, documentFile.getLineToOffset());
}
}
Expand All @@ -241,7 +241,7 @@ public void lineToOffsetMappingWithCarriageReturnFeedLineFeedShouldSucceed() thr
expectedLineToOffset.add(41);
expectedLineToOffset.add(51);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
assertEquals(expectedLineToOffset, documentFile.getLineToOffset());
}
}
Expand All @@ -258,7 +258,7 @@ public void lineToOffsetMappingWithMixedLineSeparatorsShouldSucceed() throws IOE
expectedLineToOffset.add(41);
expectedLineToOffset.add(50);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
assertEquals(expectedLineToOffset, documentFile.getLineToOffset());
}
}
Expand Down
Expand Up @@ -10,6 +10,7 @@
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
Expand Down Expand Up @@ -39,7 +40,7 @@ public void setUpTemporaryFiles() throws IOException {
public void insertAtStartOfTheDocumentShouldSucceed() throws IOException {
writeContentToTemporaryFile("static void main(String[] args) {}");

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
applier = new DocumentOperationsApplierForNonOverlappingRegions(documentFile);
applier.addDocumentOperation(new InsertDocumentOperation(0, 0, "public "));

Expand Down Expand Up @@ -89,7 +90,7 @@ private byte[] readAllBytes(final FileInputStream stream) throws IOException {
public void removeTokenShouldSucceed() throws IOException {
writeContentToTemporaryFile("public static void main(String[] args) {}");

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
applier = new DocumentOperationsApplierForNonOverlappingRegions(documentFile);
applier.addDocumentOperation(new DeleteDocumentOperation(0, 0, 7, 13));

Expand All @@ -107,7 +108,7 @@ public void insertAndRemoveTokensShouldSucceed() throws IOException {
final String code = "static void main(final String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
applier = new DocumentOperationsApplierForNonOverlappingRegions(documentFile);
applier.addDocumentOperation(new InsertDocumentOperation(0, 0, "public "));
applier.addDocumentOperation(new DeleteDocumentOperation(0, 0, 17, 23));
Expand All @@ -126,7 +127,7 @@ public void insertAndDeleteVariousTokensShouldSucceed() throws IOException {
final String code = "void main(String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
applier = new DocumentOperationsApplierForNonOverlappingRegions(documentFile);

applier.addDocumentOperation(new InsertDocumentOperation(0, 0, "public "));
Expand All @@ -149,7 +150,7 @@ public void replaceATokenShouldSucceed() throws IOException {
final String code = "int main(String[] args) {}";
writeContentToTemporaryFile(code);

try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
applier = new DocumentOperationsApplierForNonOverlappingRegions(documentFile);

applier.addDocumentOperation(new ReplaceDocumentOperation(0, 0, 0, "int".length(), "void"));
Expand Down Expand Up @@ -182,7 +183,7 @@ public void replaceVariousTokensShouldSucceed() throws IOException {
}

private void shuffleAndApplyOperations(List<DocumentOperation> documentOperations) throws IOException {
try (DocumentFile documentFile = new DocumentFile(temporaryFile)) {
try (DocumentFile documentFile = new DocumentFile(temporaryFile, StandardCharsets.UTF_8)) {
applier = new DocumentOperationsApplierForNonOverlappingRegions(documentFile);

Collections.shuffle(documentOperations);
Expand Down

0 comments on commit 40ad978

Please sign in to comment.