blob: 6840a7e681694351110727065aec5200da74c7ba [file] [log] [blame]
/**********************************************************************
* This file is part of "Object Teams Dynamic Runtime Environment"
*
* Copyright 2009, 2014 Oliver Frank 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
*
* Please visit http://www.eclipse.org/objectteams for updates and contact.
*
* Contributors:
* Oliver Frank - Initial API and implementation
* Stephan Herrmann - Initial API and implementation
**********************************************************************/
package org.eclipse.objectteams.otredyn.bytecode;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.objectteams.otredyn.runtime.IBoundClass;
import org.eclipse.objectteams.otredyn.runtime.IMember;
import org.objectweb.asm.Opcodes;
/**
* Represents a member of a class.
* This class abstract. Instances of this class can only be created
* as {@link Field} or {@link Method}.
* @author Oliver Frank
*/
public abstract class Member implements IMember {
/** Map of globally unique Ids by keys that are constructed from the resolved target member. */
private static Map<String, Integer> idMap = new HashMap<String, Integer>();
private static int currentId = 1; // distinguish from uninitialized 0 (for debugging purposes)
private String name;
private String signature;
private boolean isStatic;
private int accessFlags;
public Member(String name, String signature) {
this.name = name;
this.signature = signature;
}
public Member(String name, String signature, boolean isStatic, int accessFlags) {
this(name, signature);
this.isStatic = isStatic;
this.accessFlags = accessFlags;
}
public boolean isStatic() {
return isStatic;
}
public String getName() {
return name;
}
public String getSignature() {
return signature;
}
public void setStatic(boolean isStatic) {
this.isStatic = isStatic;
}
public boolean isPrivate() {
return (this.accessFlags & Opcodes.ACC_PRIVATE) != 0;
}
public int getAccessFlags() {
return this.accessFlags;
}
/**
* Returns a globally unique id for a given key.
* @param key
* @return
*/
protected int getId(String key) {
Integer id = idMap.get(key);
if (id == null) {
synchronized (idMap) {
idMap.put(key, currentId);
return currentId++;
}
}
return id;
}
public abstract int getGlobalId(IBoundClass clazz);
}