fix for KT-1515 wrong loading of annotations
This commit is contained in:
@@ -81,7 +81,8 @@ public abstract class AnnotationCodegen {
|
|||||||
CompileTimeConstant<?> compileTimeConstant = bindingContext.get(BindingContext.COMPILE_TIME_VALUE, valueArguments.get(0));
|
CompileTimeConstant<?> compileTimeConstant = bindingContext.get(BindingContext.COMPILE_TIME_VALUE, valueArguments.get(0));
|
||||||
assert compileTimeConstant != null;
|
assert compileTimeConstant != null;
|
||||||
|
|
||||||
annotationVisitor.visit(entry.getKey().getName(), compileTimeConstant.getValue());
|
Object value = compileTimeConstant.getValue();
|
||||||
|
annotationVisitor.visit(entry.getKey().getName(), value);
|
||||||
}
|
}
|
||||||
|
|
||||||
annotationVisitor.visitEnd();
|
annotationVisitor.visitEnd();
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ public class IntrinsicMethods {
|
|||||||
myProject = project;
|
myProject = project;
|
||||||
myStdLib = stdlib;
|
myStdLib = stdlib;
|
||||||
|
|
||||||
namedMethods.put("\"kotlin.javaClass.function\"", new JavaClassFunction());
|
namedMethods.put("kotlin.javaClass.function", new JavaClassFunction());
|
||||||
namedMethods.put("\"kotlin.javaClass.property\"", new JavaClassProperty());
|
namedMethods.put("kotlin.javaClass.property", new JavaClassProperty());
|
||||||
|
|
||||||
List<String> primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList();
|
List<String> primitiveCastMethods = OperatorConventions.NUMBER_CONVERSIONS.asList();
|
||||||
for (String method : primitiveCastMethods) {
|
for (String method : primitiveCastMethods) {
|
||||||
@@ -246,7 +246,10 @@ public class IntrinsicMethods {
|
|||||||
if (annotations != null) {
|
if (annotations != null) {
|
||||||
for (AnnotationDescriptor annotation : annotations) {
|
for (AnnotationDescriptor annotation : annotations) {
|
||||||
if("Intrinsic".equals(annotation.getType().getConstructor().getDeclarationDescriptor().getName())) {
|
if("Intrinsic".equals(annotation.getType().getConstructor().getDeclarationDescriptor().getName())) {
|
||||||
intrinsicMethod = namedMethods.get(annotation.getValueArguments().get(0).getValue());
|
Object value = annotation.getValueArguments().get(0).getValue();
|
||||||
|
intrinsicMethod = namedMethods.get(value);
|
||||||
|
if(intrinsicMethod != null)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-6
@@ -1522,13 +1522,34 @@ public class JavaDescriptorResolver {
|
|||||||
}
|
}
|
||||||
annotation.setAnnotationType(clazz.getDefaultType());
|
annotation.setAnnotationType(clazz.getDefaultType());
|
||||||
ArrayList<CompileTimeConstant<?>> valueArguments = new ArrayList<CompileTimeConstant<?>>();
|
ArrayList<CompileTimeConstant<?>> valueArguments = new ArrayList<CompileTimeConstant<?>>();
|
||||||
if("jet.runtime.Intrinsic".equals(psiAnnotation.getQualifiedName())) {
|
|
||||||
// temporary hack
|
PsiAnnotationParameterList parameterList = psiAnnotation.getParameterList();
|
||||||
valueArguments.add(new StringValue(psiAnnotation.findAttributeValue("value").getText()));
|
for (PsiNameValuePair psiNameValuePair : parameterList.getAttributes()) {
|
||||||
annotation.setValueArguments(valueArguments); // TODO
|
PsiAnnotationMemberValue value = psiNameValuePair.getValue();
|
||||||
|
// todo
|
||||||
|
assert value instanceof PsiLiteralExpression;
|
||||||
|
Object literalValue = ((PsiLiteralExpression) value).getValue();
|
||||||
|
if(literalValue instanceof String)
|
||||||
|
valueArguments.add(new StringValue((String) literalValue));
|
||||||
|
else if(literalValue instanceof Byte)
|
||||||
|
valueArguments.add(new ByteValue((Byte) literalValue));
|
||||||
|
else if(literalValue instanceof Short)
|
||||||
|
valueArguments.add(new ShortValue((Short) literalValue));
|
||||||
|
else if(literalValue instanceof Character)
|
||||||
|
valueArguments.add(new CharValue((Character) literalValue));
|
||||||
|
else if(literalValue instanceof Integer)
|
||||||
|
valueArguments.add(new IntValue((Integer) literalValue));
|
||||||
|
else if(literalValue instanceof Long)
|
||||||
|
valueArguments.add(new LongValue((Long) literalValue));
|
||||||
|
else if(literalValue instanceof Float)
|
||||||
|
valueArguments.add(new FloatValue((Float) literalValue));
|
||||||
|
else if(literalValue instanceof Double)
|
||||||
|
valueArguments.add(new DoubleValue((Double) literalValue));
|
||||||
|
else if(literalValue == null)
|
||||||
|
valueArguments.add(NullValue.NULL);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
annotation.setValueArguments(valueArguments); // TODO
|
annotation.setValueArguments(valueArguments); // TODO
|
||||||
return annotation;
|
return annotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+3
@@ -27,6 +27,9 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
*/
|
*/
|
||||||
public class PsiAnnotationUtils {
|
public class PsiAnnotationUtils {
|
||||||
|
|
||||||
|
private PsiAnnotationUtils() {
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static String getStringAttribute(@Nullable PsiAnnotation annotation, @NotNull String field, @NotNull String defaultValue) {
|
public static String getStringAttribute(@Nullable PsiAnnotation annotation, @NotNull String field, @NotNull String defaultValue) {
|
||||||
return getAttribute(annotation, field, defaultValue);
|
return getAttribute(annotation, field, defaultValue);
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
fun box(): String {
|
||||||
|
val c = javaClass<Runnable>()
|
||||||
|
return if(c.getName().sure() == "java.lang.Runnable") "OK" else "fail"
|
||||||
|
}
|
||||||
@@ -124,4 +124,8 @@ public class StdlibTest extends CodegenTestCase {
|
|||||||
public void testKt1568() throws Exception {
|
public void testKt1568() throws Exception {
|
||||||
blackBoxFile("regressions/kt1568.kt");
|
blackBoxFile("regressions/kt1568.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testKt1515() throws Exception {
|
||||||
|
blackBoxFile("regressions/kt1515.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ class C()
|
|||||||
class JavaClassTest() : TestCase() {
|
class JavaClassTest() : TestCase() {
|
||||||
fun testMe () {
|
fun testMe () {
|
||||||
assertEquals("java.util.ArrayList", java.util.ArrayList<Any>().javaClass.getName())
|
assertEquals("java.util.ArrayList", java.util.ArrayList<Any>().javaClass.getName())
|
||||||
// assertEquals("java.util.ArrayList", javaClass<java.util.ArrayList<Any>>().getName())
|
assertEquals("java.util.ArrayList", javaClass<java.util.ArrayList<Any>>().getName())
|
||||||
// assertEquals("testjc.C", javaClass<C>().getName())
|
assertEquals("testjc.C", javaClass<C>().getName())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -17,7 +17,7 @@ class JavaClassTest : TestCase() {
|
|||||||
|
|
||||||
// TODO this function fails!
|
// TODO this function fails!
|
||||||
// see KT-1515
|
// see KT-1515
|
||||||
// loadAsserter()
|
loadAsserter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user