start of checkstyle inclusion... (#48)
* start of checkstyle inclusion * checkstyle!
This commit is contained in:
parent
23f4b05ba3
commit
eaa4219dd7
21 changed files with 383 additions and 88 deletions
1
cache/build.gradle
vendored
1
cache/build.gradle
vendored
|
@ -41,3 +41,4 @@ artifacts {
|
|||
}
|
||||
|
||||
apply from: rootProject.file("gradle/maven-push.gradle")
|
||||
//apply from: rootProject.file("gradle/checkstyle.gradle")
|
||||
|
|
232
checkstyle-ruleset.xml
Normal file
232
checkstyle-ruleset.xml
Normal file
|
@ -0,0 +1,232 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE module PUBLIC
|
||||
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
||||
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
|
||||
|
||||
<!-- This is a checkstyle configuration file. For descriptions of
|
||||
what the following rules do, please see the checkstyle configuration
|
||||
page at http://checkstyle.sourceforge.net/config.html -->
|
||||
|
||||
<module name="Checker">
|
||||
<module name="FileTabCharacter"/>
|
||||
<module name="NewlineAtEndOfFile"/>
|
||||
<module name="SuppressionCommentFilter"/>
|
||||
<module name="RegexpSingleline">
|
||||
<!-- Checks that FIXME is not used in comments. TODO is preferred.
|
||||
-->
|
||||
<property name="format" value="((//.*)|(\*.*))FIXME"/>
|
||||
<property name="message"
|
||||
value='TODO is preferred to FIXME. e.g. "TODO(johndoe): Refactor when v2 is released."'/>
|
||||
</module>
|
||||
|
||||
<!-- All Java AST specific tests live under TreeWalker module. -->
|
||||
<module name="TreeWalker">
|
||||
<module name="FileContentsHolder"/>
|
||||
<module name="TodoComment"/>
|
||||
<module name="RedundantImport"/>
|
||||
<module name="ImportOrder">
|
||||
<!-- Checks for out of order import statements. -->
|
||||
<property name="severity" value="warning"/>
|
||||
<property name="groups" value="android,com,junit,net,org,java,javax"/>
|
||||
<!-- This ensures that static imports go on bottom. -->
|
||||
<property name="option" value="bottom"/>
|
||||
<property name="sortStaticImportsAlphabetically" value="true"/>
|
||||
<property name="tokens" value="STATIC_IMPORT, IMPORT"/>
|
||||
</module>
|
||||
|
||||
<module name="PackageName">
|
||||
<!-- Validates identifiers for package names against the
|
||||
supplied expression. -->
|
||||
<!-- Here the default checkstyle rule restricts package name parts to
|
||||
seven characters
|
||||
-->
|
||||
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="TypeNameCheck">
|
||||
<!-- Validates static, final fields against the
|
||||
expression "^[A-Z][a-zA-Z0-9]*$". -->
|
||||
<metadata name="altname" value="TypeName"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="ConstantNameCheck">
|
||||
<!-- Validates non-private, static, final fields against the supplied
|
||||
public/package final fields "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". -->
|
||||
<metadata name="altname" value="ConstantName"/>
|
||||
<property name="applyToPublic" value="true"/>
|
||||
<property name="applyToProtected" value="true"/>
|
||||
<property name="applyToPackage" value="true"/>
|
||||
<property name="applyToPrivate" value="false"/>
|
||||
<property name="format" value="^([A-Z][A-Z0-9]*(_[A-Z0-9]+)*|FLAG_.*)$"/>
|
||||
<message key="name.invalidPattern"
|
||||
value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="StaticVariableNameCheck">
|
||||
<!-- Validates static, non-final fields against the supplied
|
||||
expression "^[a-z][a-zA-Z0-9]*_?$". -->
|
||||
<metadata name="altname" value="StaticVariableName"/>
|
||||
<property name="applyToPublic" value="true"/>
|
||||
<property name="applyToProtected" value="true"/>
|
||||
<property name="applyToPackage" value="true"/>
|
||||
<property name="applyToPrivate" value="true"/>
|
||||
<property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="MemberNameCheck">
|
||||
<!-- Validates non-static members against the supplied expression. -->
|
||||
<metadata name="altname" value="MemberName"/>
|
||||
<property name="applyToPublic" value="true"/>
|
||||
<property name="applyToProtected" value="true"/>
|
||||
<property name="applyToPackage" value="true"/>
|
||||
<property name="applyToPrivate" value="true"/>
|
||||
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="MethodNameCheck">
|
||||
<!-- Validates identifiers for method names. -->
|
||||
<metadata name="altname" value="MethodName"/>
|
||||
<property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="ParameterName">
|
||||
<!-- Validates identifiers for method parameters against the
|
||||
expression "^[a-z][a-zA-Z0-9]*$". -->
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="LocalFinalVariableName">
|
||||
<!-- Validates identifiers for local final variables against the
|
||||
expression "^[a-z][a-zA-Z0-9]*$". -->
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="LocalVariableName">
|
||||
<!-- Validates identifiers for local variables against the
|
||||
expression "^[a-z][a-zA-Z0-9]*$". -->
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
|
||||
<module name="LineLength">
|
||||
<property name="max" default="100" value="120"/>
|
||||
<property name="severity" value="error"/>
|
||||
<!--
|
||||
The default ignore pattern exempts the following elements:
|
||||
- import statements
|
||||
- long URLs inside comments
|
||||
-->
|
||||
<property name="ignorePattern"
|
||||
default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)$"
|
||||
value="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)$"/>
|
||||
</module>
|
||||
|
||||
<module name="LeftCurly">
|
||||
<!-- Checks for placement of the left curly brace ('{'). -->
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<module name="RightCurly">
|
||||
<!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
|
||||
the same line. e.g., the following example is fine:
|
||||
<pre>
|
||||
if {
|
||||
...
|
||||
} else
|
||||
</pre>
|
||||
-->
|
||||
<!-- This next example is not fine:
|
||||
<pre>
|
||||
if {
|
||||
...
|
||||
}
|
||||
else
|
||||
</pre>
|
||||
-->
|
||||
<property name="option" value="same"/>
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
<!-- Checks for braces around if and else blocks -->
|
||||
<module name="NeedBraces">
|
||||
<property name="severity" value="warning"/>
|
||||
<property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
|
||||
</module>
|
||||
|
||||
<module name="UpperEll">
|
||||
<!-- Checks that long constants are defined with an upper ell.-->
|
||||
<property name="severity" value="error"/>
|
||||
</module>
|
||||
|
||||
<module name="FallThrough">
|
||||
<!-- Warn about falling through to the next case statement. Similar to
|
||||
javac -Xlint:fallthrough, but the check is suppressed if a single-line comment
|
||||
on the last non-blank line preceding the fallen-into case contains 'fall through' (or
|
||||
some other variants which we don't publicized to promote consistency).
|
||||
-->
|
||||
<property name="reliefPattern"
|
||||
value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/>
|
||||
<property name="severity" value="error"/>
|
||||
</module>
|
||||
|
||||
<module name="ModifierOrder"/>
|
||||
|
||||
<module name="WhitespaceAround">
|
||||
<!-- Checks that various tokens are surrounded by whitespace.
|
||||
This includes most binary operators and keywords followed
|
||||
by regular or curly braces.
|
||||
-->
|
||||
<property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
|
||||
BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
|
||||
EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
|
||||
LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
|
||||
LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
|
||||
MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
|
||||
SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
|
||||
<property name="severity" value="error"/>
|
||||
</module>
|
||||
|
||||
<module name="WhitespaceAfter">
|
||||
<!-- Checks that commas, semicolons and typecasts are followed by
|
||||
whitespace.
|
||||
-->
|
||||
<property name="tokens" value="COMMA, SEMI, TYPECAST"/>
|
||||
</module>
|
||||
|
||||
<module name="NoWhitespaceAfter">
|
||||
<!-- Checks that there is no whitespace after various unary operators.
|
||||
Linebreaks are allowed.
|
||||
-->
|
||||
<property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
|
||||
UNARY_PLUS"/>
|
||||
<property name="allowLineBreaks" value="true"/>
|
||||
<property name="severity" value="error"/>
|
||||
</module>
|
||||
|
||||
<module name="NoWhitespaceBefore">
|
||||
<!-- Checks that there is no whitespace before various unary operators.
|
||||
Linebreaks are allowed.
|
||||
-->
|
||||
<property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
|
||||
<property name="allowLineBreaks" value="true"/>
|
||||
<property name="severity" value="error"/>
|
||||
</module>
|
||||
|
||||
<module name="ParenPad">
|
||||
<!-- Checks that there is no whitespace before close parens or after
|
||||
open parens.
|
||||
-->
|
||||
<property name="severity" value="warning"/>
|
||||
</module>
|
||||
|
||||
|
||||
<module name="DeclarationOrder"/>
|
||||
|
||||
</module>
|
||||
</module>
|
|
@ -44,5 +44,5 @@ dependencies {
|
|||
testCompile libraries.robolectric
|
||||
}
|
||||
apply from: rootProject.file("gradle/maven-push.gradle")
|
||||
|
||||
apply from: rootProject.file("gradle/checkstyle.gradle")
|
||||
|
||||
|
|
|
@ -17,10 +17,13 @@ public class SourcePersisterFactory {
|
|||
/**
|
||||
* Returns a new {@link BufferedSource} persister with the provided file as the root of the
|
||||
* persistence {@link com.nytimes.android.external.fs.filesystem.FileSystem}.
|
||||
*
|
||||
* @throws IOException
|
||||
*/
|
||||
public static Persister<BufferedSource> create(File root) throws IOException {
|
||||
if (root == null) throw new IllegalArgumentException("root file cannot be null.");
|
||||
if (root == null) {
|
||||
throw new IllegalArgumentException("root file cannot be null.");
|
||||
}
|
||||
return new SourcePersister(FileSystemFactory.create(root));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ public class Util {
|
|||
Stack<String> stack = new Stack<String>();
|
||||
|
||||
for (String str : arr) {
|
||||
if(str.equals("/")){
|
||||
if (str.equals("/")) {
|
||||
continue;
|
||||
}
|
||||
if (str.equals("..")) {
|
||||
|
|
|
@ -20,18 +20,19 @@ package com.nytimes.android.external.fs.filesystem;
|
|||
//package org.jpublish.util;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Stack;
|
||||
import java.util.Iterator;
|
||||
import java.util.NoSuchElementException;
|
||||
import java.util.Stack;
|
||||
|
||||
/** Breadth first iterator which iterates through all files which are decendents
|
||||
of the specified root file.
|
||||
|
||||
@author Anthony Eden
|
||||
@since 1.1
|
||||
/**
|
||||
* Breadth first iterator which iterates through all files which are decendents
|
||||
* of the specified root file.
|
||||
*
|
||||
* @author Anthony Eden
|
||||
* @since 1.1
|
||||
*/
|
||||
|
||||
class BreadthFirstFileTreeIterator implements Iterator{
|
||||
class BreadthFirstFileTreeIterator implements Iterator {
|
||||
|
||||
private File root;
|
||||
private int currentIndex = 0;
|
||||
|
@ -40,83 +41,88 @@ class BreadthFirstFileTreeIterator implements Iterator{
|
|||
private Stack directories;
|
||||
private boolean endOfTree = false;
|
||||
|
||||
/** Construct a new BreadthFirstFileTreeIterator with the specified root.
|
||||
|
||||
@param root The root directory
|
||||
/**
|
||||
* Construct a new BreadthFirstFileTreeIterator with the specified root.
|
||||
*
|
||||
* @param root The root directory
|
||||
*/
|
||||
|
||||
BreadthFirstFileTreeIterator(File root){
|
||||
BreadthFirstFileTreeIterator(File root) {
|
||||
this.root = root;
|
||||
this.currentList = root.listFiles();
|
||||
this.directories = new Stack();
|
||||
}
|
||||
|
||||
/** Returns true if the iteration has more elements. (In other words,
|
||||
returns true if next would return an element rather than throwing
|
||||
an exception.)
|
||||
|
||||
@return True if the iteration has more elements
|
||||
/**
|
||||
* Returns true if the iteration has more elements. (In other words,
|
||||
* returns true if next would return an element rather than throwing
|
||||
* an exception.)
|
||||
*
|
||||
* @return True if the iteration has more elements
|
||||
*/
|
||||
|
||||
public boolean hasNext(){
|
||||
if(endOfTree)
|
||||
return false;
|
||||
return getNextFile() != null;
|
||||
public boolean hasNext() {
|
||||
return !endOfTree && getNextFile() != null;
|
||||
}
|
||||
|
||||
/** Returns the next element in the iteration.
|
||||
|
||||
@return The next element in the iteration
|
||||
/**
|
||||
* Returns the next element in the iteration.
|
||||
*
|
||||
* @return The next element in the iteration
|
||||
*/
|
||||
|
||||
public Object next(){
|
||||
if(endOfTree)
|
||||
public Object next() {
|
||||
if (endOfTree) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
|
||||
File file = getNextFile();
|
||||
if(file == null){
|
||||
if (file == null) {
|
||||
throw new NoSuchElementException();
|
||||
}
|
||||
this.nextFile = null;
|
||||
return file;
|
||||
}
|
||||
|
||||
/** Removes from the underlying collection the last element returned by
|
||||
the iterator (optional operation). This method can be called only
|
||||
once per call to next. The behavior of an iterator is unspecified
|
||||
if the underlying collection is modified while the iteration is in
|
||||
progress in any way other than by calling this method.
|
||||
|
||||
@throws UnsupportedOperationException
|
||||
/**
|
||||
* Removes from the underlying collection the last element returned by
|
||||
* the iterator (optional operation). This method can be called only
|
||||
* once per call to next. The behavior of an iterator is unspecified
|
||||
* if the underlying collection is modified while the iteration is in
|
||||
* progress in any way other than by calling this method.
|
||||
*
|
||||
* @throws UnsupportedOperationException
|
||||
*/
|
||||
|
||||
public void remove(){
|
||||
public void remove() {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
/** Get the next file. If the value for the next file is null then the
|
||||
findNextFile() method is invoked to locate the next file. A call
|
||||
to next() will return the next file and will null out the next file
|
||||
variable.
|
||||
|
||||
@return The next file
|
||||
/**
|
||||
* Get the next file. If the value for the next file is null then the
|
||||
* findNextFile() method is invoked to locate the next file. A call
|
||||
* to next() will return the next file and will null out the next file
|
||||
* variable.
|
||||
*
|
||||
* @return The next file
|
||||
*/
|
||||
|
||||
protected File getNextFile(){
|
||||
if(nextFile == null){
|
||||
protected File getNextFile() {
|
||||
if (nextFile == null) {
|
||||
nextFile = findNextFile();
|
||||
}
|
||||
return nextFile;
|
||||
}
|
||||
|
||||
/** Find the next file.
|
||||
|
||||
@return The next file
|
||||
/**
|
||||
* Find the next file.
|
||||
*
|
||||
* @return The next file
|
||||
*/
|
||||
|
||||
protected File findNextFile(){
|
||||
while(currentIndex < currentList.length){
|
||||
if(currentList[currentIndex].isDirectory()){
|
||||
protected File findNextFile() {
|
||||
while (currentIndex < currentList.length) {
|
||||
if (currentList[currentIndex].isDirectory()) {
|
||||
directories.push(currentList[currentIndex]);
|
||||
currentIndex++;
|
||||
} else {
|
||||
|
@ -126,12 +132,12 @@ class BreadthFirstFileTreeIterator implements Iterator{
|
|||
}
|
||||
}
|
||||
|
||||
while(!directories.empty()){
|
||||
File directory = (File)directories.remove(0);
|
||||
while (!directories.empty()) {
|
||||
File directory = (File) directories.remove(0);
|
||||
currentList = directory.listFiles();
|
||||
currentIndex = 0;
|
||||
File file = findNextFile();
|
||||
if(file != null){
|
||||
if (file != null) {
|
||||
return file;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -57,8 +57,7 @@ class FSFile {
|
|||
if (!tmpFile.renameTo(file)) {
|
||||
throw new IOException("unable to move tmp file to " + file.getPath());
|
||||
}
|
||||
}
|
||||
catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
throw new IOException("unable to write to file");
|
||||
|
||||
} finally {
|
||||
|
|
|
@ -4,14 +4,17 @@ import com.google.common.collect.ImmutableMap;
|
|||
import com.nytimes.android.external.fs.filesystem.FileSystem;
|
||||
import com.nytimes.android.external.fs.filesystem.FileSystemFactory;
|
||||
import com.nytimes.android.external.fs.impl.BaseTestCase;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import okio.BufferedSource;
|
||||
import okio.Okio;
|
||||
import org.junit.Test;
|
||||
|
||||
import static com.google.common.base.Charsets.UTF_8;
|
||||
import static com.google.common.io.Files.createTempDir;
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
package com.nytimes.android.external.fs;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.nytimes.android.external.store.middleware.GsonSourceParser;
|
||||
import com.nytimes.android.external.store.base.Fetcher;
|
||||
import com.nytimes.android.external.store.base.Store;
|
||||
import com.nytimes.android.external.store.base.impl.BarCode;
|
||||
import com.nytimes.android.external.store.base.impl.ParsingStoreBuilder;
|
||||
import com.nytimes.android.external.store.middleware.GsonSourceParser;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
|
|
|
@ -3,14 +3,17 @@ package com.nytimes.android.external.fs.impl;
|
|||
|
||||
import com.nytimes.android.external.fs.filesystem.FileSystem;
|
||||
import com.nytimes.android.external.fs.filesystem.FileSystemFactory;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
import okio.BufferedSource;
|
||||
import okio.Okio;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import static com.google.common.base.Charsets.UTF_8;
|
||||
import static com.google.common.io.Files.createTempDir;
|
||||
|
@ -72,7 +75,7 @@ public class SimpleTest extends BaseTestCase {
|
|||
fileSystem.delete("/boo"); // now delete the file
|
||||
|
||||
assertThat(fileSystem.exists("/boo")).isFalse(); // exists() should say it's gone even though
|
||||
// we still have a source to it
|
||||
// we still have a source to it
|
||||
fileSystem.write("/boo", source(testString2)); // and now un-delete it by writing a new version
|
||||
assertThat(fileSystem.exists("/boo")).isTrue(); // exists() should say it's back
|
||||
BufferedSource source2 = fileSystem.read("/boo"); // open another source and hang onto it
|
||||
|
|
31
gradle/checkstyle.gradle
Normal file
31
gradle/checkstyle.gradle
Normal file
|
@ -0,0 +1,31 @@
|
|||
apply plugin: 'checkstyle'
|
||||
preBuild.dependsOn('checkstyle')
|
||||
assemble.dependsOn('lint')
|
||||
check.dependsOn('checkstyle')
|
||||
|
||||
|
||||
configurations {
|
||||
checksytleOverride
|
||||
}
|
||||
|
||||
dependencies {
|
||||
checksytleOverride('com.puppycrawl.tools:checkstyle:7.1.1')
|
||||
}
|
||||
|
||||
tasks.withType(Checkstyle) {
|
||||
checkstyleClasspath = project.configurations.checksytleOverride
|
||||
}
|
||||
|
||||
|
||||
task checkstyle(type: Checkstyle) {
|
||||
configFile file("${project.rootDir}/checkstyle-ruleset.xml")
|
||||
source 'src'
|
||||
include '**/*.java'
|
||||
exclude '**/gen/**'
|
||||
|
||||
reports {
|
||||
xml.enabled = true
|
||||
}
|
||||
|
||||
classpath = files()
|
||||
}
|
|
@ -53,4 +53,4 @@ artifacts {
|
|||
archives sourcesJar
|
||||
}
|
||||
apply from: rootProject.file("gradle/maven-push.gradle")
|
||||
|
||||
apply from: rootProject.file("gradle/checkstyle.gradle")
|
||||
|
|
|
@ -18,8 +18,12 @@ public class GsonParserFactory {
|
|||
* the provided {@link Gson} instance.
|
||||
*/
|
||||
public static <T> Parser<Reader, T> createReaderParser(Gson gson, Type type) {
|
||||
if (gson == null) throw new IllegalArgumentException("gson cannot be null.");
|
||||
if (type == null) throw new IllegalArgumentException("type cannot be null.");
|
||||
if (gson == null) {
|
||||
throw new IllegalArgumentException("gson cannot be null.");
|
||||
}
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("type cannot be null.");
|
||||
}
|
||||
return new GsonReaderParser<>(gson, type);
|
||||
}
|
||||
|
||||
|
@ -28,7 +32,9 @@ public class GsonParserFactory {
|
|||
* a new default configured {@link Gson} instance.
|
||||
*/
|
||||
public static <T> Parser<Reader, T> createReaderParser(Type type) {
|
||||
if (type == null) throw new IllegalArgumentException("type cannot be null.");
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("type cannot be null.");
|
||||
}
|
||||
return new GsonReaderParser<>(new Gson(), type);
|
||||
}
|
||||
|
||||
|
@ -37,8 +43,12 @@ public class GsonParserFactory {
|
|||
* the provided {@link Gson} instance.
|
||||
*/
|
||||
public static <T> Parser<BufferedSource, T> createSourceParser(Gson gson, Type type) {
|
||||
if (gson == null) throw new IllegalArgumentException("gson cannot be null.");
|
||||
if (type == null) throw new IllegalArgumentException("type cannot be null.");
|
||||
if (gson == null) {
|
||||
throw new IllegalArgumentException("gson cannot be null.");
|
||||
}
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("type cannot be null.");
|
||||
}
|
||||
return new GsonSourceParser<>(gson, type);
|
||||
}
|
||||
|
||||
|
@ -47,7 +57,9 @@ public class GsonParserFactory {
|
|||
* a new default configured {@link Gson} instance.
|
||||
*/
|
||||
public static <T> Parser<BufferedSource, T> createSourceParser(Type type) {
|
||||
if (type == null) throw new IllegalArgumentException("type cannot be null.");
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("type cannot be null.");
|
||||
}
|
||||
return new GsonSourceParser<>(new Gson(), type);
|
||||
}
|
||||
|
||||
|
@ -55,9 +67,13 @@ public class GsonParserFactory {
|
|||
* Returns a new Parser which parses from a String to the specified type, using
|
||||
* the provided {@link Gson} instance.
|
||||
*/
|
||||
public static <T> Parser<String, T> createStringParser(Gson gson,Type type) {
|
||||
if (gson == null) throw new IllegalArgumentException("gson cannot be null.");
|
||||
if (type == null) throw new IllegalArgumentException("type cannot be null.");
|
||||
public static <T> Parser<String, T> createStringParser(Gson gson, Type type) {
|
||||
if (gson == null) {
|
||||
throw new IllegalArgumentException("gson cannot be null.");
|
||||
}
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("type cannot be null.");
|
||||
}
|
||||
return new GsonStringParser<>(gson, type);
|
||||
}
|
||||
|
||||
|
@ -66,7 +82,9 @@ public class GsonParserFactory {
|
|||
* a new default {@link Gson} instance.
|
||||
*/
|
||||
public static <T> Parser<String, T> createStringParser(Class<T> type) {
|
||||
if (type == null) throw new IllegalArgumentException("type cannot be null.");
|
||||
if (type == null) {
|
||||
throw new IllegalArgumentException("type cannot be null.");
|
||||
}
|
||||
return new GsonStringParser<>(new Gson(), type);
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,7 @@ public class GsonReaderParser<Parsed> implements Parser<Reader, Parsed> {
|
|||
private final Type type;
|
||||
|
||||
@Inject
|
||||
public GsonReaderParser(Gson gson,Type type) {
|
||||
public GsonReaderParser(Gson gson, Type type) {
|
||||
this.gson = gson;
|
||||
this.type = type;
|
||||
}
|
||||
|
|
|
@ -17,8 +17,8 @@ import okio.BufferedSource;
|
|||
* example usage:
|
||||
* ParsingStoreBuilder.<BufferedSource, BookResults>builder()
|
||||
* .fetcher(fetcher)
|
||||
* .persister(new SourcePersister(fileSystem))
|
||||
* .parser(new GsonSourceParser<>(gson, BookResults.class))
|
||||
* .persister(SourcePersisterFactory.create(getApplicationContext().getCacheDir()))
|
||||
* .parser(GsonParserFactory.createSourceParser(new Gson(),BookResult.class)
|
||||
* .open();
|
||||
*/
|
||||
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
package com.nytimes.android.external.store;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.nytimes.android.external.store.base.Parser;
|
||||
import com.nytimes.android.external.store.middleware.GsonParserFactory;
|
||||
import com.nytimes.android.external.store.middleware.GsonSourceParser;
|
||||
import com.nytimes.android.external.store.base.Fetcher;
|
||||
import com.nytimes.android.external.store.base.Parser;
|
||||
import com.nytimes.android.external.store.base.Persister;
|
||||
import com.nytimes.android.external.store.base.Store;
|
||||
import com.nytimes.android.external.store.base.impl.BarCode;
|
||||
import com.nytimes.android.external.store.base.impl.ParsingStoreBuilder;
|
||||
import com.nytimes.android.external.store.middleware.GsonParserFactory;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
|
|
|
@ -42,7 +42,8 @@ public class GsonSourceListParserTest {
|
|||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
Parser<BufferedSource, List<Foo>> parser =
|
||||
GsonParserFactory.createSourceParser(new Gson(),new TypeToken<List<Foo>>() {}.getType());
|
||||
GsonParserFactory.createSourceParser(new Gson(), new TypeToken<List<Foo>>() {
|
||||
}.getType());
|
||||
|
||||
Store<List<Foo>> simpleStore = ParsingStoreBuilder.<BufferedSource, List<Foo>>builder()
|
||||
.persister(persister)
|
||||
|
|
|
@ -56,3 +56,4 @@ artifacts {
|
|||
archives sourcesJar
|
||||
}
|
||||
apply from: rootProject.file("gradle/maven-push.gradle")
|
||||
apply from: rootProject.file("gradle/checkstyle.gradle")
|
|
@ -30,6 +30,6 @@ public final class BarCode implements Serializable {
|
|||
}
|
||||
|
||||
public static BarCode empty() {
|
||||
return new BarCode("","");
|
||||
return new BarCode("", "");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ public class RealStore<Parsed> implements Store<Parsed> {
|
|||
}
|
||||
|
||||
public RealStore(Fetcher<Parsed> fetcher) {
|
||||
internalStore = new RealInternalStore<>(fetcher,new NoopPersister<Parsed>(),
|
||||
internalStore = new RealInternalStore<>(fetcher, new NoopPersister<Parsed>(),
|
||||
new NoopParserFunc<Parsed, Parsed>());
|
||||
}
|
||||
|
||||
|
@ -46,15 +46,13 @@ public class RealStore<Parsed> implements Store<Parsed> {
|
|||
}
|
||||
|
||||
|
||||
|
||||
public <Raw> RealStore(Fetcher<Raw> fetcher,
|
||||
Persister<Raw> persister,
|
||||
Cache<BarCode, Observable<Parsed>> memCache) {
|
||||
internalStore= new RealInternalStore<>(fetcher, persister, new NoopParserFunc<Raw, Parsed>(), memCache);
|
||||
Persister<Raw> persister,
|
||||
Cache<BarCode, Observable<Parsed>> memCache) {
|
||||
internalStore = new RealInternalStore<>(fetcher, persister, new NoopParserFunc<Raw, Parsed>(), memCache);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public Observable<Parsed> get(@NonNull final BarCode barCode) {
|
||||
return internalStore.get(barCode);
|
||||
|
|
|
@ -24,10 +24,10 @@ public class NoopPersisterTest {
|
|||
public void noopParserFuncTest() throws Exception {
|
||||
NoopParserFunc<String, String> noopParserFunc = new NoopParserFunc<>();
|
||||
String input = "foo";
|
||||
String output = (String) noopParserFunc.call((Object) input);
|
||||
String output = (String) noopParserFunc.call(input);
|
||||
assertThat(input).isEqualTo(output);
|
||||
//intended object ref comparison
|
||||
assertThat(input == output).isTrue();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue