aboutsummaryrefslogtreecommitdiff
path: root/javatests/com/google/turbine/lower/LowerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'javatests/com/google/turbine/lower/LowerTest.java')
-rw-r--r--javatests/com/google/turbine/lower/LowerTest.java95
1 files changed, 85 insertions, 10 deletions
diff --git a/javatests/com/google/turbine/lower/LowerTest.java b/javatests/com/google/turbine/lower/LowerTest.java
index a6410db..2de4650 100644
--- a/javatests/com/google/turbine/lower/LowerTest.java
+++ b/javatests/com/google/turbine/lower/LowerTest.java
@@ -25,6 +25,7 @@ import static org.junit.Assert.assertThrows;
import com.google.common.base.Joiner;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
+import org.objectweb.asm.Opcodes;
import com.google.turbine.binder.Binder;
import com.google.turbine.binder.Binder.BindingResult;
import com.google.turbine.binder.ClassPathBinder;
@@ -232,7 +233,7 @@ public class LowerTest {
Map<String, byte[]> bytes =
Lower.lowerAll(
- LanguageVersion.createDefault(),
+ Lower.LowerOptions.createDefault(),
ImmutableMap.of(
new ClassSymbol("test/Test"), c, new ClassSymbol("test/Test$Inner"), i),
ImmutableList.of(),
@@ -260,10 +261,10 @@ public class LowerTest {
"}"))),
ClassPathBinder.bindClasspath(ImmutableList.of()),
TURBINE_BOOTCLASSPATH,
- /* moduleVersion=*/ Optional.empty());
+ /* moduleVersion= */ Optional.empty());
Map<String, byte[]> lowered =
Lower.lowerAll(
- LanguageVersion.createDefault(),
+ Lower.LowerOptions.createDefault(),
bound.units(),
bound.modules(),
bound.classPathEnv())
@@ -340,10 +341,10 @@ public class LowerTest {
"}"))),
ClassPathBinder.bindClasspath(ImmutableList.of()),
TURBINE_BOOTCLASSPATH,
- /* moduleVersion=*/ Optional.empty());
+ /* moduleVersion= */ Optional.empty());
Map<String, byte[]> lowered =
Lower.lowerAll(
- LanguageVersion.createDefault(),
+ Lower.LowerOptions.createDefault(),
bound.units(),
bound.modules(),
bound.classPathEnv())
@@ -423,10 +424,10 @@ public class LowerTest {
ImmutableList.of(Parser.parse("@Deprecated class Test {}")),
ClassPathBinder.bindClasspath(ImmutableList.of()),
TURBINE_BOOTCLASSPATH,
- /* moduleVersion=*/ Optional.empty());
+ /* moduleVersion= */ Optional.empty());
Map<String, byte[]> lowered =
Lower.lowerAll(
- LanguageVersion.createDefault(),
+ Lower.LowerOptions.createDefault(),
bound.units(),
bound.modules(),
bound.classPathEnv())
@@ -544,7 +545,7 @@ public class LowerTest {
.put(
"Test.java",
lines(
- "public class Test extends B.BM {", //
+ "public class Test implements B.BM {", //
" I i;",
"}"))
.build();
@@ -649,10 +650,14 @@ public class LowerTest {
ImmutableList.of(Parser.parse("class Test {}")),
ClassPathBinder.bindClasspath(ImmutableList.of()),
TURBINE_BOOTCLASSPATH,
- /* moduleVersion=*/ Optional.empty());
+ /* moduleVersion= */ Optional.empty());
Map<String, byte[]> lowered =
Lower.lowerAll(
- LanguageVersion.fromJavacopts(ImmutableList.of("-source", "7", "-target", "7")),
+ Lower.LowerOptions.builder()
+ .languageVersion(
+ LanguageVersion.fromJavacopts(
+ ImmutableList.of("-source", "7", "-target", "7")))
+ .build(),
bound.units(),
bound.modules(),
bound.classPathEnv())
@@ -676,6 +681,76 @@ public class LowerTest {
assertThat(major[0]).isEqualTo(Opcodes.V1_8);
}
+ @Test
+ public void privateFields() throws Exception {
+ BindingResult bound =
+ Binder.bind(
+ ImmutableList.of(
+ Parser.parse(
+ "class Test {\n" //
+ + " private int x;\n"
+ + " int y;\n"
+ + "}")),
+ ClassPathBinder.bindClasspath(ImmutableList.of()),
+ TURBINE_BOOTCLASSPATH,
+ /* moduleVersion= */ Optional.empty());
+ ImmutableMap<String, byte[]> lowered =
+ Lower.lowerAll(
+ Lower.LowerOptions.builder().emitPrivateFields(true).build(),
+ bound.units(),
+ bound.modules(),
+ bound.classPathEnv())
+ .bytes();
+ List<String> fields = new ArrayList<>();
+ new ClassReader(lowered.get("Test"))
+ .accept(
+ new ClassVisitor(Opcodes.ASM9) {
+ @Override
+ public FieldVisitor visitField(
+ int access, String name, String descriptor, String signature, Object value) {
+ fields.add(name);
+ return null;
+ }
+ },
+ 0);
+ assertThat(fields).containsExactly("x", "y");
+ }
+
+ @Test
+ public void noPrivateFields() throws Exception {
+ BindingResult bound =
+ Binder.bind(
+ ImmutableList.of(
+ Parser.parse(
+ "class Test {\n" //
+ + " private int x;\n"
+ + " int y;\n"
+ + "}")),
+ ClassPathBinder.bindClasspath(ImmutableList.of()),
+ TURBINE_BOOTCLASSPATH,
+ /* moduleVersion= */ Optional.empty());
+ ImmutableMap<String, byte[]> lowered =
+ Lower.lowerAll(
+ Lower.LowerOptions.createDefault(),
+ bound.units(),
+ bound.modules(),
+ bound.classPathEnv())
+ .bytes();
+ List<String> fields = new ArrayList<>();
+ new ClassReader(lowered.get("Test"))
+ .accept(
+ new ClassVisitor(Opcodes.ASM9) {
+ @Override
+ public FieldVisitor visitField(
+ int access, String name, String descriptor, String signature, Object value) {
+ fields.add(name);
+ return null;
+ }
+ },
+ 0);
+ assertThat(fields).containsExactly("y");
+ }
+
static String lines(String... lines) {
return Joiner.on(System.lineSeparator()).join(lines);
}