aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java_tools/import_deps_checker/javatests
diff options
context:
space:
mode:
authorGravatar cnsun <cnsun@google.com>2018-03-19 13:20:30 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-19 13:21:48 -0700
commitc7a25ca14a105f65dcef1fe3f9879d425f181f5f (patch)
treedaa7fe90f6e725f5355edcccf140d675944f2983 /src/java_tools/import_deps_checker/javatests
parentbff4ac081bd80f227cc0c3027f67e306d35699fa (diff)
1) Fixes a bug in the checking of missing members. Before, MemberInfo contains
both the owner and the name. However, this is wrong, as the field reference or method call may reference the same member with a different owner (e.g., subclass). 2) The type in ASM may refer to internal names, but also may refer to array descriptor. And arrays have methods such as clone(). Before, I just assume that a type can only be internal names. RELNOTES: None. PiperOrigin-RevId: 189630806
Diffstat (limited to 'src/java_tools/import_deps_checker/javatests')
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ClassInfoTest.java32
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/DepsCheckerClassVisitorTest.java17
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java8
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ResultCollectorTest.java36
-rw-r--r--src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata/Client.java15
5 files changed, 74 insertions, 34 deletions
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ClassInfoTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ClassInfoTest.java
index 54d53f2f22..2a09eac8eb 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ClassInfoTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ClassInfoTest.java
@@ -27,8 +27,8 @@ import org.junit.runners.JUnit4;
public class ClassInfoTest {
public static final String JAVA_LANG_OBJECT = "java/lang/Object";
- private final MemberInfo hashCodeMethod = MemberInfo.create(JAVA_LANG_OBJECT, "hashCode", "()I");
- private final MemberInfo sizeMethod = MemberInfo.create(JAVA_LANG_OBJECT, "clear", "()V");
+ private final MemberInfo hashCodeMethod = MemberInfo.create("hashCode", "()I");
+ private final MemberInfo sizeMethod = MemberInfo.create("clear", "()V");
private final ClassInfo objectClass =
ClassInfo.create(JAVA_LANG_OBJECT, ImmutableList.of(), ImmutableSet.of(hashCodeMethod));
@@ -39,23 +39,22 @@ public class ClassInfoTest {
@Test
public void testMemberInfo() {
- MemberInfo memberInfo = MemberInfo.create(JAVA_LANG_OBJECT, "a", "I");
+ MemberInfo memberInfo = MemberInfo.create("a", "I");
assertThat(memberInfo.memberName()).isEqualTo("a");
assertThat(memberInfo.descriptor()).isEqualTo("I");
- assertThat(memberInfo).isEqualTo(MemberInfo.create("java/lang/Object", "a", "I"));
+ assertThat(memberInfo).isEqualTo(MemberInfo.create("a", "I"));
- assertThat(hashCodeMethod).isEqualTo(MemberInfo.create("java/lang/Object", "hashCode", "()I"));
- assertThat(sizeMethod).isEqualTo(MemberInfo.create("java/lang/Object", "clear", "()V"));
+ assertThat(hashCodeMethod).isEqualTo(MemberInfo.create("hashCode", "()I"));
+ assertThat(sizeMethod).isEqualTo(MemberInfo.create("clear", "()V"));
}
@Test
public void testClassInfoCorrectlySet() {
assertThat(objectClass.internalName()).isEqualTo("java/lang/Object");
assertThat(objectClass.declaredMembers())
- .containsExactly(MemberInfo.create("java/lang/Object", "hashCode", "()I"))
+ .containsExactly(MemberInfo.create("hashCode", "()I"))
.inOrder();
- assertThat(objectClass.containsMember(MemberInfo.create("java/lang/Object", "hashCode", "()I")))
- .isTrue();
+ assertThat(objectClass.containsMember(MemberInfo.create("hashCode", "()I"))).isTrue();
assertThat(listClass.internalName()).isEqualTo("java/util/List");
assertThat(listClass.declaredMembers()).containsExactly(sizeMethod);
@@ -67,16 +66,11 @@ public class ClassInfoTest {
ClassInfo parent = objectClass;
ClassInfo child = listClass;
assertThat(child.superClasses()).contains(parent);
- assertThat(parent.containsMember(MemberInfo.create("java/lang/Object", "hashCode", "()I")))
- .isTrue();
- assertThat(parent.containsMember(MemberInfo.create("java/lang/Object", "size", "()I")))
- .isFalse();
- assertThat(parent.containsMember(MemberInfo.create("java/lang/Object", "clear", "()V")))
- .isFalse();
+ assertThat(parent.containsMember(MemberInfo.create("hashCode", "()I"))).isTrue();
+ assertThat(parent.containsMember(MemberInfo.create("size", "()I"))).isFalse();
+ assertThat(parent.containsMember(MemberInfo.create("clear", "()V"))).isFalse();
- assertThat(child.containsMember(MemberInfo.create("java/lang/Object", "hashCode", "()I")))
- .isTrue();
- assertThat(child.containsMember(MemberInfo.create("java/lang/Object", "clear", "()V")))
- .isTrue();
+ assertThat(child.containsMember(MemberInfo.create("hashCode", "()I"))).isTrue();
+ assertThat(child.containsMember(MemberInfo.create("clear", "()V"))).isTrue();
}
}
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/DepsCheckerClassVisitorTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/DepsCheckerClassVisitorTest.java
index 3d19b06638..277fd808a4 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/DepsCheckerClassVisitorTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/DepsCheckerClassVisitorTest.java
@@ -16,7 +16,7 @@ package com.google.devtools.build.importdeps;
import static com.google.common.truth.Truth.assertThat;
import com.google.common.collect.ImmutableList;
-import com.google.devtools.build.importdeps.ClassInfo.MemberInfo;
+import com.google.devtools.build.importdeps.ResultCollector.MissingMember;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
@@ -80,19 +80,19 @@ public class DepsCheckerClassVisitorTest extends AbstractClassCacheTest {
assertThat(collector.getSortedMissingClassInternalNames()).isEmpty();
assertThat(collector.getSortedMissingMembers())
.containsExactly(
- MemberInfo.create(
+ MissingMember.create(
"com/google/devtools/build/importdeps/testdata/Library$Class1",
"I",
"Lcom/google/devtools/build/importdeps/testdata/Library$Class1;"),
- MemberInfo.create(
+ MissingMember.create(
"com/google/devtools/build/importdeps/testdata/Library$Class3",
"field",
"Lcom/google/devtools/build/importdeps/testdata/Library$Class4;"),
- MemberInfo.create(
+ MissingMember.create(
"com/google/devtools/build/importdeps/testdata/Library$Class4",
"createClass5",
"()Lcom/google/devtools/build/importdeps/testdata/Library$Class5;"),
- MemberInfo.create(
+ MissingMember.create(
"com/google/devtools/build/importdeps/testdata/Library$Class5",
"create",
"(Lcom/google/devtools/build/importdeps/testdata/Library$Class7;)"
@@ -111,9 +111,10 @@ public class DepsCheckerClassVisitorTest extends AbstractClassCacheTest {
ResultCollector resultCollector = new ResultCollector();
try (ClassCache cache = new ClassCache(ImmutableList.copyOf(classpath));
ZipFile zipFile = new ZipFile(clientJar.toFile())) {
-
- AbstractClassEntryState state = cache.getClassState("java/lang/invoke/LambdaMetafactory");
- System.out.println(state);
+ assertThat(cache.getClassState("java/lang/invoke/LambdaMetafactory").isExistingState())
+ .isTrue();
+ AbstractClassEntryState state = cache.getClassState("java/lang/Enum");
+ assertThat(state.isExistingState()).isTrue();
for (String clientClass : clientClasses) {
ZipEntry entry = zipFile.getEntry(clientClass + ".class");
try (InputStream classStream = zipFile.getInputStream(entry)) {
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java
index 428b88e9d5..6b0a65134f 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/LazyClassEntryStateTest.java
@@ -32,7 +32,7 @@ public class LazyClassEntryStateTest {
public static final String LIST_CLASS_NAME = "java/util/List";
public static final ImmutableSet<MemberInfo> METHOD_LIST =
- ImmutableSet.of(MemberInfo.create(LIST_CLASS_NAME, "hashCode", "()I"));
+ ImmutableSet.of(MemberInfo.create("hashCode", "()I"));
public static final ClassInfo LIST_CLASS_INFO =
ClassInfo.create(LIST_CLASS_NAME, ImmutableList.of(), METHOD_LIST);
@@ -51,8 +51,7 @@ public class LazyClassEntryStateTest {
ClassInfo classInfo = state.classInfo().get();
assertThat(classInfo.internalName()).isEqualTo("java/util/List");
assertThat(classInfo.declaredMembers()).hasSize(1);
- assertThat(classInfo.declaredMembers())
- .containsExactly(MemberInfo.create("java/util/List", "hashCode", "()I"));
+ assertThat(classInfo.declaredMembers()).containsExactly(MemberInfo.create("hashCode", "()I"));
}
@Test
@@ -74,8 +73,7 @@ public class LazyClassEntryStateTest {
ClassInfo classInfo = state.classInfo().get();
assertThat(classInfo.internalName()).isEqualTo("java/util/List");
assertThat(classInfo.declaredMembers()).hasSize(1);
- assertThat(classInfo.declaredMembers())
- .containsExactly(MemberInfo.create("java/util/List", "hashCode", "()I"));
+ assertThat(classInfo.declaredMembers()).containsExactly(MemberInfo.create("hashCode", "()I"));
ImmutableList<String> failurePath = state.getResolutionFailurePath();
assertThat(failurePath).hasSize(1);
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ResultCollectorTest.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ResultCollectorTest.java
index 0d78504634..3b672880e3 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ResultCollectorTest.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/ResultCollectorTest.java
@@ -20,6 +20,7 @@ import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.importdeps.AbstractClassEntryState.IncompleteState;
import com.google.devtools.build.importdeps.AbstractClassEntryState.MissingState;
import com.google.devtools.build.importdeps.ClassInfo.MemberInfo;
+import com.google.devtools.build.importdeps.ResultCollector.MissingMember;
import java.io.IOException;
import org.junit.Before;
import org.junit.Test;
@@ -50,9 +51,9 @@ public class ResultCollectorTest {
assertThat(collector.getSortedMissingClassInternalNames()).containsExactly("java.lang.String");
assertThat(collector.getSortedMissingMembers()).isEmpty();
- collector.addMissingMember(MemberInfo.create("java/lang/Object", "field", "I"));
+ collector.addMissingMember("java/lang/Object", MemberInfo.create("field", "I"));
assertThat(collector.getSortedMissingMembers())
- .containsExactly(MemberInfo.create("java/lang/Object", "field", "I"));
+ .containsExactly(MissingMember.create("java/lang/Object", "field", "I"));
assertThat(collector.getSortedMissingClassInternalNames()).containsExactly("java.lang.String");
}
@@ -78,4 +79,35 @@ public class ResultCollectorTest {
.containsExactly("java.lang.String", "java.lang.Integer", "java.lang.Object");
assertThat(collector.getSortedMissingMembers()).isEmpty();
}
+
+ @Test
+ public void testMissingMember() {
+ String owner = "owner";
+ String name = "name";
+ String desc = "desc";
+ MissingMember member = MissingMember.create(owner, name, desc);
+ assertThat(member.owner()).isEqualTo(owner);
+ assertThat(member.memberName()).isEqualTo(name);
+ assertThat(member.descriptor()).isEqualTo(desc);
+ assertThat(member.member()).isEqualTo(MemberInfo.create(name, desc));
+
+ MissingMember member2 = MissingMember.create(owner, MemberInfo.create(name, desc));
+ assertThat(member2).isEqualTo(member);
+ }
+
+ @Test
+ public void testMemberComparison() {
+ MissingMember member1 = MissingMember.create("A", MemberInfo.create("B", "C"));
+ MissingMember member2 = MissingMember.create("A", MemberInfo.create("B", "C"));
+ assertThat(member1.compareTo(member2)).isEqualTo(0);
+
+ MissingMember member3 = MissingMember.create("B", MemberInfo.create("B", "C"));
+ assertThat(member1.compareTo(member3)).isEqualTo(-1);
+ assertThat(member3.compareTo(member1)).isEqualTo(1);
+
+ MissingMember member4 = MissingMember.create("A", MemberInfo.create("C", "C"));
+ assertThat(member1.compareTo(member4)).isEqualTo(-1);
+
+ assertThat(member3.compareTo(member4)).isEqualTo(1);
+ }
}
diff --git a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata/Client.java b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata/Client.java
index 6b833c3b61..307f2d8395 100644
--- a/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata/Client.java
+++ b/src/java_tools/import_deps_checker/javatests/com/google/devtools/build/importdeps/testdata/Client.java
@@ -57,6 +57,15 @@ public class Client<@TypeAnnotation T> extends Library implements LibraryInterfa
Class8[][] array = new Class8[10][10];
Class9[] array2 = new Class9[10];
array2[0] = new Class10();
+ Object[] copy = array.clone();
+ array = (Class8[][]) copy;
+ System.out.println(array.clone().length);
+ }
+
+ public void testEnums() {
+ EnumTest a = EnumTest.A;
+ System.out.println(a.ordinal());
+ System.out.println(a.name());
}
/** An inner annotation. */
@@ -64,4 +73,10 @@ public class Client<@TypeAnnotation T> extends Library implements LibraryInterfa
@Target(ElementType.TYPE)
@AnnotationAnnotation
public @interface NestedAnnotation {}
+
+ public enum EnumTest {
+ A,
+ B,
+ C
+ }
}