diff --git a/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java b/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java index 3c1b37124e..a2355fb747 100644 --- a/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java +++ b/src/main/java/org/mockito/internal/configuration/injection/PropertyAndSetterInjection.java @@ -4,7 +4,6 @@ */ package org.mockito.internal.configuration.injection; -import static org.mockito.internal.configuration.injection.filter.TypeBasedCandidateFilter.GENERICS_SUPPORT_DISABLED; import static org.mockito.internal.exceptions.Reporter.cannotInitializeForInjectMocksAnnotation; import static org.mockito.internal.exceptions.Reporter.fieldInitialisationThrewException; import static org.mockito.internal.util.collections.Sets.newMockSafeHashSet; @@ -72,8 +71,6 @@ public boolean processInjection( Field injectMocksField, Object injectMocksFieldOwner, Set mockCandidates) { FieldInitializationReport report = initializeInjectMocksField(injectMocksField, injectMocksFieldOwner); - boolean genericsSupportEnabled = System.getProperty(GENERICS_SUPPORT_DISABLED) == null; - System.out.println("v6 genericsSupportEnabled:" + genericsSupportEnabled); // for each field in the class hierarchy boolean injectionOccurred = false; Class fieldClass = report.fieldClass(); diff --git a/src/main/java/org/mockito/internal/configuration/injection/filter/TypeBasedCandidateFilter.java b/src/main/java/org/mockito/internal/configuration/injection/filter/TypeBasedCandidateFilter.java index d55c131350..bb31dcc54f 100644 --- a/src/main/java/org/mockito/internal/configuration/injection/filter/TypeBasedCandidateFilter.java +++ b/src/main/java/org/mockito/internal/configuration/injection/filter/TypeBasedCandidateFilter.java @@ -24,8 +24,15 @@ public class TypeBasedCandidateFilter implements MockCandidateFilter { - public static final String GENERICS_SUPPORT_DISABLED = + private static final String GENERICS_SUPPORT_DISABLED_KEY = "mockito.typeBasedCandidateFilter.genericsSupport.disabled"; + private static final boolean GENERICS_SUPPORT_ENABLED = + System.getProperty(GENERICS_SUPPORT_DISABLED_KEY) == null; + + static { + System.out.println("v6 GENERICS_SUPPORT_ENABLED:" + GENERICS_SUPPORT_ENABLED); + } + private final MockCandidateFilter next; public TypeBasedCandidateFilter(MockCandidateFilter next) { @@ -232,11 +239,10 @@ public OngoingInjector filterCandidate( final List allRemainingCandidateFields, final Object injectee, final Field injectMocksField) { - boolean genericsSupportEnabled = System.getProperty(GENERICS_SUPPORT_DISABLED) == null; List mockTypeMatches = new ArrayList<>(); for (Object mock : mocks) { if (candidateFieldToBeInjected.getType().isAssignableFrom(mock.getClass())) { - if (genericsSupportEnabled) { + if (GENERICS_SUPPORT_ENABLED) { Type mockType = MockUtil.getMockSettings(mock).getGenericTypeToMock(); Type typeToMock = candidateFieldToBeInjected.getGenericType(); boolean bothHaveTypeInfo = typeToMock != null && mockType != null; @@ -253,6 +259,12 @@ public OngoingInjector filterCandidate( "v6.5 field is assignable from mock class, but no generic type information is available "); mockTypeMatches.add(mock); } + } else if (Object.class.equals(candidateFieldToBeInjected.getType())) { + System.out.println( + "v6.6 Skipping Object typed field during injection analysis because we don't want to have multi matches, field:" + + candidateFieldToBeInjected + + ", mock:" + + mock); } else { mockTypeMatches.add(mock); }