Browse Source

373195

tags/V1_7_0RC1
Andy Clement 12 years ago
parent
commit
6defb4e5a2
1 changed files with 16 additions and 18 deletions
  1. 16
    18
      bridge/src/org/aspectj/bridge/context/CompilationAndWeavingContext.java

+ 16
- 18
bridge/src/org/aspectj/bridge/context/CompilationAndWeavingContext.java View File

@@ -1,5 +1,5 @@
/* *******************************************************************
* Copyright (c) 2005 Contributors.
* Copyright (c) 2005-2012 Contributors.
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
@@ -8,23 +8,22 @@
*
* Contributors:
* Adrian Colyer Initial implementation
* Andy Clement various fixes
* Trask Stanalker #373195
* ******************************************************************/
package org.aspectj.bridge.context;

import java.lang.ref.WeakReference;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;

/**
* @author colyer This class is responsible for tracking progress through the various phases of compilation and weaving. When an
* exception occurs (or a message is issued, if desired), you can ask this class for a "stack trace" that gives information
* about what the compiler was doing at the time. The trace will say something like:
*
* when matching pointcut xyz when matching shadow sss when weaving type ABC when weaving shadow mungers
*
* Since we can't use ThreadLocal (have to work on 1.3), we use a map from Thread -> ContextStack.
* This class is responsible for tracking progress through the various phases of compilation and weaving.
* When an exception occurs (or a message is issued, if desired), you can ask this class for a
* "stack trace" that gives information about what the compiler was doing at the time.
* The trace will say something like:
* "when matching pointcut xyz when matching shadow sss when weaving type ABC when weaving shadow mungers"
*/
public class CompilationAndWeavingContext {

@@ -88,8 +87,7 @@ public class CompilationAndWeavingContext {
"type munging for @AspectJ aspectOf" };

// context stacks, one per thread
private static Map<Thread, Stack<ContextStackEntry>> contextMap = Collections
.synchronizedMap(new HashMap<Thread, Stack<ContextStackEntry>>());
private static ThreadLocal<Stack<ContextStackEntry>> contextMap = new ThreadLocal<Stack<ContextStackEntry>>();

// single thread mode stack
private static Stack<ContextStackEntry> contextStack = new Stack<ContextStackEntry>();
@@ -109,12 +107,12 @@ public class CompilationAndWeavingContext {

public static void reset() {
if (!multiThreaded) {
contextMap.clear();
contextMap.remove();
contextStack.clear();
formatterMap.clear();
nextTokenId = 1;
} else {
contextMap.remove(Thread.currentThread());
contextMap.remove();
// TODO what about formatterMap?
// TODO what about nextTokenId?
}
@@ -160,9 +158,9 @@ public class CompilationAndWeavingContext {
* Exit a phase, all stack entries from the one with the given token down will be removed.
*/
public static void leavingPhase(ContextToken aToken) {
Stack contextStack = getContextStack();
Stack<ContextStackEntry> contextStack = getContextStack();
while (!contextStack.isEmpty()) {
ContextStackEntry entry = (ContextStackEntry) contextStack.pop();
ContextStackEntry entry = contextStack.pop();
if (entry.contextToken == aToken) {
break;
}
@@ -176,17 +174,17 @@ public class CompilationAndWeavingContext {
if (!multiThreaded) {
return;
}
contextMap.remove(Thread.currentThread());
contextMap.remove();
}

private static Stack<ContextStackEntry> getContextStack() {
if (!multiThreaded) {
return contextStack;
} else {
Stack<ContextStackEntry> contextStack = contextMap.get(Thread.currentThread());
Stack<ContextStackEntry> contextStack = contextMap.get();
if (contextStack == null) {
contextStack = new Stack<ContextStackEntry>();
contextMap.put(Thread.currentThread(), contextStack);
contextMap.set(contextStack);
}
return contextStack;
}

Loading…
Cancel
Save