|
|
@@ -0,0 +1,91 @@ |
|
|
|
/* ******************************************************************* |
|
|
|
* Copyright (c) 2003 Contributors. |
|
|
|
* All rights reserved. |
|
|
|
* This program and the accompanying materials are made available |
|
|
|
* under the terms of the Common Public License v1.0 |
|
|
|
* which accompanies this distribution and is available at |
|
|
|
* http://www.eclipse.org/legal/cpl-v10.html |
|
|
|
* |
|
|
|
* Contributors: |
|
|
|
* Mik Kersten initial implementation |
|
|
|
* ******************************************************************/ |
|
|
|
|
|
|
|
package org.aspectj.asm.internal; |
|
|
|
|
|
|
|
import java.io.File; |
|
|
|
import java.util.HashMap; |
|
|
|
import java.util.Iterator; |
|
|
|
import java.util.Map; |
|
|
|
import java.util.Set; |
|
|
|
import java.util.StringTokenizer; |
|
|
|
|
|
|
|
import org.aspectj.asm.AsmManager; |
|
|
|
import org.aspectj.asm.IElementHandleProvider; |
|
|
|
import org.aspectj.bridge.ISourceLocation; |
|
|
|
|
|
|
|
/** |
|
|
|
* Not currently used - uses int keys rather than the full file path as the first part of the handle. |
|
|
|
*/ |
|
|
|
public class OptimizedFullPathHandleProvider implements IElementHandleProvider { |
|
|
|
|
|
|
|
static final String ID_DELIM = "|"; |
|
|
|
Map kToF = new HashMap(); |
|
|
|
int key = 1; |
|
|
|
|
|
|
|
private Integer getKey(String file) { |
|
|
|
Integer k = null; |
|
|
|
if (kToF.values().contains(file)) { |
|
|
|
Set keys = kToF.keySet(); |
|
|
|
for (Iterator iter = keys.iterator(); iter.hasNext() && k==null;) { |
|
|
|
Integer element = (Integer) iter.next(); |
|
|
|
if (kToF.get(element).equals(file)) { |
|
|
|
k = element; |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
k = new Integer(key); |
|
|
|
kToF.put(k,file); |
|
|
|
key++; |
|
|
|
} |
|
|
|
return k; |
|
|
|
} |
|
|
|
|
|
|
|
public String createHandleIdentifier(ISourceLocation location) { |
|
|
|
StringBuffer sb = new StringBuffer(); |
|
|
|
String file = AsmManager.getDefault().getCanonicalFilePath(location.getSourceFile()); |
|
|
|
|
|
|
|
sb.append(getKey(file).intValue()); |
|
|
|
sb.append(ID_DELIM); |
|
|
|
sb.append(location.getLine()); |
|
|
|
sb.append(ID_DELIM); |
|
|
|
sb.append(location.getColumn()); |
|
|
|
sb.append(ID_DELIM); |
|
|
|
sb.append(location.getOffset()); |
|
|
|
return sb.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
public String createHandleIdentifier(File sourceFile, int line,int column,int offset) { |
|
|
|
StringBuffer sb = new StringBuffer(); |
|
|
|
sb.append(getKey(AsmManager.getDefault().getCanonicalFilePath(sourceFile)).intValue()); |
|
|
|
sb.append(ID_DELIM); |
|
|
|
sb.append(line); |
|
|
|
sb.append(ID_DELIM); |
|
|
|
sb.append(column); |
|
|
|
sb.append(ID_DELIM); |
|
|
|
sb.append(offset); |
|
|
|
return sb.toString(); |
|
|
|
} |
|
|
|
|
|
|
|
public String getFileForHandle(String handle) { |
|
|
|
StringTokenizer st = new StringTokenizer(handle, ID_DELIM); |
|
|
|
String k = st.nextToken(); |
|
|
|
return (String)kToF.get(new Integer(k)); |
|
|
|
// return file; |
|
|
|
} |
|
|
|
|
|
|
|
public int getLineNumberForHandle(String handle) { |
|
|
|
StringTokenizer st = new StringTokenizer(handle, ID_DELIM); |
|
|
|
st.nextToken(); // skip over the file |
|
|
|
return new Integer(st.nextToken()).intValue(); |
|
|
|
} |
|
|
|
} |