Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Harley2008-09-14 21:29:12 +0000
committerWalter Harley2008-09-14 21:29:12 +0000
commit521b10019026729ea6f37775e2b59ebaf2f70e3f (patch)
tree20d543f8de3b2fb4740bd7b5570ac7da562701e3
parent7515dcbf0b2425523d6c7872cb12027c7c83661e (diff)
downloadeclipse.jdt.core-521b10019026729ea6f37775e2b59ebaf2f70e3f.tar.gz
eclipse.jdt.core-521b10019026729ea6f37775e2b59ebaf2f70e3f.tar.xz
eclipse.jdt.core-521b10019026729ea6f37775e2b59ebaf2f70e3f.zip
bug 246089: implement FileObject.getCharContent() in IDE
-rw-r--r--org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeInputFileObject.java19
-rw-r--r--org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java31
-rw-r--r--org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/processors/filertester/FilerTesterProc.java42
3 files changed, 90 insertions, 2 deletions
diff --git a/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeInputFileObject.java b/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeInputFileObject.java
index 599c728bbe..c1693a6541 100644
--- a/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeInputFileObject.java
+++ b/org.eclipse.jdt.apt.pluggable.core/src/org/eclipse/jdt/internal/apt/pluggable/core/filer/IdeInputFileObject.java
@@ -18,6 +18,7 @@ import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
+import java.io.StringWriter;
import java.io.Writer;
import java.net.URI;
@@ -51,8 +52,22 @@ public class IdeInputFileObject implements FileObject {
*/
@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) throws IOException {
- //TODO
- throw new UnsupportedOperationException("Not yet implemented");
+ // Use buffer size at least as big as the default size of the
+ // BufferedReader returned by openReader(), to reduce redundant
+ // copying. See BufferedReader.read1() for details.
+ char[] buffer = new char[8192];
+ StringWriter w = new StringWriter();
+ Reader r = openReader(ignoreEncodingErrors);
+ try {
+ int read = -1;
+ while ((read = r.read(buffer)) != -1) {
+ w.write(buffer, 0, read);
+ }
+ }
+ finally {
+ r.close();
+ }
+ return w.getBuffer();
}
/* (non-Javadoc)
diff --git a/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java b/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java
index d948217ef6..4bc132f90e 100644
--- a/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java
+++ b/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/FilerTests.java
@@ -194,4 +194,35 @@ public class FilerTests extends TestBase
assertEquals("Processor reported errors", ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
}
+ /**
+ * Call FilerTesterProc.testGetCharContentLarge(), which checks FileObject.getCharContent()
+ * for a large (multiple buffers long) file
+ */
+ public void testGetCharContentLarge() throws Throwable {
+ ProcessorTestStatus.reset();
+ IJavaProject jproj = createJavaProject(_projectName);
+ disableJava5Factories(jproj);
+ IProject proj = jproj.getProject();
+ IPath projPath = proj.getFullPath();
+
+ env.addClass(projPath.append("src"), "p", "Trigger",
+ "package p;\n" +
+ "import org.eclipse.jdt.apt.pluggable.tests.annotations.FilerTestTrigger;\n" +
+ "@FilerTestTrigger(test = \"testGetCharContentLarge\", arg0 = \"g\", arg1 = \"Test.java\")" +
+ "public class Trigger {\n" +
+ "}"
+ );
+
+ AptConfig.setEnabled(jproj, true);
+
+ // FilerTesterProc looks for the existence and contents of this class:
+ env.addClass(projPath.append(".apt_generated"), "g", "Test",
+ FilerTesterProc.largeJavaClass());
+
+ fullBuild();
+ expectingNoProblems();
+ assertTrue("Processor did not run", ProcessorTestStatus.processorRan());
+ assertEquals("Processor reported errors", ProcessorTestStatus.NO_ERRORS, ProcessorTestStatus.getErrors());
+ }
+
}
diff --git a/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/processors/filertester/FilerTesterProc.java b/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/processors/filertester/FilerTesterProc.java
index a393d6241b..2967e96daa 100644
--- a/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/processors/filertester/FilerTesterProc.java
+++ b/org.eclipse.jdt.apt.pluggable.tests/src/org/eclipse/jdt/apt/pluggable/tests/processors/filertester/FilerTesterProc.java
@@ -62,6 +62,27 @@ public class FilerTesterProc extends AbstractProcessor {
public static final String resource02Name =
"bin/t/Test.txt";
+ /**
+ * @return a string representing a large Java class.
+ */
+ public static String largeJavaClass() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("package g;\n");
+ sb.append("public class Test {\n");
+ sb.append(" public static final String bigString = \n");
+ for (int i = 0; i < 500; ++i) {
+ sb.append(" \"the quick brown dog jumped over the lazy fox, in a peculiar reversal\\n\" +\n");
+ }
+ sb.append(" \"\";\n");
+ sb.append("\n");
+ sb.append(" /** This file is at least this big */\n");
+ sb.append(" public static final int SIZE = ");
+ sb.append(sb.length());
+ sb.append(";\n");
+ sb.append("}\n");
+ return sb.toString();
+ }
+
/*
* (non-Javadoc)
*
@@ -138,6 +159,20 @@ public class FilerTesterProc extends AbstractProcessor {
}
/**
+ * Attempt to get an existing resource from the SOURCE_OUTPUT.
+ */
+ public void testGetCharContentLarge(Element e, String arg0, String arg1) throws Exception {
+ FileObject resource = _filer.getResource(StandardLocation.SOURCE_OUTPUT, arg0, arg1);
+ CharSequence actualCharContent = resource.getCharContent(true);
+ String expectedContents = largeJavaClass();
+ if (!expectedContents.equals(actualCharContent.toString())) {
+ System.out.println("Expected getCharContent to return:\n" + expectedContents);
+ System.out.println("Actual getCharContent returned:\n" + actualCharContent);
+ ProcessorTestStatus.fail("getCharContent() did not return expected contents");
+ }
+ }
+
+ /**
* Check that the resource can be opened, examined, and its contents match
* {@link #checkResourceContents01(FileObject)}getResource01FileContents
*/
@@ -179,6 +214,13 @@ public class FilerTesterProc extends AbstractProcessor {
ProcessorTestStatus.fail("reader did not contain expected contents");
}
reader.close();
+
+ CharSequence actualCharContent = resource.getCharContent(true);
+ if (!expectedContents.equals(actualCharContent.toString())) {
+ System.out.println("Expected getCharContent to return:\n" + expectedContents);
+ System.out.println("Actual getCharContent returned:\n" + actualCharContent);
+ ProcessorTestStatus.fail("getCharContent() did not return expected contents");
+ }
}
}

Back to the top