@Override public MethodInfo getErasedMethodDefinition() { return _methodInfo.getErasedMethodDefinition(); }
@Override public MethodInfo getErasedMethodDefinition() { if (_declaringType.isCreated()) { return generatedMethod.getErasedMethodDefinition(); } return super.getErasedMethodDefinition(); }
@Override public MethodInfo getErasedMethodDefinition() { if (_erasedMethodDefinition != null) { return _erasedMethodDefinition; } if (_baseMethod != null) { _erasedMethodDefinition = Fences.orderWrites( reflectedOn( _baseMethod.getErasedMethodDefinition(), getReflectedType() ) ); } return super.getErasedMethodDefinition(); }
@Override public MethodInfo getErasedMethodDefinition() { if (_erasedMethodDefinition != null) { return _erasedMethodDefinition; } if (Fences.orderReads(this)._erasedMethodDefinition != null) { return _erasedMethodDefinition; } if (_baseMethod != null) { _erasedMethodDefinition = Fences.orderWrites( reflectedOn( _baseMethod.getErasedMethodDefinition(), getReflectedType() ) ); Fences.orderAccesses(this); } return super.getErasedMethodDefinition(); }
private static MethodBase erase(final MethodBase m) { if (m instanceof MethodInfo) { return ((MethodInfo) m).getErasedMethodDefinition(); } if (!m.getDeclaringType().isGenericType()) { return m; } final Type<?> erasedType = erase(m.getDeclaringType()); final Object rawMethod = ((ConstructorInfo) m).getRawConstructor(); final MemberList<?> members = erasedType.findMembers( MemberType.constructorsOnly(), BindingFlags.AllDeclared, Type.FilterRawMember, rawMethod ); if (!members.isEmpty()) { return (MethodBase) members.get(0); } throw ContractUtils.unreachable(); }
private static MethodBase erase(final MethodBase m) { if (m instanceof MethodInfo) { return ((MethodInfo) m).getErasedMethodDefinition(); } if (!m.getDeclaringType().isGenericType()) { return m; } final Type<?> erasedType = erase(m.getDeclaringType()); final Object rawMethod = ((ConstructorInfo) m).getRawConstructor(); final MemberList<?> members = erasedType.findMembers( MemberType.constructorsOnly(), BindingFlags.AllDeclared, Type.FilterRawMember, rawMethod ); if (!members.isEmpty()) { return (MethodBase) members.get(0); } throw ContractUtils.unreachable(); }
static boolean isBridgeMethodNeeded(final MethodInfo baseMethod, final MethodInfo override) { final MethodInfo erasedBase = baseMethod.getErasedMethodDefinition(); final MethodInfo erasedOverride = override.getErasedMethodDefinition(); final Type<?> baseReturnType = erasedBase.getReturnType().getErasedType(); final Type<?> overrideReturnType = erasedOverride.getReturnType().getErasedType(); if ((baseReturnType == PrimitiveTypes.Void) != (overrideReturnType == PrimitiveTypes.Void)) { throw Error.incompatibleReturnTypes(); } if (!TypeUtils.areEquivalent(overrideReturnType, baseReturnType)) { return true; } final TypeList parameterTypes = (erasedOverride instanceof MethodBuilder) ? ((MethodBuilder) erasedOverride).getParameterTypes().getErasedTypes() : erasedOverride.getParameters().getParameterTypes().getErasedTypes(); final TypeList baseParameters = (erasedBase instanceof MethodBuilder) ? ((MethodBuilder) erasedBase).getParameterTypes().getErasedTypes() : erasedBase.getParameters().getParameterTypes().getErasedTypes(); if (baseParameters.size() != parameterTypes.size()) { throw Error.parameterCountMismatch(); } for (int i = 0, n = parameterTypes.size(); i < n; i++) { final Type<?> t1 = parameterTypes.get(i); final Type<?> t2 = baseParameters.get(i); if (!t1.isEquivalentTo(t2)) { return true; } } return false; }
_erasedMethodDefinition = ((MethodInfo) members.get(0)).getErasedMethodDefinition(); _erasedMethodDefinition = getGenericMethodDefinition().getErasedMethodDefinition();
_erasedMethodDefinition = ((MethodInfo) members.get(0)).getErasedMethodDefinition(); _erasedMethodDefinition = getGenericMethodDefinition().getErasedMethodDefinition();