public abstract class AbstractResolvedOperation extends AbstractResolvedExecutable<JvmOperation> implements IResolvedOperation
JvmOperation
.Modifier | Constructor and Description |
---|---|
protected |
AbstractResolvedOperation(JvmOperation declaration,
LightweightTypeReference contextType) |
Modifier and Type | Method and Description |
---|---|
protected ResolvedOperationInHierarchy |
createResolvedOperationInHierarchy(JvmOperation candidate,
IOverrideCheckResult checkResult) |
protected abstract BottomResolvedOperation |
getBottom() |
java.util.List<LightweightTypeReference> |
getIllegallyDeclaredExceptions()
Returns the list of exceptions that are declared in this operation
but do not match the super implementation.
|
java.util.List<JvmOperation> |
getOverriddenAndImplementedMethodCandidates()
Returns the inherited methods with the same simple name as this method.
|
java.util.List<IResolvedOperation> |
getOverriddenAndImplementedMethods()
Returns overridden and implemented methods for this method.
|
IResolvedOperation |
getOverriddenMethod()
Returns the overridden method, if any.
|
protected OverrideTester |
getOverrideTester() |
LightweightTypeReference |
getResolvedReturnType()
Returns the resolved return types in the current context.
|
java.util.List<LightweightTypeReference> |
getResolvedTypeParameterConstraints(int idx)
Returns the list of resolved constraints for the given type parameter index.
|
java.util.List<JvmTypeParameter> |
getResolvedTypeParameters()
Returns the resolved type parameters for a given operation.
|
protected JvmType |
getThrowableType(java.lang.Class<? extends java.lang.Throwable> type) |
protected boolean |
isIllegallyDeclaredException(LightweightTypeReference exception,
java.util.List<IResolvedOperation> overriddenAndImplemented) |
IOverrideCheckResult |
isOverridingOrImplementing(JvmOperation operation)
Transitively check whether this operation if implementing or overriding the given operation.
|
protected boolean |
isRawTypeInheritance() |
protected boolean |
isResolvedTypeParameter(JvmTypeParameter typeParameter)
Allows to refuse a certain type parameter to be substituted.
|
getResolvedErasureSignature, getResolvedExceptions, getResolvedParameterTypes, getResolvedSignature, getSimpleSignature, getTypeParameters, toString
computeContextTypeParameterMapping, getContextType, getContextTypeParameterMapping, getDeclaration, getResolvedDeclarator, getResolvedReference, getResolvedReferences, getSubstitutor, isResolvedTypeParameter
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
getAsBottom, getDeclaration, getOverrideCheckResult, isBottomInContext
getResolvedExceptions, getResolvedParameterTypes, getTypeParameters
getContextType, getResolvedDeclarator, getResolvedErasureSignature, getResolvedSignature, getSimpleSignature
protected AbstractResolvedOperation(JvmOperation declaration, LightweightTypeReference contextType)
public java.util.List<IResolvedOperation> getOverriddenAndImplementedMethods()
IResolvedOperation
interface I { void method() } abstract class C { abstract void method() } class D extends C implements I { void method() {} }The resolved representation of
D#method
will return a list with two elements:
C#method, I#method
. The first element in the list is always the overridden implementation or the
inherited abstract method from the superclass, if any. Thus the list is sorted. The elements in the list are not
transitively collected.
interface I1 { void method() } interface I2 { void method() } interface I3 extends I1, I2 { } interface I4 { void method() } interface I5 extends I4 { void method() } class C implements I5, I3 { void method() }The list of resolved inherited methods for
C#method
will be
I1#method, I2#method, I5#method
thus it will not contain and of I4#method
.
Only methods that would be successfully checked for IResolvedOperation.isOverridingOrImplementing(JvmOperation)
will be
returned.getOverriddenAndImplementedMethods
in interface IResolvedOperation
IResolvedOperation.getOverriddenAndImplementedMethodCandidates()
public IResolvedOperation getOverriddenMethod()
IResolvedOperation
overridden and implemented methods
, and
the candidate is not abstract.
It may happen that two methods are overridden, e.g.
class A<T> { void m(T t) { } void m(String s) { } } class B extends A<String> { @Override void m(String s) { } }In that case, the first match is returned thus it depends on the order in the super type.
getOverriddenMethod
in interface IResolvedOperation
null
if none.IResolvedOperation.getOverriddenAndImplementedMethods()
public java.util.List<LightweightTypeReference> getIllegallyDeclaredExceptions()
IResolvedOperation
getIllegallyDeclaredExceptions
in interface IResolvedOperation
protected JvmType getThrowableType(java.lang.Class<? extends java.lang.Throwable> type)
protected boolean isIllegallyDeclaredException(LightweightTypeReference exception, java.util.List<IResolvedOperation> overriddenAndImplemented)
protected ResolvedOperationInHierarchy createResolvedOperationInHierarchy(JvmOperation candidate, IOverrideCheckResult checkResult)
public java.util.List<JvmOperation> getOverriddenAndImplementedMethodCandidates()
IResolvedOperation
getOverriddenAndImplementedMethodCandidates
in interface IResolvedOperation
IResolvedOperation.getOverriddenAndImplementedMethods()
,
IResolvedOperation.isOverridingOrImplementing(JvmOperation)
public IOverrideCheckResult isOverridingOrImplementing(JvmOperation operation)
IResolvedOperation
isOverridingOrImplementing
in interface IResolvedOperation
public java.util.List<JvmTypeParameter> getResolvedTypeParameters()
IResolvedOperation
interface I { <T extends CharSequence> T method() } class C implements I { public <V extends CharSequence> V method() { return null; } }If the initially requested method was
C#method
and the current handle points to
I#method
, the type parameters will contain V
instead of T
.
The list may contain a different number of type parameters than the actual operation.
interface I { <T> T method() } class C implements I { public String method() { return null; } }The method
I#method
in the context of class C
will yield an empty list of resolved type
parameters even though it declares
T
.getResolvedTypeParameters
in interface IResolvedOperation
public java.util.List<LightweightTypeReference> getResolvedTypeParameterConstraints(int idx) throws java.lang.IndexOutOfBoundsException
IResolvedOperation
interface I<T> { <V extends T> V method(Class<? extends V> c); } abstract class C implements I<CharSequence> { }The resolved constraint of
I#method<V>
in the context of class C
is
CharSequence
.getResolvedTypeParameterConstraints
in interface IResolvedOperation
idx
- the index of the considered type parameter.idx
.java.lang.IndexOutOfBoundsException
- if the idx does not match the resolved type parameter list.IResolvedOperation.getResolvedTypeParameterConstraints(int)
public LightweightTypeReference getResolvedReturnType()
IResolvedOperation
getResolvedReturnType
in interface IResolvedOperation
IResolvedFeature.getContextType()
,
IResolvedOperation.getResolvedTypeParameters()
protected boolean isRawTypeInheritance()
isRawTypeInheritance
in class AbstractResolvedFeature<JvmOperation>
protected boolean isResolvedTypeParameter(JvmTypeParameter typeParameter)
AbstractResolvedFeature
isResolvedTypeParameter
in class AbstractResolvedFeature<JvmOperation>
typeParameter
- the type parameter that should be substituted.false
if the parameter may be substituted. true
if it should be preserved.protected abstract BottomResolvedOperation getBottom()
protected OverrideTester getOverrideTester()