aboutsummaryrefslogtreecommitdiff
path: root/processor
diff options
context:
space:
mode:
authorRam Peri <ramperi@google.com>2023-05-23 14:53:28 -0400
committerRam Peri <ramperi@google.com>2023-05-23 16:35:02 -0400
commit8793b94bf5d4134f2adf1d6216fce8c9cb2aa3ba (patch)
tree6e6dbf0dd32afbddde5f8f7694e5497df2216e6b /processor
parent7a4fa77f02cc6d37ad958998dc1649bb52c1e6f6 (diff)
parentf2327eec5beaf1cad4d2cc8b394484fa210fa36a (diff)
downloadrobolectric-8793b94bf5d4134f2adf1d6216fce8c9cb2aa3ba.tar.gz
Merge branch 'upstream-google' into tm_sync
Test: atest -c MyRoboTests Bug: 281899632 Change-Id: Ic205da6e976c3c7cb1b91c332ddfd22d906ffe51
Diffstat (limited to 'processor')
-rw-r--r--processor/build.gradle22
-rw-r--r--processor/src/main/java/org/robolectric/annotation/processing/RobolectricModel.java5
-rw-r--r--processor/src/main/java/org/robolectric/annotation/processing/validator/ResetterValidator.java18
-rw-r--r--processor/src/test/java/org/robolectric/annotation/processing/validator/ResetterValidatorTest.java26
-rw-r--r--processor/src/test/resources/org/robolectric/annotation/processing/shadows/ShadowWithTwoResetters.java15
5 files changed, 71 insertions, 15 deletions
diff --git a/processor/build.gradle b/processor/build.gradle
index ac14e4282..9185d088a 100644
--- a/processor/build.gradle
+++ b/processor/build.gradle
@@ -35,21 +35,21 @@ dependencies {
api project(":annotations")
api project(":shadowapi")
- compileOnly "com.google.code.findbugs:jsr305:3.0.2"
- api "org.ow2.asm:asm:${asmVersion}"
- api "org.ow2.asm:asm-commons:${asmVersion}"
- api "com.google.guava:guava:$guavaJREVersion"
- api "com.google.code.gson:gson:2.10.1"
- implementation 'com.google.auto:auto-common:1.1.2'
+ compileOnly libs.findbugs.jsr305
+ api libs.asm
+ api libs.asm.commons
+ api libs.guava
+ api libs.gson
+ implementation libs.auto.common
def toolsJar = Jvm.current().getToolsJar()
if (toolsJar != null) {
implementation files(toolsJar)
}
- testImplementation "javax.annotation:jsr250-api:1.0"
- testImplementation "junit:junit:${junitVersion}"
- testImplementation "org.mockito:mockito-core:${mockitoVersion}"
- testImplementation "com.google.testing.compile:compile-testing:0.21.0"
- testImplementation "com.google.truth:truth:${truthVersion}"
+ testImplementation libs.javax.annotation.jsr250.api
+ testImplementation libs.junit4
+ testImplementation libs.mockito
+ testImplementation libs.compile.testing
+ testImplementation libs.truth
}
diff --git a/processor/src/main/java/org/robolectric/annotation/processing/RobolectricModel.java b/processor/src/main/java/org/robolectric/annotation/processing/RobolectricModel.java
index fd5e77dd2..d9905f6cf 100644
--- a/processor/src/main/java/org/robolectric/annotation/processing/RobolectricModel.java
+++ b/processor/src/main/java/org/robolectric/annotation/processing/RobolectricModel.java
@@ -1,5 +1,6 @@
package org.robolectric.annotation.processing;
+import static com.google.common.base.Preconditions.checkState;
import static com.google.common.collect.Maps.newHashMap;
import static com.google.common.collect.Maps.newTreeMap;
import static com.google.common.collect.Sets.newTreeSet;
@@ -127,6 +128,10 @@ public class RobolectricModel {
}
public void addResetter(TypeElement shadowTypeElement, ExecutableElement elem) {
+ checkState(
+ !resetterMap.containsKey(shadowTypeElement.getQualifiedName().toString()),
+ "Trying to register a duplicate resetter on %s",
+ shadowTypeElement.getQualifiedName());
registerType(shadowTypeElement);
resetterMap.put(shadowTypeElement.getQualifiedName().toString(),
diff --git a/processor/src/main/java/org/robolectric/annotation/processing/validator/ResetterValidator.java b/processor/src/main/java/org/robolectric/annotation/processing/validator/ResetterValidator.java
index d409f8396..39df257f9 100644
--- a/processor/src/main/java/org/robolectric/annotation/processing/validator/ResetterValidator.java
+++ b/processor/src/main/java/org/robolectric/annotation/processing/validator/ResetterValidator.java
@@ -1,6 +1,9 @@
package org.robolectric.annotation.processing.validator;
+import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
import java.util.Set;
import javax.annotation.processing.ProcessingEnvironment;
import javax.lang.model.element.ExecutableElement;
@@ -13,6 +16,9 @@ import org.robolectric.annotation.processing.RobolectricModel;
* Validator that checks usages of {@link org.robolectric.annotation.Resetter}.
*/
public class ResetterValidator extends FoundOnImplementsValidator {
+
+ private final Map<TypeElement, ExecutableElement> resetterMethodsByClass = new HashMap<>();
+
public ResetterValidator(RobolectricModel.Builder modelBuilder, ProcessingEnvironment env) {
super(modelBuilder, env, "org.robolectric.annotation.Resetter");
}
@@ -35,7 +41,19 @@ public class ResetterValidator extends FoundOnImplementsValidator {
error("@Resetter methods must not have parameters");
error = true;
}
+ if (resetterMethodsByClass.containsKey(parent)) {
+ error(
+ String.format(
+ Locale.US,
+ "Duplicate @Resetter methods found on %s: %s() and %s(). Only one @Resetter method"
+ + " is permitted on each shadow.",
+ parent.getQualifiedName(),
+ resetterMethodsByClass.get(parent).getSimpleName(),
+ elem.getSimpleName()));
+ error = true;
+ }
if (!error) {
+ resetterMethodsByClass.put(parent, elem);
modelBuilder.addResetter(parent, elem);
}
}
diff --git a/processor/src/test/java/org/robolectric/annotation/processing/validator/ResetterValidatorTest.java b/processor/src/test/java/org/robolectric/annotation/processing/validator/ResetterValidatorTest.java
index 68900409b..c7924e8b0 100644
--- a/processor/src/test/java/org/robolectric/annotation/processing/validator/ResetterValidatorTest.java
+++ b/processor/src/test/java/org/robolectric/annotation/processing/validator/ResetterValidatorTest.java
@@ -12,7 +12,8 @@ import org.junit.runners.JUnit4;
public class ResetterValidatorTest {
@Test
public void resetterWithoutImplements_shouldNotCompile() {
- final String testClass = "org.robolectric.annotation.processing.shadows.ShadowResetterWithoutImplements";
+ final String testClass =
+ "org.robolectric.annotation.processing.shadows.ShadowResetterWithoutImplements";
assertAbout(singleClass())
.that(testClass)
.failsToCompile()
@@ -22,7 +23,8 @@ public class ResetterValidatorTest {
@Test
public void nonStaticResetter_shouldNotCompile() {
- final String testClass = "org.robolectric.annotation.processing.shadows.ShadowResetterNonStatic";
+ final String testClass =
+ "org.robolectric.annotation.processing.shadows.ShadowResetterNonStatic";
assertAbout(singleClass())
.that(testClass)
.failsToCompile()
@@ -32,7 +34,8 @@ public class ResetterValidatorTest {
@Test
public void nonPublicResetter_shouldNotCompile() {
- final String testClass = "org.robolectric.annotation.processing.shadows.ShadowResetterNonPublic";
+ final String testClass =
+ "org.robolectric.annotation.processing.shadows.ShadowResetterNonPublic";
assertAbout(singleClass())
.that(testClass)
.failsToCompile()
@@ -42,7 +45,8 @@ public class ResetterValidatorTest {
@Test
public void resetterWithParameters_shouldNotCompile() {
- final String testClass = "org.robolectric.annotation.processing.shadows.ShadowResetterWithParameters";
+ final String testClass =
+ "org.robolectric.annotation.processing.shadows.ShadowResetterWithParameters";
assertAbout(singleClass())
.that(testClass)
.failsToCompile()
@@ -51,6 +55,20 @@ public class ResetterValidatorTest {
}
@Test
+ public void twoValidResetters_shouldNotCompile() {
+ final String testClass = "org.robolectric.annotation.processing.shadows.ShadowWithTwoResetters";
+
+ assertAbout(singleClass())
+ .that(testClass)
+ .failsToCompile()
+ .withErrorContaining(
+ "Duplicate @Resetter methods found on"
+ + " org.robolectric.annotation.processing.shadows.ShadowWithTwoResetters:"
+ + " resetter_method_one() and resetter_method_two().")
+ .onLine(13);
+ }
+
+ @Test
public void goodResetter_shouldCompile() {
final String testClass = "org.robolectric.annotation.processing.shadows.ShadowDummy";
assertAbout(singleClass())
diff --git a/processor/src/test/resources/org/robolectric/annotation/processing/shadows/ShadowWithTwoResetters.java b/processor/src/test/resources/org/robolectric/annotation/processing/shadows/ShadowWithTwoResetters.java
new file mode 100644
index 000000000..8183073b6
--- /dev/null
+++ b/processor/src/test/resources/org/robolectric/annotation/processing/shadows/ShadowWithTwoResetters.java
@@ -0,0 +1,15 @@
+package org.robolectric.annotation.processing.shadows;
+
+import com.example.objects.Dummy;
+import org.robolectric.annotation.Implements;
+import org.robolectric.annotation.Resetter;
+
+@Implements(Dummy.class)
+public class ShadowWithTwoResetters {
+
+ @Resetter
+ public static void resetter_method_one() {}
+
+ @Resetter
+ public static void resetter_method_two() {}
+}