From cf2d0c80a0a2acab68d690899bed58ef2aaa6c36 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20Walter?= <juergen.walter@uni-wuerzburg.de>
Date: Wed, 25 Apr 2018 19:34:43 +0200
Subject: [PATCH] Improved parsing of method signatures

---
 .../filter/ClassAndInterfaceFilter.java       | 41 +++++++++----------
 1 file changed, 20 insertions(+), 21 deletions(-)

diff --git a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/ClassAndInterfaceFilter.java b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/ClassAndInterfaceFilter.java
index 0295c50..89b6c3c 100644
--- a/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/ClassAndInterfaceFilter.java
+++ b/tools.descartes.dql.connector.kieker/src/tools/descartes/dql/connector/kieker/filter/ClassAndInterfaceFilter.java
@@ -38,8 +38,6 @@ public class ClassAndInterfaceFilter extends AbstractFilterPlugin {
 		super(configuration, projectContext);
 	}
 
-
-
 	@InputPort(
 			name = ClassAndInterfaceFilter.INPUT_PORT_NAME,
 			description = "Extract class-information from monitoring record",
@@ -55,39 +53,40 @@ public class ClassAndInterfaceFilter extends AbstractFilterPlugin {
 			final String signature = opExRecord.getOperationSignature();
 			
 			final long exTime = opExRecord.getTout()-opExRecord.getTin();
-			final String classPattern = "[\\p{Graph}]+((\\.)(\\w)*[<(].*[>)])";//String-pattern to extract the component information
 			final String interfacePattern = "((\\.)(\\w)*[<(].*[>)])";//String-pattern to extract the component information
 			final String requestID = opExRecord.getSessionId();
 
-			//			final long traceID = opExRecord.getTraceId();
-			//			final long eoi = opExRecord.getEoi();
-			//			final long ess = opExRecord.getEss();
-
-
 			String className = null;
 			String interfaceName = null;
 
 			try {
-				String[] redundantInfo=signature.split(classPattern);
-				
-				//(redundantInfo + classAndInterfaceString) - redundantInfo = classAndInterfaceString
-				String classAndInterfaceString = signature;
-				if (redundantInfo.length > 0){
-					classAndInterfaceString = signature.substring(redundantInfo[0].length());
-				}
-				
+				//remove return type + visibility from method signature string
+				String classAndInterfaceString = signature;//split("(\\s)*")[2];
+				classAndInterfaceString = classAndInterfaceString.replace("transient", "");
+				classAndInterfaceString = classAndInterfaceString.replace("public", "");
+				classAndInterfaceString = classAndInterfaceString.replace("private", "");
+				classAndInterfaceString = classAndInterfaceString.replace("protected", "");
+				classAndInterfaceString = classAndInterfaceString.replace("synchronized", "");
+				classAndInterfaceString = classAndInterfaceString.replace("static", "");
+				classAndInterfaceString = classAndInterfaceString.trim();
+				classAndInterfaceString = classAndInterfaceString.substring(classAndInterfaceString.indexOf(" ")+1);
+				classAndInterfaceString = classAndInterfaceString.replaceAll("\\$(\\d)*", "");
+				classAndInterfaceString = classAndInterfaceString.trim();
+
 				//extraction of the class information
 				String[] componentSeparatedByNonWordChar = classAndInterfaceString.split(interfacePattern);
 				className = componentSeparatedByNonWordChar[0].trim();
 
 				//extraction of the interface information
-				interfaceName = classAndInterfaceString.substring(className.length()+1).trim();				
+				if(classAndInterfaceString.length() > className.length()) {
+					interfaceName = classAndInterfaceString.substring(className.length()+1).trim();				
+				}else {
+					log.error("EEEEE "+ classAndInterfaceString);
+					log.error("EEEEE "+ className);
+				}
 
 			} catch (Exception e) {
-				e.printStackTrace();
-				/*
-				 * TODO
-				 */
+				log.error("Errro parsing signature", e);
 			}
 
 			long classID = putIntoClassMap(timestamp,hostName, className, requestID);
-- 
GitLab