Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.net4j.trace/src-aop/org/eclipse/net4j/internal/trace/Aspect.aj')
-rw-r--r--plugins/org.eclipse.net4j.trace/src-aop/org/eclipse/net4j/internal/trace/Aspect.aj97
1 files changed, 97 insertions, 0 deletions
diff --git a/plugins/org.eclipse.net4j.trace/src-aop/org/eclipse/net4j/internal/trace/Aspect.aj b/plugins/org.eclipse.net4j.trace/src-aop/org/eclipse/net4j/internal/trace/Aspect.aj
new file mode 100644
index 0000000000..81eb18baab
--- /dev/null
+++ b/plugins/org.eclipse.net4j.trace/src-aop/org/eclipse/net4j/internal/trace/Aspect.aj
@@ -0,0 +1,97 @@
+/**
+ * Copyright (c) 2018 Eike Stepper (Berlin, Germany) and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Eike Stepper - initial API and implementation
+ */
+package org.eclipse.net4j.internal.trace;
+
+import org.eclipse.net4j.internal.trace.BufferTracer.Call;
+
+import java.util.Stack;
+
+/**
+ * @author Eike Stepper
+ */
+public aspect Aspect
+{
+ pointcut objectMethods() :
+ execution(public * *.getClass()) ||
+ execution(public * *.toString()) ||
+ execution(public * *.equals(Object)) ||
+ execution(public * *.hashCode()) ||
+ execution(public * *.notify()) ||
+ execution(public * *.notifyAll()) ||
+ execution(public * *.wait()) ||
+ execution(public * *.wait(long, int)) ||
+ execution(public * *.wait(long)) ||
+ execution(* *.clone()) ||
+ execution(* *.finalize());
+
+ pointcut unwantedMethods() :
+ execution(* org.eclipse.internal.net4j.buffer.BufferPool.createBufferRef()) ||
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.getCapacity()) ||
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.getLimit()) ||
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.getPosition()) ||
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.hasRemaining()) ||
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.isEOS()) ||
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.isCCAM()) ||
+ execution(* org.eclipse.net4j.buffer.BufferOutputStream.ensureBufferPrivate()) ||
+ execution(* org.eclipse.net4j.buffer.BufferOutputStream.throwExceptionOnError()) ||
+ execution(* org.eclipse.net4j.buffer.BufferOutputStream.flushIfFilled());
+
+ pointcut relevantMethods(Object target) : target(target) &&
+ !objectMethods() &&
+ !unwantedMethods() &&
+ (
+ execution(* org.eclipse.internal.net4j.buffer.Buffer.*(..)) ||
+ execution(* org.eclipse.internal.net4j.buffer.BufferPool.*(..)) ||
+ execution(* org.eclipse.net4j.buffer.BufferInputStream.*(..)) ||
+ execution(* org.eclipse.net4j.buffer.BufferOutputStream.*(..)) ||
+ execution(* org.eclipse.spi.net4j.Channel.*(..)) ||
+ execution(* org.eclipse.spi.net4j.Channel.SendQueue.*(..)) ||
+ execution(* org.eclipse.spi.net4j.Channel.ReceiveSerializer2.*(..)) ||
+ execution(* org.eclipse.net4j.channel.ChannelInputStream.*(..)) ||
+ execution(* org.eclipse.net4j.channel.ChannelOutputStream.*(..)) ||
+ execution(* org.eclipse.spi.net4j.ChannelMultiplexer.*(..)) ||
+ execution(* org.eclipse.spi.net4j.Connector.*(..)) ||
+ execution(* org.eclipse.spi.net4j.Protocol.*(..)) ||
+ execution(* org.eclipse.net4j.signal.SignalProtocol.*(..)) ||
+ execution(* org.eclipse.net4j.signal.SignalProtocol.SignalInputStream.*(..)) ||
+ execution(* org.eclipse.net4j.signal.SignalProtocol.SignalOutputStream.*(..)) ||
+ execution(* org.eclipse.net4j.signal.Signal.*(..)) ||
+ execution(* org.eclipse.net4j.signal.SignalActor.*(..)) ||
+ execution(* org.eclipse.net4j.signal.SignalReactor.*(..)) ||
+ execution(* org.eclipse.net4j.internal.jvm.JVMConnector.*(..)) ||
+ execution(* org.eclipse.net4j.internal.jvm.JVMChannel.*(..)) ||
+ execution(* org.eclipse.net4j.internal.tcp.TCPConnector.*(..)) ||
+ execution(* org.eclipse.net4j.internal.tcp.TCPClientConnector.*(..)) ||
+ execution(* org.eclipse.net4j.internal.tcp.TCPServerConnector.*(..))
+ );
+
+ Object around(Object target) : relevantMethods(target)
+ {
+ String what = thisJoinPointStaticPart.getSignature().getName();
+ Stack<Call> callStack = BufferTracer.execution(target, what, null);
+
+ try
+ {
+ return proceed(target);
+ }
+ finally
+ {
+ BufferTracer.execution(target, what, callStack);
+ }
+ }
+
+ before(Thread thread, String name) :
+ execution(public static void org.eclipse.net4j.util.concurrent.ConcurrencyUtil.setThreadName(..)) &&
+ args(thread, name)
+ {
+ BufferTracer.setThreadName(thread, name);
+ }
+}

Back to the top