org.springsource.loaded.AbstractMember Maven / Gradle / Ivy
/*
* Copyright 2010-2012 VMware and contributors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springsource.loaded;
import java.lang.reflect.Modifier;
/**
* Simple implementation of Member which could represent a method, field or constructor.
*
* @author Andy Clement
* @since 0.5.0
*/
public abstract class AbstractMember implements Constants {
protected final int modifiers;
protected final String name;
protected final String descriptor; // this is the erased descriptor. There is no generic descriptor.
// Members have a well known id within their type - ids are unique per kind of member (methods/fields/constructors)
protected int id = -1;
// For generic methods, contains generic signature
protected final String signature;
private final boolean isPrivate; // gets asked a lot so made into a flag
protected AbstractMember(int modifiers, String name, String descriptor, String signature) {
this.modifiers = modifiers;
this.name = name;
this.descriptor = descriptor;
this.signature = signature;
this.isPrivate = Modifier.isPrivate(modifiers);
}
/**
* @return the name of the member
*/
public final String getName() {
return name;
}
/**
* @return the member descriptor. methods/constructors: "()Ljava/lang/String;" fields: "Ljava/lang/String;"
*/
public final String getDescriptor() {
return descriptor;
}
/**
* @return the generics related signature. May be null if this method is non-generic.
*/
public String getGenericSignature() {
return signature;
}
/**
* @return the modifiers of the member
*/
public final int getModifiers() {
return modifiers;
}
/**
* @return the allocated ID for this member
*/
public final int getId() {
if (id == -1) {
throw new IllegalStateException("id not yet allocated");
}
return id;
}
/**
* @param id the id number to assign to this member for later quick reference.
*/
public final void setId(int id) {
this.id = id;
}
// helpers
public final boolean isStatic() {
return Modifier.isStatic(getModifiers());
}
public final boolean isFinal() {
return Modifier.isFinal(getModifiers());
}
public final boolean isPrivate() {
return isPrivate;
}
public final boolean isProtected() {
return Modifier.isProtected(getModifiers());
}
public final boolean isPublic() {
return Modifier.isPublic(getModifiers());
}
public boolean isPrivateOrStaticOrFinal() {
return (modifiers & ACC_PRIVATE_STATIC_FINAL) != 0;
}
}