move to Reader API to help with annoying /r/n issues is source mapping
This commit is contained in:
parent
6bb598e6dc
commit
92bec0cc0b
|
@ -14,7 +14,8 @@
|
|||
package com.ibm.wala.cast.java.translator.polyglot;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
|
@ -2515,8 +2516,8 @@ public class PolyglotJava2CAstTranslator {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return getURL().openConnection().getInputStream();
|
||||
public Reader getReader() throws IOException {
|
||||
return new InputStreamReader(getURL().openConnection().getInputStream());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,7 @@ package com.ibm.wala.cast.js.html.nu_validator;
|
|||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.LineNumberReader;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
@ -41,7 +42,7 @@ import com.ibm.wala.util.collections.Pair;
|
|||
public class NuValidatorHtmlParser implements IHtmlParser {
|
||||
|
||||
@Override
|
||||
public void parse(final URL url, final InputStream reader, final IHtmlCallback handler, final String fileName) {
|
||||
public void parse(final URL url, final Reader reader, final IHtmlCallback handler, final String fileName) {
|
||||
URL xx = null;
|
||||
try {
|
||||
xx = new URL("file://" + fileName);
|
||||
|
|
|
@ -14,8 +14,9 @@ import java.io.BufferedReader;
|
|||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.Reader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.Collections;
|
||||
|
@ -232,9 +233,9 @@ public class DomLessSourceExtractor extends JSSourceExtractor {
|
|||
return;
|
||||
}
|
||||
|
||||
InputStream scriptInputStream;
|
||||
Reader scriptInputStream;
|
||||
try {
|
||||
scriptInputStream = scriptSrc.openConnection().getInputStream();
|
||||
scriptInputStream = new InputStreamReader(scriptSrc.openConnection().getInputStream());
|
||||
} catch (Exception e) {
|
||||
//it looks like this happens when we can't resolve the url?
|
||||
if (DEBUG) {
|
||||
|
@ -248,7 +249,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor {
|
|||
BufferedReader scriptReader = null;
|
||||
try {
|
||||
String line;
|
||||
scriptReader = new BufferedReader(new UnicodeReader(scriptInputStream, "UTF8"));
|
||||
scriptReader = new BufferedReader(scriptInputStream);
|
||||
StringBuffer x = new StringBuffer();
|
||||
while ((line = scriptReader.readLine()) != null) {
|
||||
x.append(line).append("\n");
|
||||
|
@ -299,7 +300,7 @@ public class DomLessSourceExtractor extends JSSourceExtractor {
|
|||
public Set<MappedSourceModule> extractSources(URL entrypointUrl, IHtmlParser htmlParser, IUrlResolver urlResolver)
|
||||
throws IOException, Error {
|
||||
|
||||
InputStream inputStreamReader = WebUtil.getStream(entrypointUrl);
|
||||
Reader inputStreamReader = WebUtil.getStream(entrypointUrl);
|
||||
IGeneratorCallback htmlCallback = createHtmlCallback(entrypointUrl, urlResolver);
|
||||
htmlParser.parse(entrypointUrl, inputStreamReader, htmlCallback, entrypointUrl.getFile());
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*****************************************************************************/
|
||||
package com.ibm.wala.cast.js.html;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
|
||||
import com.ibm.wala.cast.ir.translator.TranslatorToCAst.Error;
|
||||
|
@ -29,6 +29,6 @@ public interface IHtmlParser {
|
|||
* @param fileName
|
||||
* @throws Error
|
||||
*/
|
||||
public void parse(URL url, InputStream reader, IHtmlCallback callback, String fileName) throws Error;
|
||||
public void parse(URL url, Reader reader, IHtmlCallback callback, String fileName) throws Error;
|
||||
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package com.ibm.wala.cast.js.html;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
|
||||
import com.ibm.wala.cast.js.html.RangeFileMapping.Range;
|
||||
|
@ -69,8 +69,8 @@ public class NestedRangeMapping implements FileMapping {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return pos.getInputStream();
|
||||
public Reader getReader() throws IOException {
|
||||
return pos.getReader();
|
||||
}
|
||||
});
|
||||
} else {
|
||||
|
|
|
@ -11,10 +11,9 @@
|
|||
package com.ibm.wala.cast.js.html;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
import com.ibm.wala.cast.tree.impl.AbstractSourcePosition;
|
||||
|
@ -115,7 +114,7 @@ public class RangeFileMapping implements FileMapping {
|
|||
return includedURL;
|
||||
}
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
public Reader getReader() throws IOException {
|
||||
return RangeFileMapping.this.getInputStream();
|
||||
}
|
||||
@Override
|
||||
|
@ -134,18 +133,8 @@ public class RangeFileMapping implements FileMapping {
|
|||
}
|
||||
}
|
||||
|
||||
private URLConnection includedURLConnection = null;
|
||||
|
||||
public InputStream getInputStream() throws IOException {
|
||||
if (includedURLConnection == null) {
|
||||
includedURLConnection = includedURL.openConnection();
|
||||
if (includedURLConnection instanceof HttpURLConnection) {
|
||||
includedURLConnection.setConnectTimeout(10);
|
||||
includedURLConnection.setReadTimeout(25);
|
||||
}
|
||||
}
|
||||
|
||||
return includedURLConnection.getInputStream();
|
||||
public Reader getInputStream() throws IOException {
|
||||
return new InputStreamReader(includedURL.openStream());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -11,9 +11,9 @@
|
|||
package com.ibm.wala.cast.js.html;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringBufferInputStream;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.net.URL;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
|
@ -38,7 +38,7 @@ public class SourceRegion {
|
|||
|
||||
public void print(final String text, Position originalPos, URL url, boolean bogusURL){
|
||||
int startOffset = source.length();
|
||||
source.append(text);
|
||||
source.append(text);
|
||||
int endOffset = source.length();
|
||||
|
||||
int numberOfLineDrops = getNumberOfLineDrops(text);
|
||||
|
@ -48,8 +48,8 @@ public class SourceRegion {
|
|||
if (bogusURL) {
|
||||
map = new RangeFileMapping(startOffset, endOffset, currentLine, currentLine+numberOfLineDrops, originalPos, url) {
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return new StringBufferInputStream(text);
|
||||
public Reader getInputStream() throws IOException {
|
||||
return new StringReader(text);
|
||||
}
|
||||
};
|
||||
} else {
|
||||
|
|
|
@ -12,7 +12,8 @@ package com.ibm.wala.cast.js.html;
|
|||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
@ -59,12 +60,12 @@ public class WebUtil {
|
|||
System.err.println(extractScriptFromHTML(new URL(args[0]), Boolean.parseBoolean(args[1])));
|
||||
}
|
||||
|
||||
public static InputStream getStream(URL url) throws IOException {
|
||||
public static Reader getStream(URL url) throws IOException {
|
||||
URLConnection conn = url.openConnection();
|
||||
conn.setDefaultUseCaches(false);
|
||||
conn.setUseCaches(false);
|
||||
|
||||
return conn.getInputStream();
|
||||
return new InputStreamReader(conn.getInputStream());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package com.ibm.wala.cast.js.html.jericho;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
@ -102,7 +102,7 @@ public class JerichoHtmlParser implements IHtmlParser{
|
|||
}
|
||||
|
||||
@Override
|
||||
public void parse(URL url, InputStream reader, IHtmlCallback callback, String fileName) throws TranslatorToCAst.Error {
|
||||
public void parse(URL url, Reader reader, IHtmlCallback callback, String fileName) throws TranslatorToCAst.Error {
|
||||
warnings.clear();
|
||||
Parser parser = new Parser(callback, fileName);
|
||||
Source src;
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
package com.ibm.wala.cast.js.translator;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
|
||||
import com.ibm.wala.cast.tree.CAstSourcePositionMap.Position;
|
||||
|
@ -78,7 +79,7 @@ public class RangePosition extends AbstractSourcePosition implements Position {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return url.openStream();
|
||||
public Reader getReader() throws IOException {
|
||||
return new InputStreamReader(url.openStream());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package com.ibm.wala.cast.loader;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
@ -105,7 +106,7 @@ abstract public class AstClass implements IClass, ClassConstants {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package com.ibm.wala.cast.loader;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
@ -154,7 +155,7 @@ abstract public class AstFunctionClass implements IClass, ClassConstants {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package com.ibm.wala.cast.loader;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
@ -175,18 +175,18 @@ public abstract class CAstAbstractLoader implements IClassLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource(IClass klass) {
|
||||
public Reader getSource(IClass klass) {
|
||||
try {
|
||||
return ((AstClass)klass).getSourcePosition().getInputStream();
|
||||
return ((AstClass)klass).getSourcePosition().getReader();
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource(IMethod method, int bcOffset) {
|
||||
public Reader getSource(IMethod method, int bcOffset) {
|
||||
try {
|
||||
return ((AstMethod)method).getSourcePosition(bcOffset).getInputStream();
|
||||
return ((AstMethod)method).getSourcePosition(bcOffset).getReader();
|
||||
} catch (IOException e) {
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package com.ibm.wala.cast.tree;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
import java.util.Iterator;
|
||||
|
||||
|
@ -43,7 +43,7 @@ public interface CAstSourcePositionMap {
|
|||
int getFirstOffset();
|
||||
int getLastOffset();
|
||||
URL getURL();
|
||||
InputStream getInputStream() throws IOException;
|
||||
Reader getReader() throws IOException;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.HashMap;
|
||||
|
@ -76,8 +77,8 @@ public class CAstSourcePositionRecorder implements CAstSourcePositionMap {
|
|||
@Override
|
||||
public URL getURL() { return url; }
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return file.openConnection().getInputStream();
|
||||
public Reader getReader() throws IOException {
|
||||
return new InputStreamReader(file.openConnection().getInputStream());
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
package com.ibm.wala.cast.tree.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.net.URL;
|
||||
|
||||
public class LineNumberPosition extends AbstractSourcePosition {
|
||||
|
@ -47,8 +48,8 @@ public class LineNumberPosition extends AbstractSourcePosition {
|
|||
public URL getURL() { return url; }
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
return localFile.openConnection().getInputStream();
|
||||
public Reader getReader() throws IOException {
|
||||
return new InputStreamReader(localFile.openConnection().getInputStream());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -15,6 +15,7 @@ import static com.ibm.wala.types.TypeName.ElementBits;
|
|||
import static com.ibm.wala.types.TypeName.PrimitiveMask;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
@ -365,7 +366,7 @@ public class ArrayClass implements IClass, Constants {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*******************************************************************************/
|
||||
package com.ibm.wala.classLoader;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
|
@ -164,7 +164,7 @@ public abstract class BytecodeClass<T extends IClassLoader> implements IClass {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return loader.getSource(this);
|
||||
}
|
||||
|
||||
|
|
|
@ -17,6 +17,8 @@ import java.io.File;
|
|||
import java.io.FileInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
|
@ -676,7 +678,7 @@ public class ClassLoaderImpl implements IClassLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource(IMethod method, int offset) {
|
||||
public Reader getSource(IMethod method, int offset) {
|
||||
return getSource(method.getDeclaringClass());
|
||||
}
|
||||
|
||||
|
@ -686,12 +688,12 @@ public class ClassLoaderImpl implements IClassLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource(IClass klass) {
|
||||
public Reader getSource(IClass klass) {
|
||||
if (klass == null) {
|
||||
throw new IllegalArgumentException("klass is null");
|
||||
}
|
||||
ModuleEntry e = sourceMap.get(klass.getName());
|
||||
return e == null ? null : e.getInputStream();
|
||||
return e == null ? null : new InputStreamReader(e.getInputStream());
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
package com.ibm.wala.classLoader;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.NoSuchElementException;
|
||||
|
||||
|
@ -120,7 +121,7 @@ public interface IClass extends IClassHierarchyDweller {
|
|||
* specific, and will change in the future. In place of this API, use the APIs in IClassLoader.
|
||||
* SJF .. we should think about this deprecation. postponing deprecation for now.
|
||||
*/
|
||||
InputStream getSource() throws NoSuchElementException;
|
||||
Reader getSource() throws NoSuchElementException;
|
||||
|
||||
/**
|
||||
* @return the method that is this class's initializer, or null if none
|
||||
|
|
|
@ -13,6 +13,7 @@ package com.ibm.wala.classLoader;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
@ -81,7 +82,7 @@ public interface IClassLoader {
|
|||
* @return input stream representing the source file for a given bytecode index of a given method,
|
||||
* or null if not available
|
||||
*/
|
||||
public abstract InputStream getSource(IMethod method, int offset);
|
||||
public abstract Reader getSource(IMethod method, int offset);
|
||||
|
||||
/**
|
||||
* @param klass the class for which information is desired.
|
||||
|
@ -104,7 +105,7 @@ public interface IClassLoader {
|
|||
* will be recorded.
|
||||
* SJF .. we should think about this deprecation. postponing deprecation for now.
|
||||
*/
|
||||
public abstract InputStream getSource(IClass klass) throws NoSuchElementException;
|
||||
public abstract Reader getSource(IClass klass) throws NoSuchElementException;
|
||||
|
||||
/**
|
||||
* @return the parent IClassLoader, if any, or null
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
package com.ibm.wala.classLoader;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
|
@ -113,7 +114,7 @@ public abstract class SyntheticClass implements IClass {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
package com.ibm.wala.ipa.callgraph.impl;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
|
@ -276,7 +277,7 @@ public class FakeRootClass extends SyntheticClass {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*******************************************************************************/
|
||||
package com.ibm.wala.ipa.summaries;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
@ -259,7 +259,7 @@ public class BypassSyntheticClass extends SyntheticClass {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource() {
|
||||
public Reader getSource() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ package com.ibm.wala.ipa.summaries;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
|
@ -195,7 +196,7 @@ public class BypassSyntheticClassLoader implements IClassLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource(IClass klass) {
|
||||
public Reader getSource(IClass klass) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -205,7 +206,7 @@ public class BypassSyntheticClassLoader implements IClassLoader {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getSource(IMethod method, int offset) {
|
||||
public Reader getSource(IMethod method, int offset) {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
package com.ibm.wala.ide.util;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
|
||||
|
@ -51,7 +51,7 @@ public final class JdtPosition implements Position {
|
|||
}
|
||||
|
||||
@Override
|
||||
public InputStream getInputStream() throws IOException {
|
||||
public Reader getReader() throws IOException {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue