protected boolean isOverridden(JvmOperation operation, Collection<AbstractResolvedOperation> processedOperations) { for(AbstractResolvedOperation processed: processedOperations) { if (overrideTester.isSubsignature(processed, operation, false).isOverridingOrImplementing()) { return true; } } return false; }
public ResolvedFeatures(LightweightTypeReference type) { this(type, new OverrideTester()); }
case TYPE_PARAMETER_MISMATCH: case PARAMETER_TYPE_MISMATCH: { if (isSameErasure(overriding, overriddenInHierarchy)) { result.add(OverrideCheckDetails.SAME_ERASURE); if (isConflictingDefaultImplementation(overriding, overriddenInHierarchy)) { result.add(OverrideCheckDetails.DEFAULT_IMPL_CONFLICT); if (!overriding.getResolvedParameterTypes().isEmpty() && !isMatchingParameterList(overriding, overriddenInHierarchy)) { result.add(OverrideCheckDetails.PARAMETER_TYPE_MISMATCH); return result; if (!isMatchingTypeParameters(overriding, overriddenInHierarchy)) { result.add(OverrideCheckDetails.TYPE_PARAMETER_MISMATCH); return result; case REDECLARATION: case OVERRIDE: { addAdditionalDetails(overriding, overriddenInHierarchy, result); return result;
protected void addAdditionalDetails(AbstractResolvedOperation overriding, AbstractResolvedOperation overridden, EnumSet<OverrideCheckDetails> result) { addReturnTypeDetails(overriding, overridden, result); addExceptionDetails(overriding, overridden, result); JvmOperation overridingDecl = overriding.getDeclaration(); JvmOperation overriddenDecl = overridden.getDeclaration(); if (isMorePrivateThan(overridingDecl.getVisibility(), overriddenDecl.getVisibility())) { result.add(OverrideCheckDetails.REDUCED_VISIBILITY); } if (overriddenDecl.isFinal()) { result.add(OverrideCheckDetails.IS_FINAL); } if (overridingDecl.isVarArgs() != overriddenDecl.isVarArgs()) { result.add(OverrideCheckDetails.VAR_ARG_MISMATCH); } if (isConflictingDefaultImplementation(overriding, overridden)) { result.add(OverrideCheckDetails.DEFAULT_IMPL_CONFLICT); } if (!overridingDecl.isSynchronized() && overriddenDecl.isSynchronized()) { result.add(OverrideCheckDetails.SYNCHRONIZED_MISMATCH); } }
if (parameterCount != 0 && !isMatchingParameterList(overriding, overriddenInHierarchy)) { return new LazyOverrideCheckResult(overriding, overridden, OverrideCheckDetails.PARAMETER_TYPE_MISMATCH); if (!isMatchingTypeParameters(overriding, overriddenInHierarchy)) return new LazyOverrideCheckResult(overriding, overridden, OverrideCheckDetails.TYPE_PARAMETER_MISMATCH); return new LazyOverrideCheckResult(overriding, overridden, getPrimaryValidDetail(overriding, overridden));
protected EnumSet<OverrideCheckDetails> getComputedDetails() { return thisOperation.getOverrideTester().getAllDetails(thisOperation, givenOperation, primaryDetail); }
protected boolean isConflictingDefaultImplementation(AbstractResolvedOperation overriding, AbstractResolvedOperation overridden) { JvmOperation ridingDecl = overriding.getDeclaration(); JvmOperation riddenDecl = overridden.getDeclaration(); if (isInterface(ridingDecl.getDeclaringType()) && isInterface(riddenDecl.getDeclaringType()) && (!ridingDecl.isAbstract() || !riddenDecl.isAbstract())) { LightweightTypeReference ridingTypeRef = overriding.getResolvedDeclarator(); LightweightTypeReference riddenTypeRef = overridden.getResolvedDeclarator(); return !riddenTypeRef.isAssignableFrom(ridingTypeRef); } return false; }
@Override public IOverrideCheckResult isOverridingOrImplementing(final JvmOperation operation) { return getOverrideTester().isSubsignature(this, operation, true); }
protected RawResolvedFeatures(JvmDeclaredType type, CommonTypeComputationServices services) { this(createTypeReference(type, services), new OverrideTester()); }
@Override public List<IResolvedOperation> getOverriddenAndImplementedMethods() { if (validOverrides != null) return validOverrides; List<JvmOperation> candidates = getOverriddenAndImplementedMethodCandidates(); if (candidates.isEmpty()) return Collections.emptyList(); List<IResolvedOperation> result = Lists.newArrayListWithCapacity(candidates.size()); for(JvmOperation candidate: candidates) { // we know that our candidates are computed from the hierarchy // thus there is no need to check the declarator for inheritance IOverrideCheckResult checkResult = getOverrideTester().isSubsignature(this, candidate, false); if (checkResult.isOverridingOrImplementing()) { result.add(createResolvedOperationInHierarchy(candidate, checkResult)); } } return validOverrides = Collections.unmodifiableList(result); }
AbstractResolvedOperation candidate = iterator.next(); OverrideTester overrideTester = _getOverrideTester(candidate); IOverrideCheckResult checkResult = overrideTester.isSubsignature(candidate, operation, false); if (checkResult.getDetails().contains(OverrideCheckDetails.DEFAULT_IMPL_CONFLICT)) { if (!isSuperClassBranch && superClassBranchOperations.containsKey(simpleName)) {
for (AbstractResolvedOperation candidate : processedOperations.get(simpleName)) { OverrideTester overrideTester = candidate.getOverrideTester(); IOverrideCheckResult checkResult = overrideTester.isSubsignature(candidate, operation, false); if (checkResult.getDetails().contains(OverrideCheckDetails.DEFAULT_IMPL_CONFLICT)) {