protected ConflictingDefaultOperation createConflictingOperation(JvmOperation operation, IResolvedOperation... conflictingOperations) { return new ConflictingDefaultOperation(operation, type, overrideTester, conflictingOperations); }
for (IResolvedOperation conflictingOp : conflictingDefaultOperation.getConflictingOperations()) { if (conflictingOp.getResolvedDeclarator().isSubtypeOf(operation.getDeclaringType())) { isOverridden = true; conflictingDefaultOperation.getConflictingOperations().add(createResolvedOperation(operation)); return false; resolvedOperation.getConflictingOperations().add(createResolvedOperation(operation)); for (AbstractResolvedOperation conflictingOp : conflictingOperations) { processedOperations.remove(simpleName, conflictingOp); if (conflictingOp.getDeclaration() != resolvedOperation.getDeclaration()) { resolvedOperation.getConflictingOperations().add(conflictingOp); for (AbstractResolvedOperation conflictingOp : conflictingOperations) { processedOperations.remove(simpleName, conflictingOp); resolvedOperation.getConflictingOperations().add(conflictingOp);
&& contributesToConflict(inferredType, (ConflictingDefaultOperation) operation) && !flaggedType) { IResolvedOperation conflictingOperation = ((ConflictingDefaultOperation) operation).getConflictingOperations().get(0);
for (IResolvedOperation conflictingOp : conflictingDefaultOperation.getConflictingOperations()) { if (conflictingOp.getResolvedDeclarator().isSubtypeOf(operation.getDeclaringType())) { isOverridden = true; conflictingDefaultOperation.getConflictingOperations().add(createResolvedOperation(operation)); return false; resolvedOperation.getConflictingOperations().add(createResolvedOperation(operation)); for (AbstractResolvedOperation conflictingOp : conflictingOperations) { processedOperations.remove(simpleName, conflictingOp); if (conflictingOp.getDeclaration() != resolvedOperation.getDeclaration()) { resolvedOperation.getConflictingOperations().add(conflictingOp); for (AbstractResolvedOperation conflictingOp : conflictingOperations) { processedOperations.remove(simpleName, conflictingOp); resolvedOperation.getConflictingOperations().add(conflictingOp);
/** * Determine whether the given type contributes to the conflict caused by the given default interface implementation. */ private boolean contributesToConflict(JvmGenericType rootType, ConflictingDefaultOperation conflictingDefaultOperation) { Set<JvmDeclaredType> involvedInterfaces = Sets.newHashSet(); involvedInterfaces.add(conflictingDefaultOperation.getDeclaration().getDeclaringType()); for (IResolvedOperation conflictingOperation : conflictingDefaultOperation.getConflictingOperations()) { involvedInterfaces.add(conflictingOperation.getDeclaration().getDeclaringType()); } RecursionGuard<JvmDeclaredType> recursionGuard = new RecursionGuard<JvmDeclaredType>(); if (rootType.isInterface()) { int contributingCount = 0; for (JvmTypeReference typeRef : rootType.getExtendedInterfaces()) { JvmType rawType = typeRef.getType(); if (rawType instanceof JvmDeclaredType && contributesToConflict((JvmDeclaredType) rawType, involvedInterfaces, recursionGuard)) { contributingCount++; } } return contributingCount >= 2; } else { return contributesToConflict(rootType, involvedInterfaces, recursionGuard); } }