From 0ef7538b151d87875b5c6b9703141257045656f8 Mon Sep 17 00:00:00 2001 From: Arthur Zagretdinov Date: Wed, 24 Oct 2018 20:58:23 +0100 Subject: [PATCH] [ci maven-central-release] PowerMock 2.0 Release without ByteBuddy (#948) Preparing PowerMock 2.0 Release without ByteBuddy * Remove all ByteBuddy Classloader code (#727) * Fix tests * Update Libraries --- build.gradle | 14 +- gradle/wrapper/gradle-wrapper.properties | 4 +- .../InvocationControlAssertionError.java | 21 +- .../powermock/core/ClassReplicaCreator.java | 4 +- .../core/classloader/ByteCodeFramework.java | 14 - .../bytebuddy/ByteBuddyMockClassLoader.java | 142 ---------- .../TestClassTransformerBuilder.java | 11 - .../AbstractByteBuddyMockTransformer.java | 59 ---- .../AbstractMethodMockTransformer.java | 26 -- .../AbstractTestAwareMockTransformer.java | 26 -- .../ByteBuddyMockTransformerChainFactory.java | 68 ----- .../ClassFinalModifierMockTransformer.java | 50 ---- .../ConstructorCallMockTransformer.java | 190 ------------- .../ConstructorModifiersMockTransformer.java | 46 ---- .../bytebuddy/MethodMockTransformer.java | 51 ---- .../NativeMethodMockTransformer.java | 136 --------- .../StaticFinalFieldsMockTransformer.java | 44 --- .../StaticInitializerMockTransformer.java | 85 ------ .../VisitorByteBuddyMockTransformer.java | 37 --- .../bytebuddy/advice/MethodDispatcher.java | 7 - .../advice/MockGatewayMethodDispatcher.java | 27 -- .../bytebuddy/advice/MockMethodAdvice.java | 52 ---- .../advice/MockMethodDispatchers.java | 20 -- .../advice/MockStaticMethodAdvice.java | 46 ---- .../ConstructorCallMethodVisitorWrapper.java | 257 ------------------ .../bytebuddy/support/ByteBuddyClass.java | 54 ---- .../support/ByteBuddyClassWrapperFactory.java | 54 ---- .../ByteBuddyTestClassTransformer.java | 41 --- ...rMethodsByteBuddyTestClassTransformer.java | 39 --- ...dsExceptByteBuddyTestClassTransformer.java | 24 -- .../bytebuddy/testclass/MethodFilter.java | 8 - .../RemoveTestAnnotationFromMethods.java | 82 ------ .../TestClassTransformationBuilder.java | 62 ----- .../TestClassTransformationOperation.java | 7 - .../TestClassTransformationOperations.java | 14 - .../support/ConfigurationFactoryImplTest.java | 6 +- .../MockClassLoaderBuilderTest.java | 22 -- .../MockClassLoaderFactoryTest.java | 47 +--- .../core/classloader/MockClassLoaderTest.java | 33 +-- .../core/test/MockClassLoaderFactory.java | 3 +- ...ClassFinalModifierMockTransformerTest.java | 2 - .../ConstructorCallMockTransformerTest.java | 4 - ...nstructorModifiersMockTransformerTest.java | 2 - .../MethodsMockTransformerTest.java | 10 +- .../MockTransformerTestHelper.java | 5 +- .../NativeMethodsMockTransformerTest.java | 7 - .../StaticFinalFieldsMockTransformerTest.java | 1 - .../StaticMethodsMockTransformerTest.java | 7 - ...sStaticInitializerMockTransformerTest.java | 2 - .../mock/MockGatewaySpyMethodDispatcher.java | 10 - .../extensions/test_configuration.properties | 2 +- .../junit4/bugs/github806/DoThrowTest.java | 5 +- version.properties | 4 +- 53 files changed, 43 insertions(+), 1951 deletions(-) delete mode 100644 powermock-core/src/main/java/org/powermock/core/classloader/bytebuddy/ByteBuddyMockClassLoader.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractByteBuddyMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractMethodMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractTestAwareMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ByteBuddyMockTransformerChainFactory.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ClassFinalModifierMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorCallMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorModifiersMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/MethodMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/NativeMethodMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticFinalFieldsMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticInitializerMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/VisitorByteBuddyMockTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MethodDispatcher.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockGatewayMethodDispatcher.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodAdvice.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodDispatchers.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockStaticMethodAdvice.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/constructor/ConstructorCallMethodVisitorWrapper.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClass.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClassWrapperFactory.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ByteBuddyTestClassTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ForMethodsByteBuddyTestClassTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/FromAllMethodsExceptByteBuddyTestClassTransformer.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/MethodFilter.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/RemoveTestAnnotationFromMethods.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationBuilder.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperation.java delete mode 100644 powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperations.java delete mode 100644 powermock-core/src/test/java/org/powermock/core/transformers/mock/MockGatewaySpyMethodDispatcher.java diff --git a/build.gradle b/build.gradle index 130c4a08c..b84dc9876 100644 --- a/build.gradle +++ b/build.gradle @@ -11,10 +11,10 @@ buildscript { } dependencies { classpath 'org.springframework.build.gradle:propdeps-plugin:0.0.7' - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3' + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' classpath 'net.researchgate:gradle-release:2.4.0' classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.4' - classpath 'org.shipkit:shipkit:0.9.45' + classpath 'org.shipkit:shipkit:2.0.31' classpath 'ru.vyarus:gradle-animalsniffer-plugin:1.4.1' } } @@ -22,20 +22,20 @@ buildscript { ext{ gradleScriptDir = "${rootProject.projectDir}/gradle" - byteBuddy = "1.8.3" + byteBuddy = "1.9.2" easymockVersion = "3.5.1" hamcrestVersion = "1.3" assertjVersion = "2.6.0" cglibVersion = "3.2.5" - objenesisVersion = "2.6" + objenesisVersion = "3.0" + //javassistVersion = "3.23.0-GA" need java-9 javassistVersion = "3.22.0-GA" junitVersion = "4.12" junitRulesVersion = "4.8.2" testngVersion = "6.9.10" xstreamVersion = "1.4.10" - mockitoVersion = "2.10.0" + mockitoVersion = "2.23.0" servletVersion = "2.5" - systemRulesVersion = "1.16.0" jacocoVersion = "0.7.7.201606060606" eclipseJdt = "3.3.0-v_771" checkstyleVersion= "7.6.1" @@ -65,5 +65,5 @@ jar{ } task wrapper(type: Wrapper) { - gradleVersion = '4.7' + gradleVersion = '4.10.2' } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 5a17e7455..fb7ef980f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ -distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip diff --git a/powermock-api/powermock-api-mockito2/src/main/java/org/powermock/api/mockito/internal/invocation/InvocationControlAssertionError.java b/powermock-api/powermock-api-mockito2/src/main/java/org/powermock/api/mockito/internal/invocation/InvocationControlAssertionError.java index d2416320b..cc87e95dc 100644 --- a/powermock-api/powermock-api-mockito2/src/main/java/org/powermock/api/mockito/internal/invocation/InvocationControlAssertionError.java +++ b/powermock-api/powermock-api-mockito2/src/main/java/org/powermock/api/mockito/internal/invocation/InvocationControlAssertionError.java @@ -24,6 +24,7 @@ public class InvocationControlAssertionError { private static final String AT = "at"; private static final String ERROR_LOCATION_MARKER = "->"; private static final String COLON_NEWLINE = ":\n"; + private static final String NEWLINE_POINT = "\n."; private static final String HERE_TEXT = "here:\n"; private static final String UNDESIRED_INVOCATION_TEXT = " Undesired invocation:"; private static final String POWER_MOCKITO_CLASS_NAME = "org.powermock.api.mockito.PowerMockito"; @@ -106,8 +107,8 @@ private static String changeMessageContent(String message) { removeAndReplaceText(builder, HERE_TEXT, ' '); removeAndReplaceText(builder, COLON_NEWLINE, ' '); - final String finalMessage = builder.toString().trim(); - return finalMessage; + + return builder.toString().trim(); } private static StringBuilder removeFailureLocations(String message) { @@ -124,17 +125,25 @@ private static StringBuilder removeFailureLocations(String message) { private static void removeAndReplaceText(StringBuilder builder, String text, char appender) { int currentTextIndex = builder.indexOf(text); - int previousTextIndex = 0; + int previousTextIndex; boolean isSingleConcat = true; + while (currentTextIndex > 0) { previousTextIndex = currentTextIndex; builder.delete(currentTextIndex, currentTextIndex + text.length()); currentTextIndex = builder.indexOf(text); + + final int length = builder.length(); + if (isLastFinding(currentTextIndex) && !isSingleConcat) { - builder.replace(builder.length(), builder.length(), "."); + final int start = builder.charAt(length - 1) == '\n' ? length - 1 : length; + builder.replace(start, length, "."); } else { - builder.replace(previousTextIndex, previousTextIndex + 1, String.valueOf( - builder.charAt(previousTextIndex)).toLowerCase()); + final int end = previousTextIndex < length ? previousTextIndex + 1 : length; + builder.replace( + previousTextIndex, end, + String.valueOf(builder.charAt(previousTextIndex)).toLowerCase() + ); builder.insert(previousTextIndex, String.valueOf(appender)); currentTextIndex++; isSingleConcat = false; diff --git a/powermock-core/src/main/java/org/powermock/core/ClassReplicaCreator.java b/powermock-core/src/main/java/org/powermock/core/ClassReplicaCreator.java index d10c62fda..525872155 100644 --- a/powermock-core/src/main/java/org/powermock/core/ClassReplicaCreator.java +++ b/powermock-core/src/main/java/org/powermock/core/ClassReplicaCreator.java @@ -60,7 +60,7 @@ public Class createClassReplica(Class clazz) { code, newClass); } - return newClass.toClass(this.getClass().getClassLoader(), this.getClass().getProtectionDomain()); + return (Class) newClass.toClass(this.getClass().getClassLoader(), this.getClass().getProtectionDomain()); } catch (Exception e) { throw new RuntimeException(e); } @@ -105,7 +105,7 @@ public Class createInstanceReplica(T delegator) { CtConstructor copy = CtNewConstructor.copy(ctConstructor, newClass, null); newClass.addConstructor(copy); } - return newClass.toClass(this.getClass().getClassLoader(), this.getClass().getProtectionDomain()); + return (Class) newClass.toClass(this.getClass().getClassLoader(), this.getClass().getProtectionDomain()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/powermock-core/src/main/java/org/powermock/core/classloader/ByteCodeFramework.java b/powermock-core/src/main/java/org/powermock/core/classloader/ByteCodeFramework.java index dbfdbf69b..862b7f88c 100644 --- a/powermock-core/src/main/java/org/powermock/core/classloader/ByteCodeFramework.java +++ b/powermock-core/src/main/java/org/powermock/core/classloader/ByteCodeFramework.java @@ -6,10 +6,8 @@ import org.powermock.core.classloader.annotations.PrepareOnlyThisForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; import org.powermock.core.classloader.annotations.UseClassPathAdjuster; -import org.powermock.core.classloader.bytebuddy.ByteBuddyMockClassLoader; import org.powermock.core.classloader.javassist.JavassistMockClassLoader; import org.powermock.core.transformers.MockTransformerChainFactory; -import org.powermock.core.transformers.bytebuddy.ByteBuddyMockTransformerChainFactory; import org.powermock.core.transformers.javassist.JavassistMockTransformerChainFactory; import java.lang.reflect.AnnotatedElement; @@ -27,18 +25,6 @@ MockClassLoader createClassloader(final MockClassLoaderConfiguration configurati MockTransformerChainFactory createTransformerChainFactory() { return new JavassistMockTransformerChainFactory(); } - }, - ByteBuddy { - @Override - MockClassLoader createClassloader(final MockClassLoaderConfiguration configuration, - final UseClassPathAdjuster useClassPathAdjuster) { - return new ByteBuddyMockClassLoader(configuration); - } - - @Override - MockTransformerChainFactory createTransformerChainFactory() { - return new ByteBuddyMockTransformerChainFactory(); - } }; public static ByteCodeFramework getByteCodeFrameworkForMethod(final Class testClass, final Method method) { diff --git a/powermock-core/src/main/java/org/powermock/core/classloader/bytebuddy/ByteBuddyMockClassLoader.java b/powermock-core/src/main/java/org/powermock/core/classloader/bytebuddy/ByteBuddyMockClassLoader.java deleted file mode 100644 index 2b8eb749a..000000000 --- a/powermock-core/src/main/java/org/powermock/core/classloader/bytebuddy/ByteBuddyMockClassLoader.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.classloader.bytebuddy; - - -import net.bytebuddy.ByteBuddy; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.description.type.TypeDescription.Generic; -import net.bytebuddy.dynamic.ClassFileLocator.ForClassLoader; -import net.bytebuddy.dynamic.DynamicType.Builder; -import net.bytebuddy.dynamic.loading.ClassLoadingStrategy; -import net.bytebuddy.matcher.ElementMatchers; -import net.bytebuddy.pool.TypePool; -import org.powermock.core.classloader.MockClassLoader; -import org.powermock.core.classloader.MockClassLoaderConfiguration; -import org.powermock.core.transformers.ClassWrapper; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClassWrapperFactory; - -import java.security.ProtectionDomain; -import java.util.HashMap; -import java.util.Map; -import java.util.Map.Entry; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -import static net.bytebuddy.matcher.ElementMatchers.hasMethodName; - -public class ByteBuddyMockClassLoader extends MockClassLoader { - - private final TypePool typePool; - private final ConcurrentMap> definedClasses; - - public ByteBuddyMockClassLoader(final String[] classesToMock, final String[] packagesToDefer) { - this(new MockClassLoaderConfiguration(classesToMock, packagesToDefer)); - } - - public ByteBuddyMockClassLoader(final MockClassLoaderConfiguration configuration) { - super(configuration, new ByteBuddyClassWrapperFactory()); - typePool = TypePool.Default.ofClassPath(); - definedClasses = new ConcurrentHashMap>(); - } - - @Override - public Class defineClass(final String className, final ProtectionDomain protectionDomain, final byte[] clazz) { - Class defined = definedClasses.get(className); - if (defined == null){ - defined = super.defineClass(className, protectionDomain, clazz); - definedClasses.put(className, defined); - } - return defined; - } - - protected byte[] defineAndTransformClass(final String name, ProtectionDomain protectionDomain) throws ClassNotFoundException { - TypeDescription typeDefinitions = getTypeDefinitions(name); - - loadParentFirst(typeDefinitions); - - Builder builder = createByteBuddyBuilder(typeDefinitions); - - ClassWrapper wrap = classWrapperFactory.wrap(ByteBuddyClass.from(typeDefinitions, builder)); - - try { - wrap = transformClass(wrap); - } catch (Exception e) { - throw new IllegalStateException("Failed to transform class with name " + name + ". Reason: " + e.getMessage(), e); - } - - return wrap.unwrap().getBuilder() - .make() - .load(this, new MockClassLoadingStrategy(protectionDomain)) - .getBytes(); - } - - private void loadParentFirst(final TypeDescription typeDefinitions) throws ClassNotFoundException { - Generic superClass = typeDefinitions.getSuperClass(); - - if (parentShouldBeLoaded(typeDefinitions, superClass)) { - loadClass(superClass.getTypeName()); - } - } - - private boolean parentShouldBeLoaded(final TypeDescription typeDefinitions, final Generic superClass) { - return !typeDefinitions.isInterface() && !typeDefinitions.isEnum() && !"java.lang.Object".equals(superClass.getTypeName()); - } - - private Builder createByteBuddyBuilder(final TypeDescription typeDefinitions) { - return new ByteBuddy() - .rebase( - typeDefinitions, - ForClassLoader.ofClassPath() - ); - } - - private TypeDescription getTypeDefinitions(final String name) throws ClassNotFoundException { - final TypeDescription typeDefinitions; - try { - typeDefinitions = typePool.describe(name).resolve(); - } catch (IllegalStateException e) { - throw new ClassNotFoundException(e.getMessage(), e); - } - return typeDefinitions; - } - - private class MockClassLoadingStrategy implements ClassLoadingStrategy { - private final ProtectionDomain protectionDomain; - - private MockClassLoadingStrategy(final ProtectionDomain protectionDomain) { - this.protectionDomain = protectionDomain; - } - - @Override - public Map> load(final ByteBuddyMockClassLoader classLoader, - final Map types) { - final Map> result = new HashMap>(); - - for (Entry entry : types.entrySet()) { - final TypeDescription typeDescription = entry.getKey(); - final Class loaded = defineClass(typeDescription.getName(), protectionDomain, entry.getValue()); - result.put(typeDescription, loaded); - } - - return result; - } - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/TestClassTransformerBuilder.java b/powermock-core/src/main/java/org/powermock/core/transformers/TestClassTransformerBuilder.java index b59fe1ec5..49ba22c8f 100644 --- a/powermock-core/src/main/java/org/powermock/core/transformers/TestClassTransformerBuilder.java +++ b/powermock-core/src/main/java/org/powermock/core/transformers/TestClassTransformerBuilder.java @@ -1,10 +1,7 @@ package org.powermock.core.transformers; import javassist.CtMethod; -import net.bytebuddy.description.method.MethodDescription; import org.powermock.core.classloader.ByteCodeFramework; -import org.powermock.core.transformers.bytebuddy.testclass.ForMethodsByteBuddyTestClassTransformer; -import org.powermock.core.transformers.bytebuddy.testclass.FromAllMethodsExceptByteBuddyTestClassTransformer; import org.powermock.core.transformers.javassist.testclass.ForMethodsJavaAssistTestClassTransformer; import org.powermock.core.transformers.javassist.testclass.FromAllMethodsExceptJavaAssistTestClassTransformer; @@ -65,10 +62,6 @@ public TestClassTransformer fromMethods(final Collection testMethodsThat return new ForMethodsJavaAssistTestClassTransformer( testClass, testMethodAnnotation, MethodSignatures.Javassist.methodSignatureWriter(), testMethodsThatRunOnOtherClassLoaders ); - case ByteBuddy: - return new ForMethodsByteBuddyTestClassTransformer( - testClass, testMethodAnnotation, MethodSignatures.ByteBuddy.methodSignatureWriter(), testMethodsThatRunOnOtherClassLoaders - ); default: throw new IllegalArgumentException(String.format("Unknown bytecode framework `%s`", byteCodeFramework)); } @@ -80,10 +73,6 @@ public TestClassTransformer fromAllMethodsExcept(Method singleMethodToRunOnTarge return new FromAllMethodsExceptJavaAssistTestClassTransformer( testClass, testMethodAnnotation, MethodSignatures.Javassist.methodSignatureWriter(), singleMethodToRunOnTargetClassLoader ); - case ByteBuddy: - return new FromAllMethodsExceptByteBuddyTestClassTransformer( - testClass, testMethodAnnotation, MethodSignatures.ByteBuddy.methodSignatureWriter(), singleMethodToRunOnTargetClassLoader - ); default: throw new IllegalArgumentException(String.format("Unknown bytecode framework `%s`", byteCodeFramework)); } diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractByteBuddyMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractByteBuddyMockTransformer.java deleted file mode 100644 index b91602f3b..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractByteBuddyMockTransformer.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.description.type.TypeDescription; -import org.powermock.core.transformers.ClassWrapper; -import org.powermock.core.transformers.MockTransformer; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -public abstract class AbstractByteBuddyMockTransformer implements MockTransformer { - - private final TransformStrategy strategy; - - public AbstractByteBuddyMockTransformer(TransformStrategy strategy) { - this.strategy = strategy; - } - - @Override - public ClassWrapper transform(final ClassWrapper clazz) throws Exception { - ByteBuddyClass byteBuddyClass = clazz.unwrap(); - - if (byteBuddyClass != null) { - TypeDescription typeDefinitions = byteBuddyClass.getTypeDescription(); - - if (!classShouldTransformed(typeDefinitions)) { - return clazz; - } - - byteBuddyClass = transform(byteBuddyClass); - } - - return clazz.wrap(byteBuddyClass); - } - - protected abstract boolean classShouldTransformed(final TypeDescription typeDefinitions); - - public abstract ByteBuddyClass transform(ByteBuddyClass clazz) throws Exception; - - protected TransformStrategy getStrategy() { - return strategy; - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractMethodMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractMethodMockTransformer.java deleted file mode 100644 index 84414c3f1..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractMethodMockTransformer.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.utility.RandomString; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.advice.MockGatewayMethodDispatcher; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodDispatchers; - -abstract class AbstractMethodMockTransformer extends AbstractByteBuddyMockTransformer { - protected final String identifier; - - AbstractMethodMockTransformer(final TransformStrategy strategy) { - super(strategy); - identifier = RandomString.make(); - MockMethodDispatchers.set(identifier, new MockGatewayMethodDispatcher()); - } - - public String getIdentifier() { - return identifier; - } - - @Override - protected boolean classShouldTransformed(final TypeDescription typeDefinitions) { - return true; - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractTestAwareMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractTestAwareMockTransformer.java deleted file mode 100644 index 049188a6d..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/AbstractTestAwareMockTransformer.java +++ /dev/null @@ -1,26 +0,0 @@ -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.description.type.TypeDescription; -import org.powermock.core.transformers.TransformStrategy; - -public abstract class AbstractTestAwareMockTransformer extends AbstractByteBuddyMockTransformer { - private TypeDescription testClass; - - AbstractTestAwareMockTransformer(final TransformStrategy strategy) {super(strategy);} - - boolean isNestedTestClass(final TypeDescription td) { - final TypeDescription enclosingType = td.getEnclosingType(); - if(enclosingType == null){ - return false; - } - return enclosingType.equals(testClass); - } - - boolean isTestClass(final TypeDescription td) { - return td.equals(testClass); - } - - public void setTestClass(final Class testClass) { - this.testClass = TypeDescription.Sort.describe(testClass).asErasure(); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ByteBuddyMockTransformerChainFactory.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ByteBuddyMockTransformerChainFactory.java deleted file mode 100644 index 56c13f1e3..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ByteBuddyMockTransformerChainFactory.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import org.powermock.core.transformers.MockTransformer; -import org.powermock.core.transformers.MockTransformerChain; -import org.powermock.core.transformers.MockTransformerChainFactory; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.support.DefaultMockTransformerChain; -import org.powermock.core.transformers.support.DefaultMockTransformerChain.MockTransformerChainBuilder; - -import java.util.List; - -public class ByteBuddyMockTransformerChainFactory implements MockTransformerChainFactory { - - private static final TransformStrategy DEFAULT = TransformStrategy.CLASSLOADER; - - @Override - public MockTransformerChain createDefaultChain() { - return createDefaultChain(DEFAULT); - } - - @Override - public MockTransformerChain createDefaultChain(final TransformStrategy transformStrategy) { - return createDefaultChainBuilder(transformStrategy).build(); - } - - @Override - public MockTransformerChain createDefaultChain(final List extraMockTransformers) { - return createDefaultChainBuilder(DEFAULT) - .append(extraMockTransformers) - .build(); - } - - @Override - public MockTransformerChain createTestClassChain(final MockTransformer testClassTransformer) { - return createDefaultChainBuilder(DEFAULT) - .append(testClassTransformer) - .build(); - } - - private MockTransformerChainBuilder createDefaultChainBuilder(final TransformStrategy transformStrategy) { - return DefaultMockTransformerChain.newBuilder() - .append(new ClassFinalModifierMockTransformer(transformStrategy)) - .append(new ConstructorCallMockTransformer(transformStrategy)) - .append(new ConstructorModifiersMockTransformer(transformStrategy)) - .append(new MethodMockTransformer(transformStrategy)) - .append(new NativeMethodMockTransformer(transformStrategy)) - .append(new StaticFinalFieldsMockTransformer(transformStrategy)) - .append(new StaticInitializerMockTransformer(transformStrategy)); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ClassFinalModifierMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ClassFinalModifierMockTransformer.java deleted file mode 100644 index 3e7752d9e..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ClassFinalModifierMockTransformer.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.ModifierAdjustment; -import net.bytebuddy.description.modifier.TypeManifestation; -import net.bytebuddy.description.type.TypeDescription; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import static net.bytebuddy.matcher.ElementMatchers.isFinal; -import static net.bytebuddy.matcher.ElementMatchers.isInterface; -import static net.bytebuddy.matcher.ElementMatchers.not; -import static org.powermock.core.transformers.TransformStrategy.INST_REDEFINE; - -public class ClassFinalModifierMockTransformer extends VisitorByteBuddyMockTransformer { - - public ClassFinalModifierMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - return visit(clazz, new ModifierAdjustment().withTypeModifiers( - isFinal(), - TypeManifestation.PLAIN - )); - } - - protected boolean classShouldTransformed(final TypeDescription typeDefinitions) { - return getStrategy() != INST_REDEFINE && !typeDefinitions.isInterface(); - } - -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorCallMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorCallMockTransformer.java deleted file mode 100644 index e838258de..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorCallMockTransformer.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.AsmVisitorWrapper; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.description.method.MethodDescription.Latent; -import net.bytebuddy.description.method.MethodDescription.Token; -import net.bytebuddy.description.modifier.Visibility; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.description.type.TypeDescription.Generic; -import net.bytebuddy.dynamic.ClassFileLocator; -import net.bytebuddy.dynamic.DynamicType.Builder; -import net.bytebuddy.implementation.MethodCall; -import net.bytebuddy.jar.asm.ClassReader; -import net.bytebuddy.pool.TypePool; -import org.powermock.core.IndicateReloadClass; -import org.powermock.core.MockGateway; -import org.powermock.core.bytebuddy.MaxLocalsExtractor; -import org.powermock.core.bytebuddy.MethodMaxLocals; -import org.powermock.core.transformers.ClassWrapper; -import org.powermock.core.transformers.TestClassAwareTransformer; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.constructor.ConstructorCallMethodVisitorWrapper; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import java.io.IOException; -import java.util.Collections; - -import static net.bytebuddy.jar.asm.ClassReader.SKIP_DEBUG; -import static net.bytebuddy.matcher.ElementMatchers.isConstructor; -import static net.bytebuddy.matcher.ElementMatchers.isDeclaredBy; - -public class ConstructorCallMockTransformer extends AbstractTestAwareMockTransformer implements TestClassAwareTransformer { - - private final TypePool typePool; - private Class mockGetawayClass; - - public ConstructorCallMockTransformer(final TransformStrategy strategy) { - super(strategy); - this.typePool = TypePool.Default.ofClassPath(); - this.mockGetawayClass = MockGateway.class; - } - - @Override - protected boolean classShouldTransformed(final TypeDescription td) { - return getStrategy().isClassloaderMode() && !td.isInterface() && !td.isEnum() && !isTestClass(td) && !isNestedTestClass(td); - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - final TypeDescription td = clazz.getTypeDescription(); - - final MethodMaxLocals methods = extractConstructorMaxLocals(td); - - final Generic superClass = td.getSuperClass(); - - final DeferConstructor deferConstructor = new DeferConstructor(clazz, superClass).create(); - - return ByteBuddyClass.from(clazz.getTypeDescription(), - deferConstructor.getBuilder().visit( - new AsmVisitorWrapper.ForDeclaredMethods().method( - isConstructor(), - new ConstructorCallMethodVisitorWrapper( - deferConstructor.getSupperClassDefferConstructor(), - mockGetawayClass, - methods - ) - ) - )); - - - } - - private MethodMaxLocals extractConstructorMaxLocals(final TypeDescription td) throws IOException { - final ClassFileLocator classFileLocator = ClassFileLocator.ForClassLoader.of(this.getClass().getClassLoader()); - final ClassReader classReader = new ClassReader(classFileLocator.locate(td.getName()).resolve()); - - final MaxLocalsExtractor maxLocalsExtractor = new MaxLocalsExtractor(); - classReader.accept(maxLocalsExtractor, SKIP_DEBUG); - return maxLocalsExtractor.getMethods(); - } - - private Token deferConstructorToken() { - Generic parameter = typePool.describe(IndicateReloadClass.class.getName()) - .resolve() - .asGenericType(); - - return new Token( - MethodDescription.CONSTRUCTOR_INTERNAL_NAME, - Visibility.PUBLIC.getMask(), - Generic.VOID, - Collections.singletonList(parameter) - ); - } - - private static class NewConstructorWithSuperDeferConstructorCall { - - private final Builder builder; - private final MethodDescription deferConstructor; - - private NewConstructorWithSuperDeferConstructorCall(final ByteBuddyClass clazz, - final MethodDescription deferConstructor) { - this.builder = clazz.getBuilder(); - this.deferConstructor = deferConstructor; - } - - public Builder apply() { - return builder - .defineConstructor(Visibility.PUBLIC) - .withParameters(IndicateReloadClass.class) - .intercept( - MethodCall.invoke(deferConstructor) - .withAllArguments() - ); - } - - } - - private static class NewConstructorWithDefaultConstructorCall { - private final Builder builder; - private final MethodDescription deferConstructor; - - private NewConstructorWithDefaultConstructorCall(final ByteBuddyClass clazz, - final MethodDescription deferConstructor) { - this.builder = clazz.getBuilder(); - this.deferConstructor = deferConstructor; - } - - public Builder apply() { - return builder - .defineConstructor(Visibility.PUBLIC) - .withParameters(IndicateReloadClass.class) - .intercept(MethodCall.invoke(deferConstructor)); - } - } - - - private class DeferConstructor { - private final ByteBuddyClass clazz; - private final Generic superClass; - private MethodDescription supperClassDefferConstructor; - private Builder builder; - - private DeferConstructor(final ByteBuddyClass clazz, final Generic superClass) { - this.clazz = clazz; - this.superClass = superClass; - } - - private MethodDescription getSupperClassDefferConstructor() { - return supperClassDefferConstructor; - } - - public Builder getBuilder() { - return builder; - } - - public DeferConstructor create() { - - if ("java.lang.Object".equals(superClass.getTypeName())) { - supperClassDefferConstructor = new MethodDescription.ForLoadedConstructor(Object.class.getDeclaredConstructors()[0]); - builder = new NewConstructorWithDefaultConstructorCall(clazz, supperClassDefferConstructor).apply(); - } else { - supperClassDefferConstructor = deferConstructor(superClass); - builder = new NewConstructorWithSuperDeferConstructorCall(clazz, supperClassDefferConstructor).apply(); - } - return this; - } - - private MethodDescription deferConstructor(final Generic superClass) { - return new Latent(superClass.asErasure(), deferConstructorToken()); - } - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorModifiersMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorModifiersMockTransformer.java deleted file mode 100644 index ec49dacd3..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/ConstructorModifiersMockTransformer.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.ModifierAdjustment; -import net.bytebuddy.description.modifier.Visibility; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.pool.TypePool; -import org.powermock.core.transformers.TestClassAwareTransformer; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import static net.bytebuddy.matcher.ElementMatchers.isConstructor; - -public class ConstructorModifiersMockTransformer extends VisitorByteBuddyMockTransformer implements TestClassAwareTransformer { - - public ConstructorModifiersMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - @Override - protected boolean classShouldTransformed(final TypeDescription typeDefinitions) { - return getStrategy() == TransformStrategy.CLASSLOADER && !isTestClass(typeDefinitions) && !isNestedTestClass(typeDefinitions); - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - return visit(clazz, new ModifierAdjustment().withConstructorModifiers(Visibility.PUBLIC)); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/MethodMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/MethodMockTransformer.java deleted file mode 100644 index 2714ba48d..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/MethodMockTransformer.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.Advice; -import net.bytebuddy.asm.AsmVisitorWrapper.ForDeclaredMethods; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.dynamic.DynamicType.Builder; -import net.bytebuddy.matcher.ElementMatchers; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodAdvice; -import org.powermock.core.transformers.bytebuddy.advice.MockStaticMethodAdvice; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import static net.bytebuddy.matcher.ElementMatchers.isMethod; -import static net.bytebuddy.matcher.ElementMatchers.not; - -public class MethodMockTransformer extends AbstractMethodMockTransformer { - - public MethodMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - final Builder builder = clazz.getBuilder() - .visit(instanceMethods()) - .visit(staticMethods()); - return ByteBuddyClass.from(clazz.getTypeDescription(), builder); - } - - private ForDeclaredMethods staticMethods() { - return Advice.withCustomMapping() - .bind(MockMethodAdvice.Identifier.class, identifier) - .to(MockStaticMethodAdvice.class) - .on( - isMethod().and(ElementMatchers.isStatic()).and(not(ElementMatchers.isNative())) - ); - } - - private ForDeclaredMethods instanceMethods() { - return Advice.withCustomMapping() - .bind(MockMethodAdvice.Identifier.class, identifier) - .to(MockMethodAdvice.class) - .on( - isMethod().and( - not( - ElementMatchers.isStatic().or(ElementMatchers.isSynthetic()).or(ElementMatchers.isNative()) - ) - ) - ); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/NativeMethodMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/NativeMethodMockTransformer.java deleted file mode 100644 index 88a831d90..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/NativeMethodMockTransformer.java +++ /dev/null @@ -1,136 +0,0 @@ -package org.powermock.core.transformers.bytebuddy; - - -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.dynamic.DynamicType.Builder; -import net.bytebuddy.implementation.MethodDelegation; -import net.bytebuddy.implementation.bind.annotation.AllArguments; -import net.bytebuddy.implementation.bind.annotation.Origin; -import net.bytebuddy.implementation.bind.annotation.RuntimeType; -import net.bytebuddy.implementation.bind.annotation.This; -import net.bytebuddy.matcher.ElementMatchers; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.advice.MethodDispatcher; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodDispatchers; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import java.lang.annotation.Annotation; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.reflect.Method; -import java.util.concurrent.Callable; - -import static net.bytebuddy.matcher.ElementMatchers.isNative; -import static net.bytebuddy.matcher.ElementMatchers.not; -import static org.powermock.core.transformers.bytebuddy.advice.MockMethodAdvice.VOID; - -public class NativeMethodMockTransformer extends AbstractMethodMockTransformer { - - public NativeMethodMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - @Override - protected boolean classShouldTransformed(final TypeDescription typeDefinitions) { - return getStrategy() == TransformStrategy.CLASSLOADER; - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - final Identifier identifier = new DefaultIdentifier(getIdentifier()); - final Builder builder = clazz.getBuilder() - .method( - isNative() - .and(not(ElementMatchers.isStatic())) - .and(ElementMatchers.isDeclaredBy(clazz.getTypeDescription())) - ) - .intercept(MethodDelegation.to(InstanceInception.class)) - .annotateMethod(identifier) - .method(isNative().and(ElementMatchers.isStatic())) - .intercept(MethodDelegation.to(StaticInception.class)) - .annotateMethod(identifier); - return ByteBuddyClass.from(clazz.getTypeDescription(), builder); - } - - public static class InstanceInception { - @RuntimeType - public static Object intercept( - @This Object instance, - @Origin Method origin, - @AllArguments Object[] arguments - ) throws Throwable { - final String returnTypeAsString = getReturnTypeAsString(origin); - - final Identifier identifier = origin.getAnnotation(Identifier.class); - final MethodDispatcher methodDispatcher = MockMethodDispatchers.get(identifier.value(), instance); - - return handleCall(origin, arguments, returnTypeAsString, instance, methodDispatcher); - } - } - - public static class StaticInception { - - @RuntimeType - public static Object intercept( - @Origin Method origin, - @AllArguments Object[] arguments - ) throws Throwable { - final String returnTypeAsString = getReturnTypeAsString(origin); - - final Class mock = origin.getDeclaringClass(); - final Identifier identifier = origin.getAnnotation(Identifier.class); - final MethodDispatcher methodDispatcher = MockMethodDispatchers.get(identifier.value(), mock); - - return handleCall(origin, arguments, returnTypeAsString, mock, methodDispatcher); - } - - } - - @Retention(RetentionPolicy.RUNTIME) - public @interface Identifier { - String value(); - } - - private static class DefaultIdentifier implements Identifier { - private String identifier; - - private DefaultIdentifier(final String identifier) {this.identifier = identifier;} - - @Override - public Class annotationType() { - return Identifier.class; - } - - @Override - public String value() { - return identifier; - } - } - - private static String getReturnTypeAsString(final @Origin Method origin) { - final Class returnType = origin.getReturnType(); - final String returnTypeAsString; - if (!returnType.equals(Void.class)) { - returnTypeAsString = returnType.getName(); - } else { - returnTypeAsString = VOID; - } - return returnTypeAsString; - } - - private static Object handleCall(final @Origin Method origin, final @AllArguments Object[] arguments, - final String returnTypeAsString, - final Object mock, final MethodDispatcher methodDispatcher) throws Throwable { - if (methodDispatcher == null) { - throw new UnsupportedOperationException(origin + " is native"); - } else { - final Callable callable = methodDispatcher.methodCall(mock, origin.getName(), arguments, origin.getParameterTypes(), returnTypeAsString); - if (callable == null) { - throw new UnsupportedOperationException(origin + " is native"); - }else { - return callable.call(); - } - } - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticFinalFieldsMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticFinalFieldsMockTransformer.java deleted file mode 100644 index e76601d3d..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticFinalFieldsMockTransformer.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.ModifierAdjustment; -import net.bytebuddy.description.modifier.FieldManifestation; -import net.bytebuddy.description.type.TypeDescription; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import static net.bytebuddy.matcher.ElementMatchers.isFinal; -import static net.bytebuddy.matcher.ElementMatchers.isStatic; - -public class StaticFinalFieldsMockTransformer extends VisitorByteBuddyMockTransformer { - public StaticFinalFieldsMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - @Override - protected boolean classShouldTransformed(final TypeDescription typeDefinitions) { - return getStrategy() != TransformStrategy.INST_REDEFINE; - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - return visit(clazz, new ModifierAdjustment().withFieldModifiers(isFinal().and(isStatic()), FieldManifestation.PLAIN)); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticInitializerMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticInitializerMockTransformer.java deleted file mode 100644 index 524bb1bd7..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/StaticInitializerMockTransformer.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.AsmVisitorWrapper.AbstractBase; -import net.bytebuddy.description.field.FieldDescription.InDefinedShape; -import net.bytebuddy.description.field.FieldList; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.description.method.MethodList; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.implementation.Implementation; -import net.bytebuddy.jar.asm.ClassVisitor; -import net.bytebuddy.jar.asm.MethodVisitor; -import net.bytebuddy.jar.asm.Opcodes; -import net.bytebuddy.pool.TypePool; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import static org.powermock.core.MockRepository.shouldSuppressStaticInitializerFor; - -public class StaticInitializerMockTransformer extends VisitorByteBuddyMockTransformer { - - public StaticInitializerMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - @Override - protected boolean classShouldTransformed(final TypeDescription typeDefinitions) { - return shouldSuppressStaticInitializerFor(typeDefinitions.getName()) && getStrategy() == TransformStrategy.CLASSLOADER; - } - - @Override - public ByteBuddyClass transform(final ByteBuddyClass clazz) throws Exception { - return visit(clazz, new StaticInitializer()); - } - - private static class StaticInitializer extends AbstractBase { - @Override - public ClassVisitor wrap(TypeDescription instrumentedType, - ClassVisitor classVisitor, - Implementation.Context implementationContext, - TypePool typePool, - FieldList fields, - MethodList methods, - int writerFlags, - int readerFlags - ) { - return new StaticInitializerClassVisitor(classVisitor); - } - - } - - private static class StaticInitializerClassVisitor extends ClassVisitor { - - private StaticInitializerClassVisitor(final ClassVisitor classVisitor) { - super(Opcodes.ASM5, classVisitor); - } - - @Override - public MethodVisitor visitMethod(int modifiers, String internalName, String descriptor, String signature, String[] exception) { - if (MethodDescription.TYPE_INITIALIZER_INTERNAL_NAME.equals(internalName)) { - return new MethodVisitor(Opcodes.ASM5) { - }; - } - return super.visitMethod(modifiers, internalName, descriptor, signature, exception); - } - - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/VisitorByteBuddyMockTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/VisitorByteBuddyMockTransformer.java deleted file mode 100644 index 71fccb258..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/VisitorByteBuddyMockTransformer.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy; - -import net.bytebuddy.asm.AsmVisitorWrapper; -import org.powermock.core.transformers.TransformStrategy; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -public abstract class VisitorByteBuddyMockTransformer extends AbstractTestAwareMockTransformer { - - VisitorByteBuddyMockTransformer(final TransformStrategy strategy) { - super(strategy); - } - - protected ByteBuddyClass visit(final ByteBuddyClass clazz, final AsmVisitorWrapper asmVisitorWrapper) { - return ByteBuddyClass.from( - clazz.getTypeDescription(), - clazz.getBuilder().visit(asmVisitorWrapper) - ); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MethodDispatcher.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MethodDispatcher.java deleted file mode 100644 index 5c63fdd40..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MethodDispatcher.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.advice; - -import java.util.concurrent.Callable; - -public interface MethodDispatcher { - Callable methodCall(Object instance, String methodName, Object[] args, Class[] sig, String returnTypeAsString) throws Throwable; -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockGatewayMethodDispatcher.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockGatewayMethodDispatcher.java deleted file mode 100644 index 21835479f..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockGatewayMethodDispatcher.java +++ /dev/null @@ -1,27 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.advice; - -import org.powermock.core.MockGateway; - -import java.util.concurrent.Callable; - -public class MockGatewayMethodDispatcher implements MethodDispatcher { - public Callable methodCall(Object instance, String methodName, Object[] args, Class[] sig, - String returnTypeAsString) throws Throwable { - final Object result = handleMethodCall(instance, methodName, args, sig, returnTypeAsString); - if (result == MockGateway.PROCEED) { - return null; - } else { - return new Callable() { - @Override - public Object call() throws Exception { - return result; - } - }; - } - } - - protected Object handleMethodCall(final Object instance, final String methodName, final Object[] args, - final Class[] sig, final String returnTypeAsString) throws Throwable { - return MockGateway.methodCall(instance, methodName, args, sig, returnTypeAsString); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodAdvice.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodAdvice.java deleted file mode 100644 index e80b87273..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodAdvice.java +++ /dev/null @@ -1,52 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.advice; - -import net.bytebuddy.asm.Advice; -import net.bytebuddy.implementation.bytecode.assign.Assigner; - -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.reflect.Method; -import java.util.concurrent.Callable; - -public class MockMethodAdvice { - - public static final String VOID = ""; - - @SuppressWarnings("unused") - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - private static Callable enter(@Identifier String identifier, - @Advice.This Object instance, - @Advice.Origin Method origin, - @Advice.AllArguments Object[] arguments) throws Throwable { - final Class returnType = origin.getReturnType(); - final String returnTypeAsString; - if (!returnType.equals(Void.class)) { - returnTypeAsString = returnType.getName(); - } else { - returnTypeAsString = VOID; - } - - final MethodDispatcher methodDispatcher = MockMethodDispatchers.get(identifier, instance); - - if (methodDispatcher == null){ - return null; - }else { - return methodDispatcher.methodCall(instance, origin.getName(), arguments, origin.getParameterTypes(), returnTypeAsString); - } - } - - @SuppressWarnings({"unused", "UnusedAssignment"}) - @Advice.OnMethodExit - private static void exit(@Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object returned, - @Advice.Enter Callable mocked) throws Throwable { - if (mocked != null) { - returned = mocked.call(); - } - } - - @Retention(RetentionPolicy.RUNTIME) - public @interface Identifier { - - } - -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodDispatchers.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodDispatchers.java deleted file mode 100644 index 4bf9be516..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockMethodDispatchers.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.advice; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - -public class MockMethodDispatchers { - private static final ConcurrentMap INSTANCE = new ConcurrentHashMap(); - - public static MethodDispatcher get(String identifier, Object mock) { - if (mock == INSTANCE) { // Avoid endless loop if ConcurrentHashMap was redefined to check for being a mock. - return null; - } else { - return INSTANCE.get(identifier); - } - } - - public static void set(String identifier, MethodDispatcher dispatcher) { - INSTANCE.put(identifier, dispatcher); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockStaticMethodAdvice.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockStaticMethodAdvice.java deleted file mode 100644 index 8e98e211b..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/advice/MockStaticMethodAdvice.java +++ /dev/null @@ -1,46 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.advice; - -import net.bytebuddy.asm.Advice; -import net.bytebuddy.implementation.bytecode.assign.Assigner; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodAdvice.Identifier; - -import java.lang.reflect.Method; -import java.util.concurrent.Callable; - -import static org.powermock.core.transformers.bytebuddy.advice.MockMethodAdvice.VOID; - -public class MockStaticMethodAdvice { - - @SuppressWarnings("unused") - @Advice.OnMethodEnter(skipOn = Advice.OnNonDefaultValue.class) - private static Callable enter(@Identifier String identifier, - @Advice.Origin Method origin, - @Advice.AllArguments Object[] arguments) throws Throwable { - final Class returnType = origin.getReturnType(); - final String returnTypeAsString; - if (!returnType.equals(Void.class)) { - returnTypeAsString = returnType.getName(); - } else { - returnTypeAsString = VOID; - } - - final Class mock = origin.getDeclaringClass(); - final MethodDispatcher methodDispatcher = MockMethodDispatchers.get(identifier, mock); - - if (methodDispatcher == null){ - return null; - }else { - return methodDispatcher.methodCall(mock, origin.getName(), arguments, origin.getParameterTypes(), returnTypeAsString); - } - } - - @SuppressWarnings({"unused", "UnusedAssignment"}) - @Advice.OnMethodExit - private static void exit(@Advice.Return(readOnly = false, typing = Assigner.Typing.DYNAMIC) Object returned, - @Advice.Enter Callable mocked) throws Throwable { - if (mocked != null) { - returned = mocked.call(); - } - } - -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/constructor/ConstructorCallMethodVisitorWrapper.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/constructor/ConstructorCallMethodVisitorWrapper.java deleted file mode 100644 index 761b9ad4b..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/constructor/ConstructorCallMethodVisitorWrapper.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy.constructor; - -import net.bytebuddy.asm.AsmVisitorWrapper; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.description.method.MethodDescription.InDefinedShape; -import net.bytebuddy.description.method.MethodList; -import net.bytebuddy.description.method.ParameterDescription; -import net.bytebuddy.description.method.ParameterList; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.implementation.Implementation; -import net.bytebuddy.implementation.Implementation.Context; -import net.bytebuddy.implementation.bytecode.Duplication; -import net.bytebuddy.implementation.bytecode.StackManipulation; -import net.bytebuddy.implementation.bytecode.StackManipulation.Compound; -import net.bytebuddy.implementation.bytecode.StackSize; -import net.bytebuddy.implementation.bytecode.TypeCreation; -import net.bytebuddy.implementation.bytecode.member.MethodInvocation; -import net.bytebuddy.implementation.bytecode.member.MethodVariableAccess; -import net.bytebuddy.jar.asm.MethodVisitor; -import net.bytebuddy.jar.asm.Opcodes; -import net.bytebuddy.matcher.ElementMatchers; -import net.bytebuddy.pool.TypePool; -import org.powermock.core.IndicateReloadClass; -import org.powermock.core.bytebuddy.ConditionalStateStackManipulation; -import org.powermock.core.bytebuddy.Frame; -import org.powermock.core.bytebuddy.Frame.LocalVariable; -import org.powermock.core.bytebuddy.MethodMaxLocals; -import org.powermock.core.bytebuddy.MockGetawayCall; -import org.powermock.core.bytebuddy.Variable; -import org.powermock.core.bytebuddy.Variable.VariableAccess; - -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; - -import static net.bytebuddy.matcher.ElementMatchers.hasDescriptor; -import static net.bytebuddy.matcher.ElementMatchers.isConstructor; - -public class ConstructorCallMethodVisitorWrapper implements AsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper { - - private final MethodDescription defferConstructor; - private final Class mockGetawayClass; - private final MethodMaxLocals methodMaxLocals; - - public ConstructorCallMethodVisitorWrapper(final MethodDescription defferConstructor, - final Class mockGetawayClass, - final MethodMaxLocals methodMaxLocals) { - this.defferConstructor = defferConstructor; - this.mockGetawayClass = mockGetawayClass; - this.methodMaxLocals = methodMaxLocals; - } - - @Override - public MethodVisitor wrap(TypeDescription instrumentedType, - MethodDescription instrumentedMethod, - MethodVisitor methodVisitor, - Implementation.Context implementationContext, - TypePool typePool, - int writerFlags, - int readerFlags) { - - int maxLocals = methodMaxLocals.getMethodMaxLocal(instrumentedMethod); - - return new ConstructorCallMethodVisitor(methodVisitor, - defferConstructor, - implementationContext, - typePool, - mockGetawayClass, - instrumentedType, - instrumentedMethod.getParameters(), - maxLocals - ); - } - - private static class ConstructorCallMethodVisitor extends MethodVisitor { - - private final MethodDescription defferConstructor; - private final Context implementationContext; - private final TypePool typePool; - private final TypeDescription instrumentedType; - private final ParameterList instrumentedMethodParameters; - private final TypeDescription defferConstructorParam; - private final Class mockGetawayClass; - - private int maxLocalVariables; - private int stackSizeBuffer; - - private ConstructorCallMethodVisitor(final MethodVisitor mv, final MethodDescription defferConstructor, - final Context implementationContext, - final TypePool typePool, final Class mockGetawayClass, - TypeDescription instrumentedType, - ParameterList instrumentedMethodParameters, final int maxLocals) { - super(Opcodes.ASM5, mv); - this.defferConstructor = defferConstructor; - this.implementationContext = implementationContext; - this.typePool = typePool; - this.mockGetawayClass = mockGetawayClass; - this.instrumentedType = instrumentedType; - this.instrumentedMethodParameters = instrumentedMethodParameters; - this.stackSizeBuffer = 0; - this.maxLocalVariables = maxLocals; - this.defferConstructorParam = typePool.describe(IndicateReloadClass.class.getName()).resolve(); - } - - - @Override - public void visitMethodInsn(final int opcode, final String owner, final String internalName, final String descriptor, - final boolean isInterface) { - if (owner.startsWith("java/lang")) { - callSuper(opcode, owner, internalName, descriptor, isInterface); - return; - } - - TypePool.Resolution superTypeResolution = typePool.describe(owner.replace('/', '.')); - - if (superTypeResolution.isResolved()) { - TypeDescription superType = superTypeResolution.resolve(); - MethodList methods = superType.getDeclaredMethods().filter( - isConstructor().and(hasDescriptor(descriptor)) - ); - - if (!methods.isEmpty()) { - replaceSuperConstructorCall(opcode, owner, internalName, descriptor, isInterface, superType, methods.getOnly()); - return; - } - } - - callSuper(opcode, owner, internalName, descriptor, isInterface); - } - - @Override - public void visitMaxs(int maxStack, int maxLocals) { - super.visitMaxs(maxStack + stackSizeBuffer, Math.max(maxLocals, maxLocalVariables)); - } - - private void replaceSuperConstructorCall(final int opcode, final String owner, final String internalName, final String descriptor, - final boolean isInterface, final TypeDescription superType, - final InDefinedShape targetConstructor) { - - ParameterList targetParameters = targetConstructor.getParameters(); - - Frame frame = Frame.beforeConstructorCall(instrumentedMethodParameters) - .addTopToLocals(maxLocalVariables - instrumentedMethodParameters.size()) - .addLocalVariable(LocalVariable.UNINITIALIZED_THIS) - .addLocalVariables(targetParameters); - - maxLocalVariables = frame.maxLocalVariableIndex(); - - final LinkedList targetParamsAsVariables = new LinkedList(); - - final StackManipulation condition = createConstructorConditional(superType, targetParameters, targetParamsAsVariables); - - final StackManipulation action = createDeferConstructorCall(); - - final StackManipulation otherwise = createOriginalConstructorCall(opcode, owner, internalName, descriptor, isInterface, targetParamsAsVariables); - - stackSizeBuffer += new Compound( - storeParamsAsLocalVariables(targetParameters, targetParamsAsVariables, maxLocalVariables), - new ConditionalStateStackManipulation(condition, action, otherwise, frame) - ).apply(mv, implementationContext).getMaximalSize() + StackSize.SINGLE.getSize(); - } - - private Compound storeParamsAsLocalVariables(final ParameterList targetParameters, - final LinkedList targetParamsAsVariables, int offset) { - List storeToLocalVariable = new ArrayList(); - - for (int index = targetParameters.size() - 1; index >= 0; index--) { - ParameterDescription.InDefinedShape targetParameter = targetParameters.get(index); - - offset = offset - targetParameter.getType().getStackSize().getSize(); - Variable variable = Variable.of(targetParameter.getType(), offset); - - storeToLocalVariable.add(VariableAccess.store(variable)); - - targetParamsAsVariables.addFirst(variable); - } - - storeToLocalVariable.add(MethodVariableAccess.of(instrumentedType).storeAt(--offset)); - - return new Compound(storeToLocalVariable); - } - - private StackManipulation createOriginalConstructorCall(final int opcode, final String owner, final String internalName, - final String descriptor, final boolean isInterface, - final LinkedList targetParamsAsVariables) { - final ConstructorCallMethodVisitor constructorCallMethodVisitor = this; - - return new StackManipulation() { - @Override - public boolean isValid() { - return true; - } - - @Override - public Size apply(final MethodVisitor methodVisitor, final Context implementationContext) { - Size size = new Size(0, 0); - - size = size.aggregate(MethodVariableAccess.loadThis().apply(mv, implementationContext)); - - for (Variable variable : targetParamsAsVariables) { - size = size.aggregate(VariableAccess.load(variable).apply(mv, implementationContext)); - } - - constructorCallMethodVisitor.callSuper(opcode, owner, internalName, descriptor, isInterface); - - return size; - } - }; - } - - private StackManipulation createDeferConstructorCall() { - return new Compound( - MethodVariableAccess.loadThis(), - TypeCreation.of(defferConstructorParam), - Duplication.SINGLE, - MethodInvocation.invoke( - defferConstructorParam.getDeclaredMethods().filter(ElementMatchers.isConstructor()).getOnly() - ), - MethodInvocation.invoke(defferConstructor) - ); - } - - private StackManipulation createConstructorConditional(final TypeDescription superType, - final ParameterList targetParameters, - final LinkedList targetParamsAsVariables) { - return new MockGetawayCall(mockGetawayClass) - .forType(superType) - .withArguments(targetParamsAsVariables) - .withParameterTypes(targetParameters); - } - - private void callSuper(final int opcode, final String owner, final String internalName, final String descriptor, - final boolean isInterface) { - super.visitMethodInsn(opcode, owner, internalName, descriptor, isInterface); - } - } - - -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClass.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClass.java deleted file mode 100644 index 5237f3179..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClass.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy.support; - -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.dynamic.DynamicType.Builder; - -public class ByteBuddyClass { - - public static ByteBuddyClass from(final TypeDescription typeDefinitions, final Builder builder) { - return new ByteBuddyClass(typeDefinitions, builder); - } - - private final Builder builder; - private final TypeDescription typeDescription; - - private ByteBuddyClass(final TypeDescription typeDescription, final Builder builder) { - this.builder = builder; - this.typeDescription = typeDescription; - } - - public boolean isInterface() { - return typeDescription.isInterface(); - } - - public Builder getBuilder() { - return builder; - } - - public TypeDescription getTypeDescription() { - return typeDescription; - } - - @Override - public String toString() { - return typeDescription.getName(); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClassWrapperFactory.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClassWrapperFactory.java deleted file mode 100644 index 8865c728d..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/support/ByteBuddyClassWrapperFactory.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * - * Copyright 2017 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package org.powermock.core.transformers.bytebuddy.support; - -import org.powermock.core.transformers.ClassWrapper; -import org.powermock.core.transformers.ClassWrapperFactory; - -public class ByteBuddyClassWrapperFactory implements ClassWrapperFactory { - - @Override - public ClassWrapper wrap(final ByteBuddyClass original) { - return new ByteBuddyWrapper(original); - } - - public static class ByteBuddyWrapper implements ClassWrapper { - - private ByteBuddyClass byteBuddyClass; - - private ByteBuddyWrapper(final ByteBuddyClass byteBuddyClass) { - this.byteBuddyClass = byteBuddyClass; - } - - @Override - public boolean isInterface() { - return byteBuddyClass.isInterface(); - } - - @Override - public ByteBuddyClass unwrap() { - return byteBuddyClass; - } - - @Override - public ClassWrapper wrap(final ByteBuddyClass original) { - return new ByteBuddyWrapper(original); - } - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ByteBuddyTestClassTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ByteBuddyTestClassTransformer.java deleted file mode 100644 index 800056f06..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ByteBuddyTestClassTransformer.java +++ /dev/null @@ -1,41 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - - -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.description.type.TypeDescription; -import org.powermock.core.transformers.ClassWrapper; -import org.powermock.core.transformers.MethodSignatureWriter; -import org.powermock.core.transformers.TestClassTransformer; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import java.lang.annotation.Annotation; - -import static org.powermock.core.transformers.bytebuddy.testclass.TestClassTransformationBuilder.withTestClass; - -public abstract class ByteBuddyTestClassTransformer extends TestClassTransformer implements MethodFilter { - - private final TypeDescription testClassDescription; - - ByteBuddyTestClassTransformer(final Class testClass, final Class testMethodAnnotationType, - final MethodSignatureWriter signatureWriter) { - super(testClass, testMethodAnnotationType, signatureWriter); - testClassDescription = TypeDescription.Sort.describe(testClass).asErasure(); - } - - @Override - public ClassWrapper transform(final ClassWrapper clazz) throws Exception { - if (isTestClass(clazz)) { - // @formatter:off - return withTestClass(clazz) - .removeTestAnnotationFromMethods(this, getTestMethodAnnotationType()) - .transform(); - // @formatter:on - } - return clazz; - } - - private boolean isTestClass(final ClassWrapper clazz) { - return testClassDescription.equals(clazz.unwrap().getTypeDescription()); - } - -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ForMethodsByteBuddyTestClassTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ForMethodsByteBuddyTestClassTransformer.java deleted file mode 100644 index 9d98e7de0..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/ForMethodsByteBuddyTestClassTransformer.java +++ /dev/null @@ -1,39 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - -import net.bytebuddy.description.method.MethodDescription; -import org.powermock.core.transformers.MethodSignatureWriter; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; -import java.util.Collection; -import java.util.HashSet; - -public class ForMethodsByteBuddyTestClassTransformer extends ByteBuddyTestClassTransformer { - - private final Collection testMethodsThatRunOnOtherClassLoaders; - /** - * Is lazily initilized because of - * AbstractTestSuiteChunkerImpl#chunkClass(Class) - */ - private Collection methodsThatRunOnOtherClassLoaders; - - public ForMethodsByteBuddyTestClassTransformer(final Class testClass, - final Class testMethodAnnotation, - final MethodSignatureWriter methodSignatureWriter, - final Collection testMethodsThatRunOnOtherClassLoaders) { - super(testClass, testMethodAnnotation, methodSignatureWriter); - this.testMethodsThatRunOnOtherClassLoaders = testMethodsThatRunOnOtherClassLoaders; - } - - @Override - public boolean mustHaveTestAnnotationRemoved(MethodDescription method) { - if (null == methodsThatRunOnOtherClassLoaders) { - methodsThatRunOnOtherClassLoaders = new HashSet(); - for (Method m : testMethodsThatRunOnOtherClassLoaders) { - methodsThatRunOnOtherClassLoaders.add(signatureOf(m)); - } - testMethodsThatRunOnOtherClassLoaders.clear(); - } - return methodsThatRunOnOtherClassLoaders.contains(signatureOf(method)); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/FromAllMethodsExceptByteBuddyTestClassTransformer.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/FromAllMethodsExceptByteBuddyTestClassTransformer.java deleted file mode 100644 index 2db699811..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/FromAllMethodsExceptByteBuddyTestClassTransformer.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - -import net.bytebuddy.description.method.MethodDescription; -import org.powermock.core.transformers.MethodSignatureWriter; - -import java.lang.annotation.Annotation; -import java.lang.reflect.Method; - -public class FromAllMethodsExceptByteBuddyTestClassTransformer extends ByteBuddyTestClassTransformer { - private final String targetMethodSignature; - - public FromAllMethodsExceptByteBuddyTestClassTransformer(final Class testClass, - final Class testMethodAnnotation, - final MethodSignatureWriter signatureWriter, - final Method methodToExclude) { - super(testClass, testMethodAnnotation, signatureWriter); - this.targetMethodSignature = signatureWriter.signatureForReflection(methodToExclude); - } - - @Override - public boolean mustHaveTestAnnotationRemoved(MethodDescription method) { - return !signatureOf(method).equals(targetMethodSignature); - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/MethodFilter.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/MethodFilter.java deleted file mode 100644 index 81985e22d..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/MethodFilter.java +++ /dev/null @@ -1,8 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - -import net.bytebuddy.description.method.MethodDescription; - - -public interface MethodFilter { - boolean mustHaveTestAnnotationRemoved(MethodDescription method); -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/RemoveTestAnnotationFromMethods.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/RemoveTestAnnotationFromMethods.java deleted file mode 100644 index 48a328752..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/RemoveTestAnnotationFromMethods.java +++ /dev/null @@ -1,82 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - -import net.bytebuddy.asm.AsmVisitorWrapper; -import net.bytebuddy.description.method.MethodDescription; -import net.bytebuddy.description.type.TypeDescription; -import net.bytebuddy.dynamic.DynamicType.Builder; -import net.bytebuddy.implementation.Implementation.Context; -import net.bytebuddy.jar.asm.AnnotationVisitor; -import net.bytebuddy.jar.asm.MethodVisitor; -import net.bytebuddy.jar.asm.Opcodes; -import net.bytebuddy.jar.asm.Type; -import net.bytebuddy.matcher.ElementMatcher; -import net.bytebuddy.matcher.ElementMatchers; -import net.bytebuddy.pool.TypePool; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import java.lang.annotation.Annotation; - -class RemoveTestAnnotationFromMethods implements TestClassTransformationOperation { - private final MethodFilter methodFilter; - private final Class testMethodAnnotationType; - - RemoveTestAnnotationFromMethods(final MethodFilter methodFilter, final Class testMethodAnnotationType) { - this.methodFilter = methodFilter; - this.testMethodAnnotationType = testMethodAnnotationType; - } - - @Override - public ByteBuddyClass apply(final ByteBuddyClass byteBuddyClass) { - final Builder builder = byteBuddyClass.getBuilder() - .visit(new AsmVisitorWrapper.ForDeclaredMethods() - .method( - ElementMatchers.not(ElementMatchers.isConstructor()).and( - new MethodFilterAdapter(methodFilter) - ), - new AnnotationRemovingMethodVisitorWrapper(testMethodAnnotationType) - )); - - - return ByteBuddyClass.from(byteBuddyClass.getTypeDescription(), builder); - } - - private static class MethodFilterAdapter implements ElementMatcher { - private final MethodFilter methodFilter; - - private MethodFilterAdapter(final MethodFilter methodFilter) { - this.methodFilter = methodFilter; - } - - @Override - public boolean matches(final MethodDescription target) { - return methodFilter.mustHaveTestAnnotationRemoved(target); - } - } - - private static class AnnotationRemovingMethodVisitorWrapper implements AsmVisitorWrapper.ForDeclaredMethods.MethodVisitorWrapper { - private final Class testMethodAnnotationType; - - private AnnotationRemovingMethodVisitorWrapper(final Class testMethodAnnotationType) { - this.testMethodAnnotationType = testMethodAnnotationType; - } - - @Override - public MethodVisitor wrap(final TypeDescription instrumentedType, - final MethodDescription instrumentedMethod, - final MethodVisitor methodVisitor, - final Context implementationContext, - final TypePool typePool, - final int writerFlags, - final int readerFlags) { - return new MethodVisitor(Opcodes.ASM5, methodVisitor) { - @Override - public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible) { - if (Type.getDescriptor(testMethodAnnotationType).equals(descriptor)) { - return null; - } - return super.visitAnnotation(descriptor, visible); - } - }; - } - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationBuilder.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationBuilder.java deleted file mode 100644 index 1286e0b32..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationBuilder.java +++ /dev/null @@ -1,62 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - -import org.powermock.core.transformers.ClassWrapper; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -import java.lang.annotation.Annotation; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -class TestClassTransformationBuilder { - static TestClassTransformation withTestClass(final ClassWrapper clazz) { - return new TestClassTransformation(clazz); - } - - static class TestClassTransformation { - private final ClassWrapper transformedClass; - - private TestClassTransformation(final ClassWrapper transformedClass) { - this.transformedClass = transformedClass; - } - - TerminationOperation removeTestAnnotationFromMethods(final MethodFilter methodFilter, - final Class testMethodAnnotationType) { - final List newOperations = new ArrayList(); - - newOperations.add(new RemoveTestAnnotationFromMethods(methodFilter, testMethodAnnotationType)); - return new TerminationOperation(transformedClass, newOperations); - } - } - - static class TerminationOperation extends BuilderUnit { - - private TerminationOperation( - final ClassWrapper clazz, - final List operations) { - super(clazz, operations); - } - - public ClassWrapper transform() { - - ByteBuddyClass buddyClass = clazz.unwrap(); - - for (TestClassTransformationOperation operation : operations) { - buddyClass = operation.apply(buddyClass); - } - - return clazz.wrap(buddyClass); - } - } - - private static class BuilderUnit { - final List operations; - final ClassWrapper clazz; - - private BuilderUnit(final ClassWrapper clazz, - final List operations) { - this.clazz = clazz; - this.operations = operations; - } - } -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperation.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperation.java deleted file mode 100644 index 374fdae3e..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperation.java +++ /dev/null @@ -1,7 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -public interface TestClassTransformationOperation { - ByteBuddyClass apply(ByteBuddyClass byteBuddyClass); -} diff --git a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperations.java b/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperations.java deleted file mode 100644 index 39f86c15f..000000000 --- a/powermock-core/src/main/java/org/powermock/core/transformers/bytebuddy/testclass/TestClassTransformationOperations.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.powermock.core.transformers.bytebuddy.testclass; - - -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; - -public enum TestClassTransformationOperations implements TestClassTransformationOperation { - - Nothing{ - @Override - public ByteBuddyClass apply(final ByteBuddyClass byteBuddyClass) { - return byteBuddyClass; - } - } -} diff --git a/powermock-core/src/test/java/org/powermock/configuration/support/ConfigurationFactoryImplTest.java b/powermock-core/src/test/java/org/powermock/configuration/support/ConfigurationFactoryImplTest.java index 47b6b8502..6d6723b60 100644 --- a/powermock-core/src/test/java/org/powermock/configuration/support/ConfigurationFactoryImplTest.java +++ b/powermock-core/src/test/java/org/powermock/configuration/support/ConfigurationFactoryImplTest.java @@ -50,7 +50,7 @@ public void setUp() { @Test public void should_read_byte_code_framework_from_environment_variable_if_defined() { - environmentVariables.set("powermock.byte-code-framework", ByteCodeFramework.ByteBuddy.name()); + environmentVariables.set("powermock.byte-code-framework", ByteCodeFramework.Javassist.name()); PowerMockConfiguration configuration = configurationFactory.create(PowerMockConfiguration.class); @@ -60,7 +60,7 @@ public void should_read_byte_code_framework_from_environment_variable_if_defined assertThat(configuration.getByteCodeFramework()) .as("Enum from configuration is read correctly") - .isEqualTo(ByteCodeFramework.ByteBuddy); + .isEqualTo(ByteCodeFramework.Javassist); } } @@ -90,7 +90,7 @@ public void should_return_configuration_from_file_if_configuration_file_exist() .contains("org.somepackage"); assertThat(configuration.getByteCodeFramework()) .as("Enum from configuration is read correctly") - .isEqualTo(ByteCodeFramework.ByteBuddy); + .isEqualTo(ByteCodeFramework.Javassist); } @Test diff --git a/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderBuilderTest.java b/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderBuilderTest.java index 27120479a..f4b211a8b 100644 --- a/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderBuilderTest.java +++ b/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderBuilderTest.java @@ -5,13 +5,11 @@ import org.assertj.core.api.ThrowableAssert.ThrowingCallable; import org.junit.Test; import org.powermock.PowerMockInternalException; -import org.powermock.core.classloader.bytebuddy.ByteBuddyMockClassLoader; import org.powermock.core.classloader.javassist.JavassistMockClassLoader; import org.powermock.core.transformers.ClassWrapper; import org.powermock.core.transformers.MockTransformer; import org.powermock.core.transformers.MockTransformerChain.FilterPredicate; import org.powermock.core.transformers.TestClassAwareTransformer; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; import org.powermock.core.transformers.support.DefaultMockTransformerChain; import org.powermock.reflect.internal.WhiteboxImpl; @@ -31,13 +29,6 @@ public void should_create_instance_of_MockClassLoader_depends_on_provided_byteco .build(); assertThat(classLoader).isExactlyInstanceOf(JavassistMockClassLoader.class); - - classLoader = MockClassLoaderBuilder - .create(ByteCodeFramework.ByteBuddy) - .forTestClass(getClass()) - .build(); - - assertThat(classLoader).isExactlyInstanceOf(ByteBuddyMockClassLoader.class); } @Test @@ -49,14 +40,6 @@ public void should_create_transformer_chain_depends_on_provided_bytecode_framewo .build(); assertThatJavassistMockTransformerChainCreated(classLoader); - - - classLoader = MockClassLoaderBuilder - .create(ByteCodeFramework.ByteBuddy) - .forTestClass(getClass()) - .build(); - - assertThatByteBuddyMockTransformerChainCreated(classLoader); } @Test @@ -94,11 +77,6 @@ private void assertThatJavassistMockTransformerChainCreated(final MockClassLoade assertThatMockTransformerChainWorksWithExpectedClassRepresentation(CtClass.class, mockTransformerChain); } - private void assertThatByteBuddyMockTransformerChainCreated(final MockClassLoader classLoader) { - final DefaultMockTransformerChain mockTransformerChain = (DefaultMockTransformerChain) classLoader.getMockTransformerChain(); - assertThatMockTransformerChainWorksWithExpectedClassRepresentation(ByteBuddyClass.class, mockTransformerChain); - } - private void assertThatMockTransformerChainWorksWithExpectedClassRepresentation(final Class expectedParameterClass, final DefaultMockTransformerChain mockTransformerChain) { final Method method = WhiteboxImpl.findMethod( diff --git a/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderFactoryTest.java b/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderFactoryTest.java index 13e7530b4..19cb438fc 100644 --- a/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderFactoryTest.java +++ b/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderFactoryTest.java @@ -7,18 +7,13 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; -import org.powermock.configuration.GlobalConfiguration; -import org.powermock.core.classloader.MockClassLoaderFactoryTest.TestContainer.ByteBuddyTestClass; import org.powermock.core.classloader.MockClassLoaderFactoryTest.TestContainer.ExceptionTestClass; import org.powermock.core.classloader.MockClassLoaderFactoryTest.TestContainer.JavassistTestClass; import org.powermock.core.classloader.MockClassLoaderFactoryTest.TestContainer.PrepareEverythingForTestTestClass; -import org.powermock.core.classloader.MockClassLoaderFactoryTest.TestContainer.PrepareOnlyThisForTestTestClass; import org.powermock.core.classloader.MockClassLoaderFactoryTest.TestContainer.SuppressStaticInitializationForTestClass; import org.powermock.core.classloader.annotations.PrepareEverythingForTest; import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.core.classloader.annotations.PrepareOnlyThisForTest; import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor; -import org.powermock.core.classloader.bytebuddy.ByteBuddyMockClassLoader; import org.powermock.core.classloader.javassist.JavassistMockClassLoader; import org.powermock.reflect.Whitebox; import powermock.test.support.MainMockTransformerTestSupport.SupportClasses; @@ -65,7 +60,6 @@ public static Collection parameters() { final ArrayList parameters = new ArrayList(); parameters.add(new Object[]{JavassistTestClass.class, "powermock.test.support.MainMockTransformerTestSupport$SupportClasses$FinalInnerClass"}); - parameters.add(new Object[]{ByteBuddyTestClass.class, "powermock.test.support.MainMockTransformerTestSupport$SupportClasses$FinalInnerClass"}); parameters.add(new Object[]{SuppressStaticInitializationForTestClass.class, "SupportClasses.FinalInnerClass"}); parameters.add(new Object[]{PrepareEverythingForTestTestClass.class, "*"}); @@ -101,8 +95,6 @@ public static Collection parameters() { final ArrayList parameters = new ArrayList(); parameters.add(new Object[]{JavassistTestClass.class, JavassistMockClassLoader.class}); - parameters.add(new Object[]{ByteBuddyTestClass.class, ByteBuddyMockClassLoader.class}); - parameters.add(new Object[]{PrepareOnlyThisForTestTestClass.class, ByteBuddyMockClassLoader.class}); return parameters; } @@ -173,17 +165,7 @@ public void call() { .isExactlyInstanceOf(IllegalArgumentException.class); } - - @Test - public void should_use_default_bytecode_framework_from_global_configuration_for_class_if_there_is_not_annotation_on_class() { - GlobalConfiguration.powerMockConfiguration().setByteCodeFramework(ByteCodeFramework.ByteBuddy); - - final ClassLoader classLoader = objectUnderTest.createForClass(); - - assertThat(classLoader) - .as("An instance of MockClassLoader is created") - .isInstanceOf(ByteBuddyMockClassLoader.class); - } + } public abstract static class BasePrepareForTestCases { @@ -193,8 +175,6 @@ public static Collection parameters() { final ArrayList parameters = new ArrayList(); parameters.add(new Object[]{JavassistTestClass.class, "powermock.test.support.MainMockTransformerTestSupport$SupportClasses"}); - parameters.add(new Object[]{PrepareOnlyThisForTestTestClass.class, "powermock.test.support.MainMockTransformerTestSupport$SupportClasses"}); - parameters.add(new Object[]{ByteBuddyTestClass.class, "powermock.test.support.MainMockTransformerTestSupport$SupportClasses"}); parameters.add(new Object[]{SuppressStaticInitializationForTestClass.class, "SupportClasses.FinalInnerClass"}); parameters.add(new Object[]{PrepareEverythingForTestTestClass.class, "*"}); @@ -247,20 +227,7 @@ public void someTestWithoutPrepareForTest() { } } - - @PrepareOnlyThisForTest(value = SupportClasses.class, byteCodeFramework = ByteCodeFramework.ByteBuddy) - public static class PrepareOnlyThisForTestTestClass { - - @Test - @PrepareOnlyThisForTest(value = SupportClasses.class, byteCodeFramework = ByteCodeFramework.ByteBuddy) - public void someTestWithPrepareForTest() { - } - @Test - public void someTestWithoutPrepareForTest() { - } - - } @SuppressStaticInitializationFor("SupportClasses.FinalInnerClass") public static class SuppressStaticInitializationForTestClass { @@ -276,18 +243,6 @@ public void someTestWithoutPrepareForTest() { } - @PrepareForTest(value = SupportClasses.class, byteCodeFramework = ByteCodeFramework.ByteBuddy) - public static class ByteBuddyTestClass { - @Test - @PrepareForTest(value = SupportClasses.FinalInnerClass.class, byteCodeFramework = ByteCodeFramework.ByteBuddy) - public void someTestWithPrepareForTest() { - } - - @Test - public void someTestWithoutPrepareForTest() { - } - } - public static class ExceptionTestClass { @Test public void someTestWithoutPrepareForTest() { diff --git a/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderTest.java b/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderTest.java index d712f041f..2ac1ebca1 100644 --- a/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderTest.java +++ b/powermock-core/src/test/java/org/powermock/core/classloader/MockClassLoaderTest.java @@ -27,14 +27,12 @@ import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.powermock.core.classloader.annotations.UseClassPathAdjuster; -import org.powermock.core.classloader.bytebuddy.ByteBuddyMockClassLoader; import org.powermock.core.classloader.javassist.ClassPathAdjuster; import org.powermock.core.classloader.javassist.JavassistMockClassLoader; import org.powermock.core.test.MockClassLoaderFactory; import org.powermock.core.transformers.ClassWrapper; import org.powermock.core.transformers.MockTransformer; import org.powermock.core.transformers.MockTransformerChain; -import org.powermock.core.transformers.bytebuddy.support.ByteBuddyClass; import org.powermock.core.transformers.support.DefaultMockTransformerChain; import org.powermock.reflect.Whitebox; @@ -57,16 +55,11 @@ public class MockClassLoaderTest { @Parameterized.Parameters(name = "ClassLoader: {0}") public static List data() { - return asList( - new Object[]{ - JavassistMockClassLoader.class, - new JavassistMockTransformer() - }, - new Object[]{ - ByteBuddyMockClassLoader.class, - new BytebuddyMockTransformer() - } - ); + final Object[] objects = { + JavassistMockClassLoader.class, + new JavassistMockTransformer() + }; + return asList(new Object[][]{objects}); } private final MockClassLoaderFactory mockClassLoaderFactory; @@ -361,20 +354,4 @@ public ClassWrapper transform(final ClassWrapper clazz) throws } } - private static class BytebuddyMockTransformer implements MockTransformer { - @Override - public ClassWrapper transform(final ClassWrapper clazz) throws Exception { - - ByteBuddyClass bytebuddy = clazz.unwrap(); - - Builder builder = bytebuddy.getBuilder(); - TypeDescription typeDefinitions = bytebuddy.getTypeDescription(); - - builder = builder.method(isDeclaredBy(typeDefinitions)) - .intercept(FixedValue.nullValue()); - - - return clazz.wrap(ByteBuddyClass.from(typeDefinitions, builder)); - } - } } diff --git a/powermock-core/src/test/java/org/powermock/core/test/MockClassLoaderFactory.java b/powermock-core/src/test/java/org/powermock/core/test/MockClassLoaderFactory.java index 69c5b8aff..6cc45bcbc 100644 --- a/powermock-core/src/test/java/org/powermock/core/test/MockClassLoaderFactory.java +++ b/powermock-core/src/test/java/org/powermock/core/test/MockClassLoaderFactory.java @@ -21,7 +21,6 @@ import org.powermock.core.classloader.MockClassLoader; import org.powermock.core.classloader.MockClassLoaderConfiguration; import org.powermock.core.classloader.annotations.UseClassPathAdjuster; -import org.powermock.core.classloader.bytebuddy.ByteBuddyMockClassLoader; import org.powermock.reflect.internal.WhiteboxImpl; import java.lang.reflect.Constructor; @@ -52,7 +51,7 @@ private MockClassLoader getInstance(MockClassLoaderConfiguration configuration) } public boolean isByteBuddy(){ - return classLoaderClass.isAssignableFrom(ByteBuddyMockClassLoader.class); + return false; } @Override diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/ClassFinalModifierMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/ClassFinalModifierMockTransformerTest.java index 998327ea5..3fb2f8850 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/ClassFinalModifierMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/ClassFinalModifierMockTransformerTest.java @@ -22,7 +22,6 @@ import org.junit.Test; import org.junit.runners.Parameterized; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.ClassFinalModifierMockTransformer; import powermock.test.support.MainMockTransformerTestSupport.SomeInterface; import powermock.test.support.MainMockTransformerTestSupport.SupportClasses; @@ -45,7 +44,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createTransformerTestData(org.powermock.core.transformers.javassist.ClassFinalModifierMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createTransformerTestData(ClassFinalModifierMockTransformer.class)); return data; } diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorCallMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorCallMockTransformerTest.java index d93b3797f..2588d7c10 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorCallMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorCallMockTransformerTest.java @@ -24,7 +24,6 @@ import org.junit.runners.Parameterized; import org.powermock.core.IndicateReloadClass; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.ConstructorCallMockTransformer; import org.powermock.core.transformers.javassist.InstrumentMockTransformer; import org.powermock.core.transformers.mock.MockGatewaySpy; import org.powermock.core.transformers.mock.MockGatewaySpy.MethodCall; @@ -63,7 +62,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(createTransformerTestDataWithMockGateway(MockGatewaySpy.class, InstrumentMockTransformer.class)); - data.addAll(createTransformerTestDataWithMockGateway(MockGatewaySpy.class, ConstructorCallMockTransformer.class)); return data; } @@ -78,7 +76,6 @@ public ConstructorCallMockTransformerTest(final TransformStrategy strategy, @Test public void should_not_change_constructors_of_test_class() throws Exception { assumeClassLoaderMode(); - assumeClassLoaderIsByteBuddy(); final Class testClass = MultipleConstructors.class; @@ -103,7 +100,6 @@ public void call() throws Throwable { @Test public void should_not_change_constructors_of_nested_test_classes() throws Exception { assumeClassLoaderMode(); - assumeClassLoaderIsByteBuddy(); setTestClassToTransformers(ParentTestClass.class); diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorModifiersMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorModifiersMockTransformerTest.java index e2a5e87a7..10e085f76 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorModifiersMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/ConstructorModifiersMockTransformerTest.java @@ -21,7 +21,6 @@ import org.junit.Test; import org.junit.runners.Parameterized; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.ConstructorModifiersMockTransformer; import org.powermock.core.transformers.javassist.ConstructorsMockTransformer; import powermock.test.support.MainMockTransformerTestSupport.ParentTestClass; import powermock.test.support.MainMockTransformerTestSupport.ParentTestClass.NestedTestClass; @@ -46,7 +45,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createTransformerTestData(ConstructorsMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createTransformerTestData(ConstructorModifiersMockTransformer.class)); return data; } diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/MethodsMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/MethodsMockTransformerTest.java index f3fc80695..6ac75783b 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/MethodsMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/MethodsMockTransformerTest.java @@ -31,15 +31,11 @@ import org.junit.runners.Parameterized; import org.powermock.core.MockGateway; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.MethodMockTransformer; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodDispatchers; import org.powermock.core.transformers.javassist.StaticFinalNativeMethodMockTransformer; import org.powermock.core.transformers.mock.MockGatewaySpy; -import org.powermock.core.transformers.mock.MockGatewaySpyMethodDispatcher; import org.powermock.core.transformers.support.DefaultMockTransformerChain; import org.powermock.reflect.internal.WhiteboxImpl; import powermock.test.support.MainMockTransformerTestSupport.AbstractMethodTestClass; -import powermock.test.support.MainMockTransformerTestSupport.NativeMethodsTestClass; import powermock.test.support.MainMockTransformerTestSupport.ReturnMethodsTestClass; import powermock.test.support.MainMockTransformerTestSupport.SubclassWithBridgeMethod; import powermock.test.support.MainMockTransformerTestSupport.SuperClassWithObjectMethod; @@ -49,8 +45,8 @@ import java.util.ArrayList; import java.util.Collection; -import static org.assertj.core.api.Java6Assertions.catchThrowable; import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.assertj.core.api.Java6Assertions.catchThrowable; import static org.powermock.core.transformers.mock.MockGatewaySpy.ConditionBuilder.registered; import static org.powermock.core.transformers.mock.MockGatewaySpy.methodCalls; @@ -61,7 +57,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createOneTransformerTestData(MockGatewaySpy.class, StaticFinalNativeMethodMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createOneTransformerTestData(MethodMockTransformer.class)); return data; } @@ -69,9 +64,6 @@ public static Iterable data() { public MethodsMockTransformerTest(final TransformStrategy strategy, final MockTransformer transformer, final MockClassLoaderFactory mockClassloaderFactory) { super(strategy, DefaultMockTransformerChain.newBuilder().append(transformer).build(), mockClassloaderFactory); - if (transformer instanceof MethodMockTransformer) { - MockMethodDispatchers.set(((MethodMockTransformer) transformer).getIdentifier(), new MockGatewaySpyMethodDispatcher()); - } } @Test diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/MockTransformerTestHelper.java b/powermock-core/src/test/java/org/powermock/core/transformers/MockTransformerTestHelper.java index e2c56b788..b5487adb6 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/MockTransformerTestHelper.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/MockTransformerTestHelper.java @@ -19,7 +19,6 @@ package org.powermock.core.transformers; import org.powermock.core.MockGateway; -import org.powermock.core.classloader.bytebuddy.ByteBuddyMockClassLoader; import org.powermock.core.classloader.javassist.JavassistMockClassLoader; import org.powermock.core.test.MockClassLoaderFactory; import org.powermock.core.transformers.javassist.AbstractJavaAssistMockTransformer; @@ -79,10 +78,8 @@ static Collection createOneTransformerTestData(final Class mockGate private static MockClassLoaderFactory createClassLoaderFactory(final Class transformerClass) { if (AbstractJavaAssistMockTransformer.class.isAssignableFrom(transformerClass)){ return new MockClassLoaderFactory(JavassistMockClassLoader.class); - }else { - return new MockClassLoaderFactory(ByteBuddyMockClassLoader.class); } - + throw new UnsupportedOperationException(); } private static List createTransformers(final Class mockGateway, final TransformStrategy strategy, final Class... classes) { diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/NativeMethodsMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/NativeMethodsMockTransformerTest.java index 0980dd755..9ef1ea78e 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/NativeMethodsMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/NativeMethodsMockTransformerTest.java @@ -23,11 +23,8 @@ import org.junit.Test; import org.junit.runners.Parameterized; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.NativeMethodMockTransformer; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodDispatchers; import org.powermock.core.transformers.javassist.StaticFinalNativeMethodMockTransformer; import org.powermock.core.transformers.mock.MockGatewaySpy; -import org.powermock.core.transformers.mock.MockGatewaySpyMethodDispatcher; import org.powermock.core.transformers.support.DefaultMockTransformerChain; import org.powermock.reflect.internal.WhiteboxImpl; import powermock.test.support.MainMockTransformerTestSupport.ChildOfNativeMethodsTestClass; @@ -49,7 +46,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createOneTransformerTestData(MockGatewaySpy.class, StaticFinalNativeMethodMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createOneTransformerTestData(NativeMethodMockTransformer.class)); return data; } @@ -57,9 +53,6 @@ public static Iterable data() { public NativeMethodsMockTransformerTest(final TransformStrategy strategy, final MockTransformer transformer, final MockClassLoaderFactory mockClassloaderFactory) { super(strategy, DefaultMockTransformerChain.newBuilder().append(transformer).build(), mockClassloaderFactory); - if (transformer instanceof NativeMethodMockTransformer) { - MockMethodDispatchers.set(((NativeMethodMockTransformer) transformer).getIdentifier(), new MockGatewaySpyMethodDispatcher()); - } } @Test diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/StaticFinalFieldsMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/StaticFinalFieldsMockTransformerTest.java index 0395e219d..fe9f526f4 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/StaticFinalFieldsMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/StaticFinalFieldsMockTransformerTest.java @@ -43,7 +43,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createTransformerTestData(StaticFinalFieldsMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createTransformerTestData(org.powermock.core.transformers.bytebuddy.StaticFinalFieldsMockTransformer.class)); return data; } diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/StaticMethodsMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/StaticMethodsMockTransformerTest.java index eeeca4123..eff6f2b03 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/StaticMethodsMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/StaticMethodsMockTransformerTest.java @@ -22,11 +22,8 @@ import org.junit.runners.Parameterized; import org.powermock.core.MockGateway; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.MethodMockTransformer; -import org.powermock.core.transformers.bytebuddy.advice.MockMethodDispatchers; import org.powermock.core.transformers.javassist.StaticFinalNativeMethodMockTransformer; import org.powermock.core.transformers.mock.MockGatewaySpy; -import org.powermock.core.transformers.mock.MockGatewaySpyMethodDispatcher; import org.powermock.core.transformers.support.DefaultMockTransformerChain; import org.powermock.reflect.internal.WhiteboxImpl; import powermock.test.support.MainMockTransformerTestSupport.StaticVoidMethodsTestClass; @@ -45,7 +42,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createOneTransformerTestData(MockGatewaySpy.class, StaticFinalNativeMethodMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createOneTransformerTestData(MethodMockTransformer.class)); return data; } @@ -53,9 +49,6 @@ public static Iterable data() { public StaticMethodsMockTransformerTest(final TransformStrategy strategy, final MockTransformer transformer, final MockClassLoaderFactory mockClassloaderFactory) { super(strategy, DefaultMockTransformerChain.newBuilder().append(transformer).build(), mockClassloaderFactory); - if (transformer instanceof MethodMockTransformer) { - MockMethodDispatchers.set(((MethodMockTransformer) transformer).getIdentifier(), new MockGatewaySpyMethodDispatcher()); - } } @Test diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/SuppressStaticInitializerMockTransformerTest.java b/powermock-core/src/test/java/org/powermock/core/transformers/SuppressStaticInitializerMockTransformerTest.java index 89e2c5809..1cfd6ef42 100644 --- a/powermock-core/src/test/java/org/powermock/core/transformers/SuppressStaticInitializerMockTransformerTest.java +++ b/powermock-core/src/test/java/org/powermock/core/transformers/SuppressStaticInitializerMockTransformerTest.java @@ -24,7 +24,6 @@ import org.junit.runners.Parameterized; import org.powermock.core.MockRepository; import org.powermock.core.test.MockClassLoaderFactory; -import org.powermock.core.transformers.bytebuddy.StaticInitializerMockTransformer; import org.powermock.core.transformers.javassist.SuppressStaticInitializerMockTransformer; import org.powermock.reflect.Whitebox; import powermock.test.support.MainMockTransformerTestSupport.StaticInitialization; @@ -45,7 +44,6 @@ public static Iterable data() { Collection data = new ArrayList(); data.addAll(MockTransformerTestHelper.createTransformerTestData(SuppressStaticInitializerMockTransformer.class)); - data.addAll(MockTransformerTestHelper.createTransformerTestData(StaticInitializerMockTransformer.class)); return data; } diff --git a/powermock-core/src/test/java/org/powermock/core/transformers/mock/MockGatewaySpyMethodDispatcher.java b/powermock-core/src/test/java/org/powermock/core/transformers/mock/MockGatewaySpyMethodDispatcher.java deleted file mode 100644 index 856fe5716..000000000 --- a/powermock-core/src/test/java/org/powermock/core/transformers/mock/MockGatewaySpyMethodDispatcher.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.powermock.core.transformers.mock; - -import org.powermock.core.transformers.bytebuddy.advice.MockGatewayMethodDispatcher; - -public class MockGatewaySpyMethodDispatcher extends MockGatewayMethodDispatcher { - protected Object handleMethodCall(final Object instance, final String methodName, final Object[] args, - final Class[] sig, final String returnTypeAsString) throws Throwable { - return MockGatewaySpy.methodCall(instance, methodName, args, sig, returnTypeAsString); - } -} diff --git a/powermock-core/src/test/resources/org/powermock/extensions/test_configuration.properties b/powermock-core/src/test/resources/org/powermock/extensions/test_configuration.properties index 491c9dba2..400bc5146 100644 --- a/powermock-core/src/test/resources/org/powermock/extensions/test_configuration.properties +++ b/powermock-core/src/test/resources/org/powermock/extensions/test_configuration.properties @@ -1,2 +1,2 @@ powermock.global-ignore=org.somepackage -powermock.byte-code-framework=ByteBuddy \ No newline at end of file +powermock.byte-code-framework=Javassist \ No newline at end of file diff --git a/tests/mockito/junit4/src/test/java/samples/powermockito/junit4/bugs/github806/DoThrowTest.java b/tests/mockito/junit4/src/test/java/samples/powermockito/junit4/bugs/github806/DoThrowTest.java index d10248b36..25c26b3b4 100644 --- a/tests/mockito/junit4/src/test/java/samples/powermockito/junit4/bugs/github806/DoThrowTest.java +++ b/tests/mockito/junit4/src/test/java/samples/powermockito/junit4/bugs/github806/DoThrowTest.java @@ -18,7 +18,6 @@ package samples.powermockito.junit4.bugs.github806; -import javassist.NotFoundException; import org.junit.Test; import org.mockito.Mockito; @@ -26,10 +25,10 @@ public class DoThrowTest { - @Test(expected = NotFoundException.class) + @Test(expected = RuntimeException.class) public void should_throw_expected_exception() { final DoThrowTMockClass mock = Mockito.mock(DoThrowTMockClass.class); - doThrow(NotFoundException.class).when(mock).doSomething(); + doThrow(RuntimeException.class).when(mock).doSomething(); mock.doSomething(); } diff --git a/version.properties b/version.properties index e6112329e..f3ae48b95 100644 --- a/version.properties +++ b/version.properties @@ -1,5 +1,5 @@ #Currently building version -version=2.0.0-beta.14 +version=2.0.0.RC1 #Prevoius version used to generate release notes delta -previousVersion=2.0.0-beta.13 +previousVersion=1.7.4 \ No newline at end of file