/** * JLS7 15.12.2.5. Choosing the Most Specific Method */ private JavaSymbol selectMostSpecific(JavaSymbol m1, JavaSymbol m2) { // FIXME get rig of null check if (m2.type == null || !m2.isKind(JavaSymbol.MTH)) { return m1; } boolean m1SignatureMoreSpecific = isSignatureMoreSpecific(m1, m2); boolean m2SignatureMoreSpecific = isSignatureMoreSpecific(m2, m1); if (m1SignatureMoreSpecific && m2SignatureMoreSpecific) { return new AmbiguityErrorJavaSymbol(); } else if (m1SignatureMoreSpecific) { return m1; } else if (m2SignatureMoreSpecific) { return m2; } return new AmbiguityErrorJavaSymbol(); }
/** * JLS7 15.12.2.5. Choosing the Most Specific Method */ private JavaSymbol selectMostSpecific(JavaSymbol m1, JavaSymbol m2, List<JavaType> argTypes) { // FIXME get rig of null check if (m2.type == null || !m2.isKind(JavaSymbol.MTH)) { return m1; } boolean m1SignatureMoreSpecific = isSignatureMoreSpecific(m1, m2); boolean m2SignatureMoreSpecific = isSignatureMoreSpecific(m2, m1); if (m1SignatureMoreSpecific && m2SignatureMoreSpecific) { return new AmbiguityErrorJavaSymbol(); } else if (m1SignatureMoreSpecific) { return m1; } else if (m2SignatureMoreSpecific) { return m2; } else { return new AmbiguityErrorJavaSymbol(); } }
m2Substitution = new TypeSubstitution(); boolean m1SignatureMoreSpecific = isSignatureMoreSpecific(m1, m2, argTypes, m1Substitution, m2Substitution); boolean m2SignatureMoreSpecific = isSignatureMoreSpecific(m2, m1, argTypes, m2Substitution, m1Substitution); if (m1SignatureMoreSpecific && m2SignatureMoreSpecific) {
m2Substitution = new TypeSubstitution(); boolean m1SignatureMoreSpecific = isSignatureMoreSpecific(m1, m2, argTypes, m1Substitution, m2Substitution); boolean m2SignatureMoreSpecific = isSignatureMoreSpecific(m2, m1, argTypes, m2Substitution, m1Substitution); if (m1SignatureMoreSpecific && m2SignatureMoreSpecific) {