Create proper annotation descriptors when annotation arguments don't match
This commit is contained in:
@@ -118,7 +118,7 @@ public class AnnotationResolver {
|
|||||||
) {
|
) {
|
||||||
TemporaryBindingTrace temporaryBindingTrace = new TemporaryBindingTrace(trace, "Trace for resolve annotation type");
|
TemporaryBindingTrace temporaryBindingTrace = new TemporaryBindingTrace(trace, "Trace for resolve annotation type");
|
||||||
OverloadResolutionResults<FunctionDescriptor> results = resolveAnnotationCall(entryElement, scope, temporaryBindingTrace);
|
OverloadResolutionResults<FunctionDescriptor> results = resolveAnnotationCall(entryElement, scope, temporaryBindingTrace);
|
||||||
if (results.isSuccess()) {
|
if (results.isSingleResult()) {
|
||||||
FunctionDescriptor descriptor = results.getResultingDescriptor();
|
FunctionDescriptor descriptor = results.getResultingDescriptor();
|
||||||
if (!ErrorUtils.isError(descriptor)) {
|
if (!ErrorUtils.isError(descriptor)) {
|
||||||
if (descriptor instanceof ConstructorDescriptor) {
|
if (descriptor instanceof ConstructorDescriptor) {
|
||||||
@@ -136,7 +136,9 @@ public class AnnotationResolver {
|
|||||||
annotationDescriptor.setAnnotationType(annotationType);
|
annotationDescriptor.setAnnotationType(annotationType);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
annotationDescriptor.setAnnotationType(ErrorUtils.createErrorType("Unresolved annotation type"));
|
JetConstructorCalleeExpression calleeExpression = entryElement.getCalleeExpression();
|
||||||
|
annotationDescriptor.setAnnotationType(ErrorUtils.createErrorType("Unresolved annotation type: " +
|
||||||
|
(calleeExpression == null ? "null" : calleeExpression.getText())));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -176,7 +178,7 @@ public class AnnotationResolver {
|
|||||||
@NotNull BindingTrace trace
|
@NotNull BindingTrace trace
|
||||||
) {
|
) {
|
||||||
OverloadResolutionResults<FunctionDescriptor> results = resolveAnnotationCall(annotationEntry, scope, trace);
|
OverloadResolutionResults<FunctionDescriptor> results = resolveAnnotationCall(annotationEntry, scope, trace);
|
||||||
if (results.isSuccess()) {
|
if (results.isSingleResult()) {
|
||||||
AnnotationDescriptor annotationDescriptor = trace.getBindingContext().get(BindingContext.ANNOTATION, annotationEntry);
|
AnnotationDescriptor annotationDescriptor = trace.getBindingContext().get(BindingContext.ANNOTATION, annotationEntry);
|
||||||
assert annotationDescriptor != null : "Annotation descriptor should be created before resolving arguments for " + annotationEntry.getText();
|
assert annotationDescriptor != null : "Annotation descriptor should be created before resolving arguments for " + annotationEntry.getText();
|
||||||
resolveAnnotationArgument(annotationDescriptor, results.getResultingCall(), trace);
|
resolveAnnotationArgument(annotationDescriptor, results.getResultingCall(), trace);
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package test
|
package test
|
||||||
|
|
||||||
[ERROR : Unresolved annotation type]() internal val SomeObject: test.SomeObject
|
[ERROR : Unresolved annotation type: BadAnnotation]() internal val SomeObject: test.SomeObject
|
||||||
internal val some: test.SomeObject
|
internal val some: test.SomeObject
|
||||||
|
|
||||||
[ERROR : Unresolved annotation type]() internal object SomeObject {
|
[ERROR : Unresolved annotation type: BadAnnotation]() internal object SomeObject {
|
||||||
/*primary*/ private constructor SomeObject()
|
/*primary*/ private constructor SomeObject()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
BadAnnotation(1)
|
||||||
|
object SomeObject
|
||||||
|
|
||||||
|
val some = SomeObject
|
||||||
|
|
||||||
|
annotation class BadAnnotation(s: String)
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
package test
|
||||||
|
|
||||||
|
test.BadAnnotation(s = 1.toInt(): jet.Int) internal val SomeObject: test.SomeObject
|
||||||
|
internal val some: test.SomeObject
|
||||||
|
|
||||||
|
internal final annotation class BadAnnotation : jet.Annotation {
|
||||||
|
/*primary*/ public constructor BadAnnotation(/*0*/ s: jet.String)
|
||||||
|
}
|
||||||
|
|
||||||
|
test.BadAnnotation(s = 1.toInt(): jet.Int) internal object SomeObject {
|
||||||
|
/*primary*/ private constructor SomeObject()
|
||||||
|
}
|
||||||
+5
@@ -2409,6 +2409,11 @@ public class LazyResolveNamespaceComparingTestGenerated extends AbstractLazyReso
|
|||||||
doTestCheckingPrimaryConstructors("compiler/testData/lazyResolve/namespaceComparator/varargIterator.kt");
|
doTestCheckingPrimaryConstructors("compiler/testData/lazyResolve/namespaceComparator/varargIterator.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("WrongAnnotationArgsOnObject.kt")
|
||||||
|
public void testWrongAnnotationArgsOnObject() throws Exception {
|
||||||
|
doTestCheckingPrimaryConstructors("compiler/testData/lazyResolve/namespaceComparator/WrongAnnotationArgsOnObject.kt");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Test suite() {
|
public static Test suite() {
|
||||||
|
|||||||
Reference in New Issue
Block a user