154 changed files with 1316 additions and 2375 deletions
@ -1,41 +0,0 @@
@@ -1,41 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.JoinPoint; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.Before; |
||||
import org.aspectj.lang.annotation.Pointcut; |
||||
|
||||
@Aspect |
||||
public class AdviceUsingThisJoinPoint { |
||||
|
||||
private String lastEntry = ""; |
||||
|
||||
public String getLastMethodEntered() { |
||||
return this.lastEntry; |
||||
} |
||||
|
||||
@Pointcut("execution(* *(..))") |
||||
public void methodExecution() {} |
||||
|
||||
@Before("methodExecution()") |
||||
public void entryTrace(JoinPoint jp) { |
||||
this.lastEntry = jp.toString(); |
||||
} |
||||
|
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
/** |
||||
* @author Adrian Colyer |
||||
* @since 2.0 |
||||
*/ |
||||
public interface AnnotatedTestBean { |
||||
|
||||
String doThis(); |
||||
|
||||
String doThat(); |
||||
|
||||
String doTheOther(); |
||||
|
||||
String[] doArray(); |
||||
|
||||
} |
||||
@ -1,48 +0,0 @@
@@ -1,48 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.springframework.transaction.annotation.Transactional; |
||||
|
||||
/** |
||||
* @author Adrian Colyer |
||||
* @since 2.0 |
||||
*/ |
||||
@Transactional |
||||
public class AnnotatedTestBeanImpl implements AnnotatedTestBean { |
||||
|
||||
@TestAnnotation("this value") |
||||
public String doThis() { |
||||
return "doThis"; |
||||
} |
||||
|
||||
@TestAnnotation("that value") |
||||
public String doThat() { |
||||
return "doThat"; |
||||
} |
||||
|
||||
@TestAnnotation("array value") |
||||
public String[] doArray() { |
||||
return new String[] {"doThis", "doThat"}; |
||||
} |
||||
|
||||
// not annotated
|
||||
public String doTheOther() { |
||||
return "doTheOther"; |
||||
} |
||||
|
||||
} |
||||
@ -1,30 +0,0 @@
@@ -1,30 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
|
||||
/** |
||||
* @author Adrian Colyer |
||||
*/ |
||||
public class AnnotationBindingTestAspect { |
||||
|
||||
public String doWithAnnotation(ProceedingJoinPoint pjp, TestAnnotation testAnnotation) throws Throwable { |
||||
return testAnnotation.value(); |
||||
} |
||||
|
||||
} |
||||
@ -1,38 +0,0 @@
@@ -1,38 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
/** |
||||
* @author Adrian Colyer |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
@Aspect |
||||
public class AtAspectJAnnotationBindingTestAspect { |
||||
|
||||
@Around("execution(* *(..)) && @annotation(testAnn)") |
||||
public Object doWithAnnotation(ProceedingJoinPoint pjp, TestAnnotation testAnn) |
||||
throws Throwable { |
||||
String annValue = testAnn.value(); |
||||
Object result = pjp.proceed(); |
||||
return (result instanceof String ? annValue + " " + result : result); |
||||
} |
||||
|
||||
} |
||||
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
/** |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
@Aspect |
||||
public class DummyAspect { |
||||
|
||||
@Around("execution(* setAge(int))") |
||||
public Object test(ProceedingJoinPoint pjp) throws Throwable { |
||||
return pjp.proceed(); |
||||
} |
||||
|
||||
} |
||||
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
/** |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
@Aspect |
||||
public class DummyAspectWithParameter { |
||||
|
||||
@Around("execution(* setAge(int)) && args(age)") |
||||
public Object test(ProceedingJoinPoint pjp, int age) throws Throwable { |
||||
return pjp.proceed(); |
||||
} |
||||
|
||||
} |
||||
@ -1,38 +0,0 @@
@@ -1,38 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.springframework.beans.factory.FactoryBean; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
*/ |
||||
public class DummyFactoryBean implements FactoryBean { |
||||
|
||||
public Object getObject() throws Exception { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
public Class getObjectType() { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
public boolean isSingleton() { |
||||
throw new UnsupportedOperationException(); |
||||
} |
||||
|
||||
} |
||||
@ -1,41 +0,0 @@
@@ -1,41 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.annotation.AfterThrowing; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
import java.io.IOException; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
* @since 2.0 |
||||
*/ |
||||
@Aspect |
||||
public class ExceptionHandlingAspect { |
||||
|
||||
public int handled; |
||||
|
||||
public IOException lastException; |
||||
|
||||
@AfterThrowing(pointcut = "within(org.springframework.beans.ITestBean+)", throwing = "ex") |
||||
public void handleIOException(IOException ex) { |
||||
handled++; |
||||
lastException = ex; |
||||
} |
||||
|
||||
} |
||||
@ -1,38 +0,0 @@
@@ -1,38 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
import org.springframework.core.annotation.Order; |
||||
|
||||
/** |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
@Aspect |
||||
@Order(10) |
||||
public class IncreaseReturnValue { |
||||
|
||||
@Around("execution(int *.getAge())") |
||||
public Object doubleReturnValue(ProceedingJoinPoint pjp) throws Throwable { |
||||
int result = (Integer) pjp.proceed(); |
||||
return result + 3; |
||||
} |
||||
|
||||
} |
||||
@ -1,36 +0,0 @@
@@ -1,36 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.springframework.beans.TestBean; |
||||
|
||||
/** |
||||
* @author Rod Johnson |
||||
* @since 2.0 |
||||
*/ |
||||
public class LazyTestBean extends TestBean { |
||||
|
||||
public static int instantiations; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
public LazyTestBean() { |
||||
++instantiations; |
||||
} |
||||
|
||||
} |
||||
@ -1,48 +0,0 @@
@@ -1,48 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
/** |
||||
* @author Rod Johnson |
||||
*/ |
||||
@Aspect |
||||
public class MultiplyReturnValue { |
||||
|
||||
private int multiple = 2; |
||||
|
||||
public int invocations; |
||||
|
||||
public void setMultiple(int multiple) { |
||||
this.multiple = multiple; |
||||
} |
||||
|
||||
public int getMultiple() { |
||||
return this.multiple; |
||||
} |
||||
|
||||
@Around("execution(int *.getAge())") |
||||
public Object doubleReturnValue(ProceedingJoinPoint pjp) throws Throwable { |
||||
++this.invocations; |
||||
int result = (Integer) pjp.proceed(); |
||||
return result * this.multiple; |
||||
} |
||||
|
||||
} |
||||
@ -1,41 +0,0 @@
@@ -1,41 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.springframework.beans.factory.FactoryBean; |
||||
import org.springframework.core.io.Resource; |
||||
|
||||
/** |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
public class ResourceArrayFactoryBean implements FactoryBean { |
||||
|
||||
@TestAnnotation("some value") |
||||
public Object getObject() throws Exception { |
||||
return new Resource[0]; |
||||
} |
||||
|
||||
@TestAnnotation("some value") |
||||
public Class getObjectType() { |
||||
return Resource[].class; |
||||
} |
||||
|
||||
public boolean isSingleton() { |
||||
return true; |
||||
} |
||||
|
||||
} |
||||
@ -1,83 +0,0 @@
@@ -1,83 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.Pointcut; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
* @author Juergen Hoeller |
||||
*/ |
||||
@Aspect |
||||
public class RetryAspect { |
||||
|
||||
private int beginCalls; |
||||
|
||||
private int commitCalls; |
||||
|
||||
private int rollbackCalls; |
||||
|
||||
|
||||
@Pointcut("execution(public * UnreliableBean.*(..))") |
||||
public void execOfPublicMethod() { |
||||
} |
||||
|
||||
/** |
||||
* Retry Advice |
||||
*/ |
||||
@Around("execOfPublicMethod()") |
||||
public Object retry(ProceedingJoinPoint jp) throws Throwable { |
||||
boolean retry = true; |
||||
Object o = null; |
||||
while (retry) { |
||||
try { |
||||
retry = false; |
||||
this.beginCalls++; |
||||
try { |
||||
o = jp.proceed(); |
||||
this.commitCalls++; |
||||
} |
||||
catch (RetryableException e) { |
||||
this.rollbackCalls++; |
||||
throw e; |
||||
} |
||||
} |
||||
catch (RetryableException re) { |
||||
retry = true; |
||||
} |
||||
} |
||||
return o; |
||||
} |
||||
|
||||
|
||||
public int getBeginCalls() { |
||||
return this.beginCalls; |
||||
} |
||||
|
||||
public int getCommitCalls() { |
||||
return this.commitCalls; |
||||
} |
||||
|
||||
public int getRollbackCalls() { |
||||
return this.rollbackCalls; |
||||
} |
||||
|
||||
} |
||||
|
||||
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import org.springframework.core.NestedRuntimeException; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
* @since 2.0 |
||||
*/ |
||||
public class RetryableException extends NestedRuntimeException { |
||||
|
||||
public RetryableException(String msg) { |
||||
super(msg); |
||||
} |
||||
|
||||
public RetryableException(String msg, Throwable cause) { |
||||
super(msg, cause); |
||||
} |
||||
} |
||||
@ -1,30 +0,0 @@
@@ -1,30 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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. |
||||
* |
||||
* Created on 6 Oct 2006 by Adrian Colyer |
||||
*/ |
||||
package org.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import java.lang.annotation.Retention; |
||||
import java.lang.annotation.RetentionPolicy; |
||||
|
||||
/** |
||||
* @author Adrian Colyer |
||||
* @since 2.0 |
||||
*/ |
||||
@Retention(RetentionPolicy.RUNTIME) |
||||
public @interface TestAnnotation { |
||||
String value() ; |
||||
} |
||||
@ -1,41 +0,0 @@
@@ -1,41 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
import java.lang.reflect.Method; |
||||
|
||||
import org.springframework.aop.MethodBeforeAdvice; |
||||
import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor; |
||||
import org.springframework.beans.ITestBean; |
||||
|
||||
public class TestBeanAdvisor extends StaticMethodMatcherPointcutAdvisor { |
||||
|
||||
public int count; |
||||
|
||||
public TestBeanAdvisor() { |
||||
setAdvice(new MethodBeforeAdvice() { |
||||
public void before(Method method, Object[] args, Object target) throws Throwable { |
||||
++count; |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public boolean matches(Method method, Class targetClass) { |
||||
return ITestBean.class.isAssignableFrom(targetClass); |
||||
} |
||||
|
||||
} |
||||
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
*/ |
||||
public class UnreliableBean { |
||||
|
||||
private int calls; |
||||
|
||||
public int unreliable() { |
||||
this.calls++; |
||||
if (this.calls % 2 != 0) { |
||||
throw new RetryableException("foo"); |
||||
} |
||||
return this.calls; |
||||
} |
||||
|
||||
} |
||||
@ -1,42 +0,0 @@
@@ -1,42 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.aspectj.autoproxy.benchmark; |
||||
|
||||
import org.aopalliance.intercept.MethodInterceptor; |
||||
import org.aopalliance.intercept.MethodInvocation; |
||||
|
||||
public class MultiplyReturnValueInterceptor implements MethodInterceptor { |
||||
|
||||
private int multiple = 2; |
||||
|
||||
public int invocations; |
||||
|
||||
public void setMultiple(int multiple) { |
||||
this.multiple = multiple; |
||||
} |
||||
|
||||
public int getMultiple() { |
||||
return this.multiple; |
||||
} |
||||
|
||||
public Object invoke(MethodInvocation mi) throws Throwable { |
||||
++invocations; |
||||
int result = (Integer) mi.proceed(); |
||||
return result * this.multiple; |
||||
} |
||||
|
||||
} |
||||
@ -1,51 +0,0 @@
@@ -1,51 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy.benchmark; |
||||
|
||||
import java.lang.reflect.Method; |
||||
|
||||
import org.springframework.aop.Advisor; |
||||
import org.springframework.aop.AfterReturningAdvice; |
||||
import org.springframework.aop.support.DefaultPointcutAdvisor; |
||||
import org.springframework.aop.support.StaticMethodMatcherPointcut; |
||||
|
||||
/** |
||||
* |
||||
* |
||||
* @author Rod Johnson |
||||
* |
||||
*/ |
||||
public class TraceAfterReturningAdvice implements AfterReturningAdvice { |
||||
|
||||
public int afterTakesInt; |
||||
|
||||
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { |
||||
++afterTakesInt; |
||||
} |
||||
|
||||
public static Advisor advisor() { |
||||
return new DefaultPointcutAdvisor( |
||||
new StaticMethodMatcherPointcut() { |
||||
public boolean matches(Method method, Class targetClass) { |
||||
return method.getParameterTypes().length == 1 && |
||||
method.getParameterTypes()[0].equals(Integer.class); |
||||
} |
||||
}, |
||||
new TraceAfterReturningAdvice()); |
||||
} |
||||
|
||||
} |
||||
@ -1,40 +0,0 @@
@@ -1,40 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy.benchmark; |
||||
|
||||
import org.aspectj.lang.annotation.AfterReturning; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
import org.aspectj.lang.annotation.Before; |
||||
|
||||
@Aspect |
||||
public class TraceAspect { |
||||
|
||||
public int beforeStringReturn; |
||||
|
||||
public int afterTakesInt; |
||||
|
||||
@Before("execution(String *.*(..))") |
||||
public void traceWithoutJoinPoint() { |
||||
++beforeStringReturn; |
||||
} |
||||
|
||||
@AfterReturning("execution(void *.*(int))") |
||||
public void traceWithoutJoinPoint2() { |
||||
++afterTakesInt; |
||||
} |
||||
|
||||
} |
||||
@ -1,44 +0,0 @@
@@ -1,44 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2006 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.springframework.aop.aspectj.autoproxy.benchmark; |
||||
|
||||
import java.lang.reflect.Method; |
||||
|
||||
import org.springframework.aop.Advisor; |
||||
import org.springframework.aop.MethodBeforeAdvice; |
||||
import org.springframework.aop.support.DefaultPointcutAdvisor; |
||||
import org.springframework.aop.support.StaticMethodMatcherPointcut; |
||||
|
||||
public class TraceBeforeAdvice implements MethodBeforeAdvice { |
||||
|
||||
public int beforeStringReturn; |
||||
|
||||
public void before(Method method, Object[] args, Object target) throws Throwable { |
||||
++beforeStringReturn; |
||||
} |
||||
|
||||
public static Advisor advisor() { |
||||
return new DefaultPointcutAdvisor( |
||||
new StaticMethodMatcherPointcut() { |
||||
public boolean matches(Method method, Class targetClass) { |
||||
return method.getReturnType().equals(String.class); |
||||
} |
||||
}, |
||||
new TraceBeforeAdvice()); |
||||
} |
||||
|
||||
} |
||||
@ -1,26 +0,0 @@
@@ -1,26 +0,0 @@
|
||||
/** |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy.spr3064; |
||||
|
||||
/** |
||||
* @author acolyer |
||||
* |
||||
*/ |
||||
public interface Service { |
||||
|
||||
void serveMe(); |
||||
|
||||
} |
||||
@ -1,32 +0,0 @@
@@ -1,32 +0,0 @@
|
||||
/** |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy.spr3064; |
||||
|
||||
/** |
||||
* @author acolyer |
||||
* |
||||
*/ |
||||
public class ServiceImpl implements Service { |
||||
|
||||
/* (non-Javadoc) |
||||
* @see org.springframework.aop.aspectj.autoproxy.spr3064.Service#serveMe() |
||||
*/ |
||||
@Transaction |
||||
public void serveMe() { |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -1,28 +0,0 @@
@@ -1,28 +0,0 @@
|
||||
/** |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy.spr3064; |
||||
|
||||
import java.lang.annotation.Retention; |
||||
import java.lang.annotation.RetentionPolicy; |
||||
|
||||
/** |
||||
* @author acolyer |
||||
* |
||||
*/ |
||||
@Retention(RetentionPolicy.RUNTIME) |
||||
public @interface Transaction { |
||||
|
||||
} |
||||
@ -1,35 +0,0 @@
@@ -1,35 +0,0 @@
|
||||
/** |
||||
* Copyright 2002-2007 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.springframework.aop.aspectj.autoproxy.spr3064; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.aspectj.lang.annotation.Around; |
||||
import org.aspectj.lang.annotation.Aspect; |
||||
|
||||
/** |
||||
* @author acolyer |
||||
* |
||||
*/ |
||||
@Aspect |
||||
public class TransactionInterceptor { |
||||
|
||||
@Around(value="execution(* *..Service.*(..)) && @annotation(transaction)") |
||||
public Object around(ProceedingJoinPoint pjp, Transaction transaction) throws Throwable { |
||||
throw new RuntimeException("advice invoked"); |
||||
//return pjp.proceed();
|
||||
} |
||||
|
||||
} |
||||
@ -1,69 +0,0 @@
@@ -1,69 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.config; |
||||
|
||||
import org.aspectj.lang.ProceedingJoinPoint; |
||||
import org.springframework.beans.ITestBean; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
*/ |
||||
public class CountingAspectJAdvice { |
||||
|
||||
private int beforeCount; |
||||
|
||||
private int afterCount; |
||||
|
||||
private int aroundCount; |
||||
|
||||
public void myBeforeAdvice() throws Throwable { |
||||
this.beforeCount++; |
||||
} |
||||
|
||||
public void myAfterAdvice() throws Throwable { |
||||
this.afterCount++; |
||||
} |
||||
|
||||
public void myAroundAdvice(ProceedingJoinPoint pjp) throws Throwable { |
||||
this.aroundCount++; |
||||
pjp.proceed(); |
||||
} |
||||
|
||||
public void myAfterReturningAdvice(int age) { |
||||
this.afterCount++; |
||||
} |
||||
|
||||
public void myAfterThrowingAdvice(RuntimeException ex) { |
||||
this.afterCount++; |
||||
} |
||||
|
||||
public void mySetAgeAdvice(int newAge, ITestBean bean) { |
||||
// no-op
|
||||
} |
||||
|
||||
public int getBeforeCount() { |
||||
return this.beforeCount; |
||||
} |
||||
|
||||
public int getAfterCount() { |
||||
return this.afterCount; |
||||
} |
||||
|
||||
public int getAroundCount() { |
||||
return this.aroundCount; |
||||
} |
||||
} |
||||
@ -1,37 +0,0 @@
@@ -1,37 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.framework; |
||||
|
||||
/** |
||||
* @author Rob Harrop |
||||
*/ |
||||
public class CglibTestBean { |
||||
|
||||
private String name; |
||||
|
||||
public CglibTestBean() { |
||||
setName("Some Default"); |
||||
} |
||||
|
||||
public void setName(String name) { |
||||
this.name = name; |
||||
} |
||||
|
||||
public String getName() { |
||||
return this.name; |
||||
} |
||||
} |
||||
@ -1,53 +0,0 @@
@@ -1,53 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.framework; |
||||
|
||||
import java.lang.reflect.Method; |
||||
|
||||
import javax.servlet.ServletException; |
||||
|
||||
import org.springframework.aop.AfterReturningAdvice; |
||||
import org.springframework.aop.MethodBeforeAdvice; |
||||
import org.springframework.aop.ThrowsAdvice; |
||||
import org.springframework.dao.DataAccessException; |
||||
|
||||
/** |
||||
* Advice object that implements <i>multiple</i> Advice interfaces. |
||||
* |
||||
* @author Juergen Hoeller |
||||
* @since 19.05.2005 |
||||
*/ |
||||
public class CountingMultiAdvice extends MethodCounter |
||||
implements MethodBeforeAdvice, AfterReturningAdvice, ThrowsAdvice { |
||||
|
||||
public void before(Method m, Object[] args, Object target) throws Throwable { |
||||
count(m); |
||||
} |
||||
|
||||
public void afterReturning(Object o, Method m, Object[] args, Object target) throws Throwable { |
||||
count(m); |
||||
} |
||||
|
||||
public void afterThrowing(ServletException sex) throws Throwable { |
||||
count(ServletException.class.getName()); |
||||
} |
||||
|
||||
public void afterThrowing(DataAccessException ex) throws Throwable { |
||||
count(DataAccessException.class.getName()); |
||||
} |
||||
|
||||
} |
||||
@ -1,37 +0,0 @@
@@ -1,37 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.framework; |
||||
|
||||
import javax.servlet.ServletException; |
||||
|
||||
import org.springframework.aop.ThrowsAdvice; |
||||
import org.springframework.dao.DataAccessException; |
||||
|
||||
/** |
||||
* @author Rod Johnson |
||||
*/ |
||||
public class CountingThrowsAdvice extends MethodCounter implements ThrowsAdvice { |
||||
|
||||
public void afterThrowing(ServletException sex) throws Throwable { |
||||
count(ServletException.class.getName()); |
||||
} |
||||
|
||||
public void afterThrowing(DataAccessException ex) throws Throwable { |
||||
count(DataAccessException.class.getName()); |
||||
} |
||||
|
||||
} |
||||
@ -1,20 +0,0 @@
@@ -1,20 +0,0 @@
|
||||
/** |
||||
* |
||||
*/ |
||||
package org.springframework.aop.framework; |
||||
|
||||
class Echo implements IEcho { |
||||
private int a; |
||||
|
||||
public int echoException(int i, Throwable t) throws Throwable { |
||||
if (t != null) |
||||
throw t; |
||||
return i; |
||||
} |
||||
public void setA(int a) { |
||||
this.a = a; |
||||
} |
||||
public int getA() { |
||||
return a; |
||||
} |
||||
} |
||||
@ -1,43 +0,0 @@
@@ -1,43 +0,0 @@
|
||||
/* |
||||
* Copyright 2002-2005 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.springframework.aop.framework; |
||||
|
||||
import org.aopalliance.intercept.MethodInvocation; |
||||
import org.springframework.aop.interceptor.ExposeInvocationInterceptor; |
||||
import org.springframework.beans.TestBean; |
||||
|
||||
|
||||
/** |
||||
* Used to test ExposeInvocationInterceptor. |
||||
* @author Rod Johnson |
||||
*/ |
||||
public abstract class ExposedInvocationTestBean extends TestBean { |
||||
|
||||
public String getName() { |
||||
MethodInvocation invocation = ExposeInvocationInterceptor.currentInvocation(); |
||||
assertions(invocation); |
||||
return super.getName(); |
||||
} |
||||
|
||||
public void absquatulate() { |
||||
MethodInvocation invocation = ExposeInvocationInterceptor.currentInvocation(); |
||||
assertions(invocation); |
||||
super.absquatulate(); |
||||
} |
||||
|
||||
protected abstract void assertions(MethodInvocation invocation); |
||||
} |
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue