|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /* *******************************************************************
- * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
- * 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:
- * PARC initial implementation
- * ******************************************************************/
-
- package org.aspectj.weaver;
-
- import java.util.ArrayList;
- import java.util.List;
-
- public class IntMap {
- // public static final IntMap EMPTY = new IntMap(0) {
- // public boolean directlyInAdvice() { return true; }
- // public ShadowMunger getEnclosingAdvice() { return null; } //XXX possible
- // };
-
- // XXX begin hack to avoid a signature refactoring in Pointcut
- private ResolvedType concreteAspect;
- private ShadowMunger enclosingAdvice;
- private List<ResolvedPointcutDefinition> enclosingDefinition = new ArrayList<ResolvedPointcutDefinition>();
-
- public void pushEnclosingDefinition(ResolvedPointcutDefinition def) {
- enclosingDefinition.add(def);
- }
-
- public void popEnclosingDefinitition() {
- enclosingDefinition.remove(enclosingDefinition.size() - 1);
- }
-
- public ResolvedPointcutDefinition peekEnclosingDefinition() {
- if (enclosingDefinition.size() == 0) {
- return null;
- }
- return enclosingDefinition.get(enclosingDefinition.size() - 1);
- }
-
- public boolean directlyInAdvice() {
- return enclosingDefinition.isEmpty();
- }
-
- public ShadowMunger getEnclosingAdvice() {
- return enclosingAdvice;
- }
-
- public void setEnclosingAdvice(ShadowMunger advice) {
- this.enclosingAdvice = advice;
- }
-
- public Member getAdviceSignature() {
- if (enclosingAdvice instanceof Advice) {
- return ((Advice) enclosingAdvice).getSignature();
- } else {
- return null;
- }
- }
-
- public ResolvedType getConcreteAspect() {
- return concreteAspect;
- }
-
- public void setConcreteAspect(ResolvedType concreteAspect) {
- this.concreteAspect = concreteAspect;
- }
-
- public void copyContext(IntMap bindings) {
- this.enclosingAdvice = bindings.enclosingAdvice;
- this.enclosingDefinition = bindings.enclosingDefinition;
- this.concreteAspect = bindings.concreteAspect;
- }
-
- // XXX end hack to avoid a signature refactoring in Pointcut
-
- private static final int MISSING = -1;
-
- private int[] map;
-
- private IntMap(int[] map) {
- this.map = map;
- }
-
- public IntMap() {
- map = new int[0];
- }
-
- public IntMap(int initialCapacity) {
- map = new int[initialCapacity];
- for (int i = 0; i < initialCapacity; i++) {
- map[i] = MISSING;
- }
- }
-
- public void put(int key, int val) {
- /* assert (val >= 0 && key >= 0) */
- if (key >= map.length) {
- int[] tmp = new int[key * 2 + 1]; // ??? better expansion function
- System.arraycopy(map, 0, tmp, 0, map.length);
- for (int i = map.length, len = tmp.length; i < len; i++) {
- tmp[i] = MISSING;
- }
- map = tmp;
- }
- map[key] = val;
- }
-
- public int get(int key) {
- return map[key];
- }
-
- public boolean hasKey(int key) {
- return (key < map.length && map[key] != MISSING);
- }
-
- // ---- factory methods
-
- public static IntMap idMap(int size) {
- int[] map = new int[size];
- for (int i = 0; i < size; i++) {
- map[i] = i;
- }
- return new IntMap(map);
- }
-
- // ---- from object
-
- public String toString() {
- StringBuffer buf = new StringBuffer("[");
- boolean seenFirst = false;
- for (int i = 0, len = map.length; i < len; i++) {
- if (map[i] != MISSING) {
- if (seenFirst) {
- buf.append(", ");
- }
- seenFirst = true;
- buf.append(i);
- buf.append(" -> ");
- buf.append(map[i]);
- }
- }
- buf.append("]");
- return buf.toString();
- }
-
- }
|