| // TARGET_BACKEND: JVM |
| // IGNORE_BACKEND_K1: ANY |
| // ^KT-63431 CharBufferXAllInherited.create().get(0) is resolved incorrectly in K1 |
| |
| // FILE: X.java |
| public interface X { |
| char get(int index); |
| } |
| |
| // FILE: CharBuffer.java |
| public abstract class CharBuffer implements CharSequence { |
| public static CharBuffer create() { |
| return new CharBuffer() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| @Override public CharSequence subSequence(int start, int end) { return null; } |
| @Override public int length() { return 0; } |
| }; |
| } |
| public abstract char charAt(int index); |
| public abstract char get(int index); |
| } |
| |
| // FILE: CharBufferX.java |
| public abstract class CharBufferX implements CharSequence, X { |
| public static CharBufferX create() { |
| return new CharBufferX() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| @Override public CharSequence subSequence(int start, int end) { return null; } |
| @Override public int length() { return 0; } |
| }; |
| } |
| public abstract char charAt(int index); |
| public abstract char get(int index); |
| } |
| |
| // FILE: NonCharSequenceBuffer.java |
| public abstract class NonCharSequenceBuffer implements X { |
| public static NonCharSequenceBuffer create() { |
| return new NonCharSequenceBuffer() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| }; |
| } |
| public abstract char charAt(int index); |
| public abstract char get(int index); |
| } |
| |
| // FILE: CharBufferCharAtInherited.java |
| public abstract class CharBufferCharAtInherited implements CharSequence { |
| public static CharBufferCharAtInherited create() { |
| return new CharBufferCharAtInherited() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| @Override public CharSequence subSequence(int start, int end) { return null; } |
| @Override public int length() { return 0; } |
| }; |
| } |
| public abstract char get(int index); |
| } |
| |
| // FILE: CharBufferXAllInherited.java |
| public abstract class CharBufferXAllInherited implements CharSequence, X { |
| public static CharBufferXAllInherited create() { |
| return new CharBufferXAllInherited() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| @Override public CharSequence subSequence(int start, int end) { return null; } |
| @Override public int length() { return 0; } |
| }; |
| } |
| } |
| |
| // FILE: Y.java |
| public abstract class Y { |
| protected abstract char get(int index); |
| } |
| |
| // FILE: CharBufferXYAllInherited.java |
| public abstract class CharBufferXYAllInherited extends Y implements CharSequence, X { |
| public static CharBufferXYAllInherited create() { |
| return new CharBufferXYAllInherited() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| @Override public CharSequence subSequence(int start, int end) { return null; } |
| @Override public int length() { return 0; } |
| }; |
| } |
| } |
| |
| // FILE: CharAt.java |
| public interface CharAt { |
| char charAt(int index); |
| } |
| |
| // FILE: CharBufferXYCharAt.java |
| public abstract class CharBufferXYCharAt extends Y implements CharSequence, X, CharAt { |
| public static CharBufferXYCharAt create() { |
| return new CharBufferXYCharAt() { |
| @Override public char charAt(int index) { return 'c'; } |
| @Override public char get(int index) { return 'g'; } |
| @Override public CharSequence subSequence(int start, int end) { return null; } |
| @Override public int length() { return 0; } |
| }; |
| } |
| } |
| |
| // FILE: box.kt |
| |
| fun box(): String { |
| if (CharBuffer.create().get(0) != 'g') return "FAIL 1" |
| if ((CharBuffer.create() as CharSequence).get(0) != 'c') return "FAIL 2" |
| |
| if (CharBufferX.create().get(0) != 'g') return "FAIL 3" |
| if ((CharBufferX.create() as CharSequence).get(0) != 'c') return "FAIL 4" |
| if ((CharBufferX.create() as X).get(0) != 'g') return "FAIL 5" |
| |
| if (NonCharSequenceBuffer.create().charAt(0) != 'c') return "FAIL 6" |
| if (NonCharSequenceBuffer.create().get(0) != 'g') return "FAIL 7" |
| if ((NonCharSequenceBuffer.create() as X).get(0) != 'g') return "FAIL 8" |
| |
| if (CharBufferCharAtInherited.create().get(0) != 'c') return "FAIL 9" |
| if ((CharBufferCharAtInherited.create() as CharSequence).get(0) != 'c') return "FAIL 10" |
| |
| if (CharBufferXAllInherited.create().get(0) != 'g') return "FAIL 11" |
| if ((CharBufferXAllInherited.create() as CharSequence).get(0) != 'c') return "FAIL 12" |
| if ((CharBufferXAllInherited.create() as X).get(0) != 'g') return "FAIL 13" |
| |
| if (CharBufferXYAllInherited.create().get(0) != 'g') return "FAIL 14" |
| if ((CharBufferXYAllInherited.create() as CharSequence).get(0) != 'c') return "FAIL 15" |
| if ((CharBufferXYAllInherited.create() as X).get(0) != 'g') return "FAIL 16" |
| if ((CharBufferXYAllInherited.create() as Y).get(0) != 'g') return "FAIL 17" |
| |
| if (CharBufferXYCharAt.create().get(0) != 'g') return "FAIL 18" |
| if ((CharBufferXYCharAt.create() as CharSequence).get(0) != 'c') return "FAIL 19" |
| if ((CharBufferXYCharAt.create() as X).get(0) != 'g') return "FAIL 20" |
| if ((CharBufferXYCharAt.create() as Y).get(0) != 'g') return "FAIL 21" |
| if ((CharBufferXYCharAt.create() as CharAt).charAt(0) != 'c') return "FAIL 22" |
| |
| return "OK" |
| } |