org_aspectj_ajde_core_tests_ShowWeaveMessagesTest_java
org.aspectj.weaver.bcel.BcelTypeMunger
private boolean enforceDecpRule1_abstractMethodsImplemented(BcelClassWeaver weaver, ISourceLocation mungerLoc, LazyClassGen newParentTarget, ResolvedType newParent) {
        if (newParentTarget.isAbstract() || newParentTarget.isInterface()) {
            return true;
        }
        boolean ruleCheckingSucceeded = true;
        List<ResolvedMember> newParentMethods = newParent.getMethodsWithoutIterator(false, true, false);
        for (ResolvedMember newParentMethod : newParentMethods) {
            String newParentMethodName = newParentMethod.getName();
            if (!newParentMethod.isAbstract() || newParentMethodName.startsWith("ajc$interField")) continue;
            ResolvedMember discoveredImpl = null;
            List<ResolvedMember> targetMethods = newParentTarget.getType().getMethodsWithoutIterator(false, true, false);
            for (ResolvedMember targetMethod : targetMethods) {
                if (targetMethod.isAbstract() || !targetMethod.getName().equals(newParentMethodName)) continue;
                String newParentMethodSig = newParentMethod.getParameterSignature();
                String targetMethodSignature = targetMethod.getParameterSignature();
                if (targetMethodSignature.equals(newParentMethodSig)) {
                    discoveredImpl = targetMethod;
                } else if (targetMethod.hasBackingGenericMember() && targetMethod.getBackingGenericMember().getParameterSignature().equals(newParentMethodSig)) {
                    discoveredImpl = targetMethod;
                } else if (newParentMethod.hasBackingGenericMember()) {
                    UnresolvedType[] targetMethodGenericParameterTypes;
                    if (newParentMethod.getBackingGenericMember().getParameterSignature().equals(targetMethodSignature)) {
                        discoveredImpl = targetMethod;
                    } else if (targetMethod instanceof BcelMethod && (targetMethodGenericParameterTypes = targetMethod.getGenericParameterTypes()) != null) {
                        StringBuilder b = new StringBuilder("(");
                        for (UnresolvedType p : targetMethodGenericParameterTypes) {
                            b.append(p.getSignature());
                        }
                        b.append(')');
                        if (b.toString().equals(newParentMethodSig)) {
                            discoveredImpl = targetMethod;
                        }
                    }
                }
                if (discoveredImpl == null) continue;
                break;
            }
            if (discoveredImpl != null) continue;
            boolean satisfiedByITD = false;
            for (ConcreteTypeMunger m : newParentTarget.getType().getInterTypeMungersIncludingSupers()) {
                if (m.getMunger() != null && m.getMunger().getKind() == ResolvedTypeMunger.Method) {
                    ResolvedMember sig = m.getSignature();
                    if (Modifier.isAbstract(sig.getModifiers())) continue;
                    if (m.isTargetTypeParameterized()) {
                        ReferenceType genericOnType = this.getWorld().resolve(sig.getDeclaringType()).getGenericType();
                        ResolvedType actualOccurrence = newParent.discoverActualOccurrenceOfTypeInHierarchy(genericOnType);
                        if (actualOccurrence == null) {
                            actualOccurrence = newParentTarget.getType().discoverActualOccurrenceOfTypeInHierarchy(genericOnType);
                        }
                        m = m.parameterizedFor(actualOccurrence);
                        sig = m.getSignature();
                    }
                    if (!ResolvedType.matches(AjcMemberMaker.interMethod(sig, m.getAspectType(), sig.getDeclaringType().resolve(weaver.getWorld()).isInterface()), newParentMethod)) continue;
                    satisfiedByITD = true;
                    continue;
                }
                if (m.getMunger() == null || m.getMunger().getKind() != ResolvedTypeMunger.MethodDelegate2) continue;
                satisfiedByITD = true;
            }
            if (satisfiedByITD) continue;
            this.error(weaver, "The type " + newParentTarget.getName() + " must implement the inherited abstract method " + newParentMethod.getDeclaringType() + "." + newParentMethodName + newParentMethod.getParameterSignature(), newParentTarget.getType().getSourceLocation(), new ISourceLocation[]{newParentMethod.getSourceLocation(), mungerLoc});
            ruleCheckingSucceeded = false;
        }
        return ruleCheckingSucceeded;
    }
 -> java.util.Arrays.asList(java.lang.Object[]): java.util.List -> java.util.List.addAll(java.util.Collection): boolean -> java.lang.reflect.Modifier.isInterface(int): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.ref.WeakReference.get(): java.lang.Object -> java.util.Arrays.asList(java.lang.Object[]): java.util.List -> java.util.List.addAll(java.util.Collection): boolean -> java.lang.reflect.Modifier.isInterface(int): boolean -> java.lang.String.equals(java.lang.Object): boolean -> java.lang.ref.WeakReference.get(): java.lang.Object -> java.lang.ref.WeakReference.get(): java.lang.Object -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object -> java.lang.reflect.Modifier.isAbstract(int): boolean -> java.util.Iterator.hasNext(): boolean
 [CALL] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [CALL] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [EXIT] -> java.util.Arrays.asList(java.lang.Object[]): java.util.List -> java.util.List.addAll(java.util.Collection): boolean [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] -> java.lang.reflect.Modifier.isInterface(int): boolean [EXIT] [CALL] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] -> java.lang.ref.WeakReference.get(): java.lang.Object [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [CALL] [EXIT] [CALL] [CALL] [EXIT] [EXIT] [EXIT] -> java.util.Arrays.asList(java.lang.Object[]): java.util.List -> java.util.List.addAll(java.util.Collection): boolean [CALL] [CALL] [CALL] [EXIT] [CALL] [EXIT] [EXIT] -> java.lang.reflect.Modifier.isInterface(int): boolean [EXIT] [CALL] [CALL] -> java.lang.String.equals(java.lang.Object): boolean [EXIT] [EXIT] [CALL] -> java.lang.ref.WeakReference.get(): java.lang.Object [EXIT] [EXIT] [CALL] -> java.lang.ref.WeakReference.get(): java.lang.Object [EXIT] [EXIT] [EXIT] -> java.util.List.iterator(): java.util.Iterator -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean -> java.util.Iterator.next(): java.lang.Object [CALL] [EXIT] [CALL] -> java.lang.reflect.Modifier.isAbstract(int): boolean [EXIT] -> java.util.Iterator.hasNext(): boolean [EXIT]