1 /* 2 * Copyright (c) 2017 Mockito contributors 3 * This program is made available under the terms of the MIT License. 4 */ 5 package org.mockito.android.internal.creation; 6 7 import net.bytebuddy.android.AndroidClassLoadingStrategy; 8 import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; 9 import org.mockito.exceptions.base.MockitoException; 10 import org.mockito.internal.creation.bytebuddy.SubclassLoader; 11 12 import java.io.File; 13 14 import static org.mockito.internal.util.StringUtil.join; 15 16 class AndroidLoadingStrategy implements SubclassLoader { 17 18 @Override isDisrespectingOpenness()19 public boolean isDisrespectingOpenness() { 20 return false; 21 } 22 23 @Override resolveStrategy(Class<?> mockedType, ClassLoader classLoader, boolean localMock)24 public ClassLoadingStrategy<ClassLoader> resolveStrategy(Class<?> mockedType, ClassLoader classLoader, boolean localMock) { 25 File target = AndroidTempFileLocator.target; 26 if (target == null) { 27 throw new MockitoException(join( 28 "Could not look up implicit location for storing generated classes", 29 "", 30 "You can configure an explicit location by setting the system property", 31 "'org.mockito.android.target' to a folder for storing generated class files", 32 "This location must be in private scope for most API versions, for example:", 33 "", 34 "MyActivity.this.getDir(\"target\", Context.MODE_PRIVATE)", 35 "or", 36 "getInstrumentation().getTargetContext().getCacheDir().getPath()" 37 )); 38 } 39 return new AndroidClassLoadingStrategy.Injecting(target); 40 } 41 } 42