Remove big chunk of code related to using old annotations
This commit is contained in:
committed by
Alexander Udalov
parent
60619a3507
commit
69295290eb
+7
-16
@@ -28,8 +28,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaCompileTimeConstResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaCompileTimeConstResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassObjectResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSignatureResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSignatureResolver;
|
||||||
@@ -37,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolv
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
|
||||||
@@ -58,8 +57,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
private final JavaClassResolver javaClassResolver;
|
private final JavaClassResolver javaClassResolver;
|
||||||
private final JavaAnnotationResolver javaAnnotationResolver;
|
private final JavaAnnotationResolver javaAnnotationResolver;
|
||||||
private final JavaCompileTimeConstResolver javaCompileTimeConstResolver;
|
private final JavaCompileTimeConstResolver javaCompileTimeConstResolver;
|
||||||
private final JavaClassObjectResolver javaClassObjectResolver;
|
|
||||||
private final JavaSupertypeResolver javaSupertypeResolver;
|
|
||||||
private final JavaFunctionResolver javaFunctionResolver;
|
private final JavaFunctionResolver javaFunctionResolver;
|
||||||
private final JavaValueParameterResolver javaValueParameterResolver;
|
private final JavaValueParameterResolver javaValueParameterResolver;
|
||||||
private final JavaSignatureResolver javaSignatureResolver;
|
private final JavaSignatureResolver javaSignatureResolver;
|
||||||
@@ -67,6 +64,7 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||||
private final ErrorReporter errorReporter;
|
private final ErrorReporter errorReporter;
|
||||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||||
|
private final JavaSupertypeResolver javaSupertypeResolver;
|
||||||
private final JavaConstructorResolver javaConstructorResolver;
|
private final JavaConstructorResolver javaConstructorResolver;
|
||||||
private final JavaInnerClassResolver javaInnerClassResolver;
|
private final JavaInnerClassResolver javaInnerClassResolver;
|
||||||
private final JavaPropertyResolver javaPropertyResolver;
|
private final JavaPropertyResolver javaPropertyResolver;
|
||||||
@@ -88,8 +86,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
this.javaClassResolver = new JavaClassResolver();
|
this.javaClassResolver = new JavaClassResolver();
|
||||||
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
||||||
this.javaCompileTimeConstResolver = new JavaCompileTimeConstResolver();
|
this.javaCompileTimeConstResolver = new JavaCompileTimeConstResolver();
|
||||||
this.javaClassObjectResolver = new JavaClassObjectResolver();
|
|
||||||
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
|
||||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||||
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
||||||
this.javaSignatureResolver = new JavaSignatureResolver();
|
this.javaSignatureResolver = new JavaSignatureResolver();
|
||||||
@@ -97,6 +93,7 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||||
this.errorReporter = new ErrorReporter();
|
this.errorReporter = new ErrorReporter();
|
||||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||||
|
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
||||||
this.javaConstructorResolver = new JavaConstructorResolver();
|
this.javaConstructorResolver = new JavaConstructorResolver();
|
||||||
this.javaInnerClassResolver = new JavaInnerClassResolver();
|
this.javaInnerClassResolver = new JavaInnerClassResolver();
|
||||||
this.javaPropertyResolver = new JavaPropertyResolver();
|
this.javaPropertyResolver = new JavaPropertyResolver();
|
||||||
@@ -122,7 +119,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
||||||
|
|
||||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaClassResolver.setClassObjectResolver(javaClassObjectResolver);
|
|
||||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||||
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
||||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||||
@@ -138,15 +134,6 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
||||||
|
|
||||||
javaClassObjectResolver.setSemanticServices(javaSemanticServices);
|
|
||||||
javaClassObjectResolver.setSupertypesResolver(javaSupertypeResolver);
|
|
||||||
javaClassObjectResolver.setTrace(bindingTrace);
|
|
||||||
|
|
||||||
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
|
||||||
javaSupertypeResolver.setSemanticServices(javaSemanticServices);
|
|
||||||
javaSupertypeResolver.setTrace(bindingTrace);
|
|
||||||
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
|
||||||
|
|
||||||
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaFunctionResolver.setParameterResolver(javaValueParameterResolver);
|
javaFunctionResolver.setParameterResolver(javaValueParameterResolver);
|
||||||
javaFunctionResolver.setSignatureResolver(javaSignatureResolver);
|
javaFunctionResolver.setSignatureResolver(javaSignatureResolver);
|
||||||
@@ -172,6 +159,10 @@ public class InjectorForJavaDescriptorResolver {
|
|||||||
javaNamespaceResolver.setPsiClassFinder(psiClassFinder);
|
javaNamespaceResolver.setPsiClassFinder(psiClassFinder);
|
||||||
javaNamespaceResolver.setTrace(bindingTrace);
|
javaNamespaceResolver.setTrace(bindingTrace);
|
||||||
|
|
||||||
|
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
||||||
|
javaSupertypeResolver.setTrace(bindingTrace);
|
||||||
|
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
||||||
|
|
||||||
javaConstructorResolver.setTrace(bindingTrace);
|
javaConstructorResolver.setTrace(bindingTrace);
|
||||||
javaConstructorResolver.setTypeTransformer(javaTypeTransformer);
|
javaConstructorResolver.setTypeTransformer(javaTypeTransformer);
|
||||||
javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver);
|
javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver);
|
||||||
|
|||||||
+7
-16
@@ -28,8 +28,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaCompileTimeConstResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaCompileTimeConstResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassObjectResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSignatureResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSignatureResolver;
|
||||||
@@ -37,6 +35,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolv
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
|
||||||
@@ -58,8 +57,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
private final JavaClassResolver javaClassResolver;
|
private final JavaClassResolver javaClassResolver;
|
||||||
private final JavaAnnotationResolver javaAnnotationResolver;
|
private final JavaAnnotationResolver javaAnnotationResolver;
|
||||||
private final JavaCompileTimeConstResolver javaCompileTimeConstResolver;
|
private final JavaCompileTimeConstResolver javaCompileTimeConstResolver;
|
||||||
private final JavaClassObjectResolver javaClassObjectResolver;
|
|
||||||
private final JavaSupertypeResolver javaSupertypeResolver;
|
|
||||||
private final JavaFunctionResolver javaFunctionResolver;
|
private final JavaFunctionResolver javaFunctionResolver;
|
||||||
private final JavaValueParameterResolver javaValueParameterResolver;
|
private final JavaValueParameterResolver javaValueParameterResolver;
|
||||||
private final JavaSignatureResolver javaSignatureResolver;
|
private final JavaSignatureResolver javaSignatureResolver;
|
||||||
@@ -67,6 +64,7 @@ public class InjectorForJavaSemanticServices {
|
|||||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||||
private final ErrorReporter errorReporter;
|
private final ErrorReporter errorReporter;
|
||||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||||
|
private final JavaSupertypeResolver javaSupertypeResolver;
|
||||||
private final JavaConstructorResolver javaConstructorResolver;
|
private final JavaConstructorResolver javaConstructorResolver;
|
||||||
private final JavaInnerClassResolver javaInnerClassResolver;
|
private final JavaInnerClassResolver javaInnerClassResolver;
|
||||||
private final JavaPropertyResolver javaPropertyResolver;
|
private final JavaPropertyResolver javaPropertyResolver;
|
||||||
@@ -86,8 +84,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
this.javaClassResolver = new JavaClassResolver();
|
this.javaClassResolver = new JavaClassResolver();
|
||||||
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
||||||
this.javaCompileTimeConstResolver = new JavaCompileTimeConstResolver();
|
this.javaCompileTimeConstResolver = new JavaCompileTimeConstResolver();
|
||||||
this.javaClassObjectResolver = new JavaClassObjectResolver();
|
|
||||||
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
|
||||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||||
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
||||||
this.javaSignatureResolver = new JavaSignatureResolver();
|
this.javaSignatureResolver = new JavaSignatureResolver();
|
||||||
@@ -95,6 +91,7 @@ public class InjectorForJavaSemanticServices {
|
|||||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||||
this.errorReporter = new ErrorReporter();
|
this.errorReporter = new ErrorReporter();
|
||||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||||
|
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
||||||
this.javaConstructorResolver = new JavaConstructorResolver();
|
this.javaConstructorResolver = new JavaConstructorResolver();
|
||||||
this.javaInnerClassResolver = new JavaInnerClassResolver();
|
this.javaInnerClassResolver = new JavaInnerClassResolver();
|
||||||
this.javaPropertyResolver = new JavaPropertyResolver();
|
this.javaPropertyResolver = new JavaPropertyResolver();
|
||||||
@@ -122,7 +119,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
||||||
|
|
||||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaClassResolver.setClassObjectResolver(javaClassObjectResolver);
|
|
||||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||||
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
||||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||||
@@ -138,15 +134,6 @@ public class InjectorForJavaSemanticServices {
|
|||||||
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
||||||
|
|
||||||
javaClassObjectResolver.setSemanticServices(javaSemanticServices);
|
|
||||||
javaClassObjectResolver.setSupertypesResolver(javaSupertypeResolver);
|
|
||||||
javaClassObjectResolver.setTrace(bindingTrace);
|
|
||||||
|
|
||||||
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
|
||||||
javaSupertypeResolver.setSemanticServices(javaSemanticServices);
|
|
||||||
javaSupertypeResolver.setTrace(bindingTrace);
|
|
||||||
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
|
||||||
|
|
||||||
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaFunctionResolver.setParameterResolver(javaValueParameterResolver);
|
javaFunctionResolver.setParameterResolver(javaValueParameterResolver);
|
||||||
javaFunctionResolver.setSignatureResolver(javaSignatureResolver);
|
javaFunctionResolver.setSignatureResolver(javaSignatureResolver);
|
||||||
@@ -172,6 +159,10 @@ public class InjectorForJavaSemanticServices {
|
|||||||
javaNamespaceResolver.setPsiClassFinder(psiClassFinder);
|
javaNamespaceResolver.setPsiClassFinder(psiClassFinder);
|
||||||
javaNamespaceResolver.setTrace(bindingTrace);
|
javaNamespaceResolver.setTrace(bindingTrace);
|
||||||
|
|
||||||
|
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
||||||
|
javaSupertypeResolver.setTrace(bindingTrace);
|
||||||
|
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
||||||
|
|
||||||
javaConstructorResolver.setTrace(bindingTrace);
|
javaConstructorResolver.setTrace(bindingTrace);
|
||||||
javaConstructorResolver.setTypeTransformer(javaTypeTransformer);
|
javaConstructorResolver.setTypeTransformer(javaTypeTransformer);
|
||||||
javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver);
|
javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver);
|
||||||
|
|||||||
+7
-16
@@ -53,8 +53,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaCompileTimeConstResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaCompileTimeConstResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaClassObjectResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSignatureResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSignatureResolver;
|
||||||
@@ -62,6 +60,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolv
|
|||||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
import org.jetbrains.jet.lang.resolve.java.resolver.ErrorReporter;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaSupertypeResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaConstructorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaInnerClassResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
|
import org.jetbrains.jet.lang.resolve.java.resolver.JavaPropertyResolver;
|
||||||
@@ -108,8 +107,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
private final JavaClassResolver javaClassResolver;
|
private final JavaClassResolver javaClassResolver;
|
||||||
private final JavaAnnotationResolver javaAnnotationResolver;
|
private final JavaAnnotationResolver javaAnnotationResolver;
|
||||||
private final JavaCompileTimeConstResolver javaCompileTimeConstResolver;
|
private final JavaCompileTimeConstResolver javaCompileTimeConstResolver;
|
||||||
private final JavaClassObjectResolver javaClassObjectResolver;
|
|
||||||
private final JavaSupertypeResolver javaSupertypeResolver;
|
|
||||||
private final JavaFunctionResolver javaFunctionResolver;
|
private final JavaFunctionResolver javaFunctionResolver;
|
||||||
private final JavaValueParameterResolver javaValueParameterResolver;
|
private final JavaValueParameterResolver javaValueParameterResolver;
|
||||||
private final JavaSignatureResolver javaSignatureResolver;
|
private final JavaSignatureResolver javaSignatureResolver;
|
||||||
@@ -117,6 +114,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||||
private final ErrorReporter errorReporter;
|
private final ErrorReporter errorReporter;
|
||||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||||
|
private final JavaSupertypeResolver javaSupertypeResolver;
|
||||||
private final JavaConstructorResolver javaConstructorResolver;
|
private final JavaConstructorResolver javaConstructorResolver;
|
||||||
private final JavaInnerClassResolver javaInnerClassResolver;
|
private final JavaInnerClassResolver javaInnerClassResolver;
|
||||||
private final JavaPropertyResolver javaPropertyResolver;
|
private final JavaPropertyResolver javaPropertyResolver;
|
||||||
@@ -164,8 +162,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
this.javaClassResolver = new JavaClassResolver();
|
this.javaClassResolver = new JavaClassResolver();
|
||||||
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
||||||
this.javaCompileTimeConstResolver = new JavaCompileTimeConstResolver();
|
this.javaCompileTimeConstResolver = new JavaCompileTimeConstResolver();
|
||||||
this.javaClassObjectResolver = new JavaClassObjectResolver();
|
|
||||||
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
|
||||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||||
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
||||||
this.javaSignatureResolver = new JavaSignatureResolver();
|
this.javaSignatureResolver = new JavaSignatureResolver();
|
||||||
@@ -173,6 +169,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||||
this.errorReporter = new ErrorReporter();
|
this.errorReporter = new ErrorReporter();
|
||||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||||
|
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
||||||
this.javaConstructorResolver = new JavaConstructorResolver();
|
this.javaConstructorResolver = new JavaConstructorResolver();
|
||||||
this.javaInnerClassResolver = new JavaInnerClassResolver();
|
this.javaInnerClassResolver = new JavaInnerClassResolver();
|
||||||
this.javaPropertyResolver = new JavaPropertyResolver();
|
this.javaPropertyResolver = new JavaPropertyResolver();
|
||||||
@@ -300,7 +297,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
javaTypeTransformer.setResolver(javaDescriptorResolver);
|
||||||
|
|
||||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaClassResolver.setClassObjectResolver(javaClassObjectResolver);
|
|
||||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||||
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
||||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||||
@@ -316,15 +312,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaCompileTimeConstResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
javaCompileTimeConstResolver.setClassResolver(javaClassResolver);
|
||||||
|
|
||||||
javaClassObjectResolver.setSemanticServices(javaSemanticServices);
|
|
||||||
javaClassObjectResolver.setSupertypesResolver(javaSupertypeResolver);
|
|
||||||
javaClassObjectResolver.setTrace(bindingTrace);
|
|
||||||
|
|
||||||
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
|
||||||
javaSupertypeResolver.setSemanticServices(javaSemanticServices);
|
|
||||||
javaSupertypeResolver.setTrace(bindingTrace);
|
|
||||||
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
|
||||||
|
|
||||||
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||||
javaFunctionResolver.setParameterResolver(javaValueParameterResolver);
|
javaFunctionResolver.setParameterResolver(javaValueParameterResolver);
|
||||||
javaFunctionResolver.setSignatureResolver(javaSignatureResolver);
|
javaFunctionResolver.setSignatureResolver(javaSignatureResolver);
|
||||||
@@ -350,6 +337,10 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
|||||||
javaNamespaceResolver.setPsiClassFinder(psiClassFinder);
|
javaNamespaceResolver.setPsiClassFinder(psiClassFinder);
|
||||||
javaNamespaceResolver.setTrace(bindingTrace);
|
javaNamespaceResolver.setTrace(bindingTrace);
|
||||||
|
|
||||||
|
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
||||||
|
javaSupertypeResolver.setTrace(bindingTrace);
|
||||||
|
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
||||||
|
|
||||||
javaConstructorResolver.setTrace(bindingTrace);
|
javaConstructorResolver.setTrace(bindingTrace);
|
||||||
javaConstructorResolver.setTypeTransformer(javaTypeTransformer);
|
javaConstructorResolver.setTypeTransformer(javaTypeTransformer);
|
||||||
javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver);
|
javaConstructorResolver.setValueParameterResolver(javaValueParameterResolver);
|
||||||
|
|||||||
+3
-33
@@ -23,9 +23,6 @@ import org.jetbrains.annotations.Nullable;
|
|||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
import org.jetbrains.jet.lang.resolve.constants.StringValue;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.PsiAnnotationWithFlags;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMemberWrapper;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -63,36 +60,9 @@ public final class DescriptorResolverUtils {
|
|||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Modality resolveModality(PsiMemberWrapper memberWrapper, boolean isFinal) {
|
|
||||||
if (memberWrapper instanceof PsiMethodWrapper) {
|
|
||||||
PsiMethodWrapper method = (PsiMethodWrapper) memberWrapper;
|
|
||||||
if (method.getJetMethodAnnotation().hasForceOpenFlag()) {
|
|
||||||
return Modality.OPEN;
|
|
||||||
}
|
|
||||||
if (method.getJetMethodAnnotation().hasForceFinalFlag()) {
|
|
||||||
return Modality.FINAL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Modality.convertFromFlags(memberWrapper.isAbstract(), !isFinal);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Visibility resolveVisibility(
|
public static Visibility resolveVisibility(
|
||||||
@NotNull PsiModifierListOwner modifierListOwner,
|
@NotNull PsiModifierListOwner modifierListOwner
|
||||||
@Nullable PsiAnnotationWithFlags annotation
|
|
||||||
) {
|
) {
|
||||||
if (annotation != null) {
|
|
||||||
if (annotation.hasPrivateFlag()) {
|
|
||||||
return Visibilities.PRIVATE;
|
|
||||||
}
|
|
||||||
else if (annotation.hasInternalFlag()) {
|
|
||||||
return Visibilities.INTERNAL;
|
|
||||||
}
|
|
||||||
else if (annotation.hasProtectedFlag()) {
|
|
||||||
return Visibilities.PROTECTED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC)) {
|
if (modifierListOwner.hasModifierProperty(PsiModifier.PUBLIC)) {
|
||||||
return Visibilities.PUBLIC;
|
return Visibilities.PUBLIC;
|
||||||
}
|
}
|
||||||
@@ -159,7 +129,7 @@ public final class DescriptorResolverUtils {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @return true if {@code member} is a static member of enum class, which is to be put into its class object (and not into the
|
* @return true if {@code member} is a static member of enum class, which is to be put into its class object (and not into the
|
||||||
* corresponding package). This applies to enum entries, values() and valueOf(String) methods
|
* corresponding package). This applies to enum entries, values() and valueOf(String) methods
|
||||||
*/
|
*/
|
||||||
public static boolean shouldBeInEnumClassObject(@NotNull PsiMember member) {
|
public static boolean shouldBeInEnumClassObject(@NotNull PsiMember member) {
|
||||||
PsiClass psiClass = member.getContainingClass();
|
PsiClass psiClass = member.getContainingClass();
|
||||||
@@ -169,7 +139,7 @@ public final class DescriptorResolverUtils {
|
|||||||
|
|
||||||
if (!(member instanceof PsiMethod)) return false;
|
if (!(member instanceof PsiMethod)) return false;
|
||||||
String signature = PsiFormatUtil.formatMethod((PsiMethod) member,
|
String signature = PsiFormatUtil.formatMethod((PsiMethod) member,
|
||||||
PsiSubstitutor.EMPTY, SHOW_NAME | SHOW_PARAMETERS, SHOW_TYPE | SHOW_FQ_CLASS_NAMES);
|
PsiSubstitutor.EMPTY, SHOW_NAME | SHOW_PARAMETERS, SHOW_TYPE | SHOW_FQ_CLASS_NAMES);
|
||||||
|
|
||||||
return "values()".equals(signature) ||
|
return "values()".equals(signature) ||
|
||||||
"valueOf(java.lang.String)".equals(signature);
|
"valueOf(java.lang.String)".equals(signature);
|
||||||
|
|||||||
+2
-2
@@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve.java;
|
|||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetPackageClassAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
|
|
||||||
@@ -40,7 +39,8 @@ public class PackageClassUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPackageClass(@NotNull PsiClass psiClass) {
|
public static boolean isPackageClass(@NotNull PsiClass psiClass) {
|
||||||
return JetPackageClassAnnotation.get(psiClass).isDefined();
|
//TODO: read kotlin info
|
||||||
|
return psiClass.getName().endsWith("Package");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPackageClass(@NotNull FqName fqName) {
|
public static boolean isPackageClass(@NotNull FqName fqName) {
|
||||||
|
|||||||
+2
-19
@@ -25,11 +25,8 @@ import com.intellij.psi.impl.PsiSubstitutorImpl;
|
|||||||
import com.intellij.util.containers.ContainerUtil;
|
import com.intellij.util.containers.ContainerUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.CallableMemberDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.JetTypeImpl;
|
import org.jetbrains.jet.lang.types.JetTypeImpl;
|
||||||
@@ -71,7 +68,7 @@ class PropagationHeuristics {
|
|||||||
JetType elementType = type.getArguments().get(0).getType();
|
JetType elementType = type.getArguments().get(0).getType();
|
||||||
|
|
||||||
if (JetTypeChecker.INSTANCE.isSubtypeOf(elementType, elementTypeInSuper)
|
if (JetTypeChecker.INSTANCE.isSubtypeOf(elementType, elementTypeInSuper)
|
||||||
&& !JetTypeChecker.INSTANCE.equalTypes(elementType, elementTypeInSuper)) {
|
&& !JetTypeChecker.INSTANCE.equalTypes(elementType, elementTypeInSuper)) {
|
||||||
JetTypeImpl betterTypeInSuper = new JetTypeImpl(
|
JetTypeImpl betterTypeInSuper = new JetTypeImpl(
|
||||||
arrayTypeFromSuper.getAnnotations(),
|
arrayTypeFromSuper.getAnnotations(),
|
||||||
arrayTypeFromSuper.getConstructor(),
|
arrayTypeFromSuper.getConstructor(),
|
||||||
@@ -127,21 +124,7 @@ class PropagationHeuristics {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
static List<PsiMethod> getSuperMethods(@NotNull PsiMethod method) {
|
static List<PsiMethod> getSuperMethods(@NotNull PsiMethod method) {
|
||||||
List<PsiMethod> superMethods = Lists.newArrayList();
|
return new SuperMethodCollector(method).collect();
|
||||||
for (PsiMethod superMethod : new SuperMethodCollector(method).collect()) {
|
|
||||||
CallableMemberDescriptor.Kind kindFromFlags =
|
|
||||||
DescriptorKindUtils.flagsToKind(new PsiMethodWrapper(superMethod).getJetMethodAnnotation().kind());
|
|
||||||
if (kindFromFlags == CallableMemberDescriptor.Kind.FAKE_OVERRIDE) {
|
|
||||||
// This is for the case when a Kotlin class inherits a non-abstract method from a trait:
|
|
||||||
// from Kotlin's point of view it is fake override, from Java's it is normal override.
|
|
||||||
// We replace this "fake override" method with original method from the trait.
|
|
||||||
superMethods.addAll(getSuperMethods(superMethod));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
superMethods.add(superMethod);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return superMethods;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PropagationHeuristics() {
|
private PropagationHeuristics() {
|
||||||
|
|||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.kt;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiAnnotation;
|
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
|
||||||
|
|
||||||
public class JetClassObjectAnnotation extends PsiAnnotationWithAbiVersion {
|
|
||||||
|
|
||||||
private static final JetClassObjectAnnotation NULL_ANNOTATION = new JetClassObjectAnnotation(null);
|
|
||||||
|
|
||||||
static {
|
|
||||||
NULL_ANNOTATION.checkInitialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetClassObjectAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
|
||||||
super(psiAnnotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static JetClassObjectAnnotation get(@NotNull PsiClass psiClass) {
|
|
||||||
PsiAnnotation annotation =
|
|
||||||
JavaAnnotationResolver.findOwnAnnotation(psiClass, JvmStdlibNames.JET_CLASS_OBJECT.getFqName().asString());
|
|
||||||
return annotation != null ? new JetClassObjectAnnotation(annotation) : NULL_ANNOTATION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-54
@@ -1,54 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.kt;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiAnnotation;
|
|
||||||
import com.intellij.psi.PsiMethod;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
|
||||||
|
|
||||||
public class JetConstructorAnnotation extends PsiAnnotationWithFlags {
|
|
||||||
private static final JetConstructorAnnotation NULL_ANNOTATION = new JetConstructorAnnotation(null);
|
|
||||||
static {
|
|
||||||
NULL_ANNOTATION.checkInitialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetConstructorAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
|
||||||
super(psiAnnotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initialize() {
|
|
||||||
super.initialize();
|
|
||||||
hidden = getBooleanAttribute(JvmStdlibNames.JET_CONSTRUCTOR_HIDDEN_FIELD, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean hidden;
|
|
||||||
|
|
||||||
/** @deprecated */
|
|
||||||
public boolean hidden() {
|
|
||||||
checkInitialized();
|
|
||||||
return hidden;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static JetConstructorAnnotation get(PsiMethod constructor) {
|
|
||||||
PsiAnnotation annotation =
|
|
||||||
JavaAnnotationResolver.findOwnAnnotation(constructor, JvmStdlibNames.JET_CONSTRUCTOR.getFqName().asString());
|
|
||||||
return annotation != null ? new JetConstructorAnnotation(annotation) : NULL_ANNOTATION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-75
@@ -1,75 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.kt;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiAnnotation;
|
|
||||||
import com.intellij.psi.PsiMethod;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
|
||||||
|
|
||||||
public class JetMethodAnnotation extends PsiAnnotationWithFlags {
|
|
||||||
private static final JetMethodAnnotation NULL_ANNOTATION = new JetMethodAnnotation(null);
|
|
||||||
static {
|
|
||||||
NULL_ANNOTATION.checkInitialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
private String typeParameters;
|
|
||||||
private String returnType;
|
|
||||||
private String propertyType;
|
|
||||||
|
|
||||||
private JetMethodAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
|
||||||
super(psiAnnotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initialize() {
|
|
||||||
super.initialize();
|
|
||||||
typeParameters = getStringAttribute(JvmStdlibNames.JET_METHOD_TYPE_PARAMETERS_FIELD, "");
|
|
||||||
returnType = getStringAttribute(JvmStdlibNames.JET_METHOD_RETURN_TYPE_FIELD, "");
|
|
||||||
propertyType = getStringAttribute(JvmStdlibNames.JET_METHOD_PROPERTY_TYPE_FIELD, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
public int kind() {
|
|
||||||
return flags() & JvmStdlibNames.FLAG_METHOD_KIND_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public String typeParameters() {
|
|
||||||
checkInitialized();
|
|
||||||
return typeParameters;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public String returnType() {
|
|
||||||
checkInitialized();
|
|
||||||
return returnType;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public String propertyType() {
|
|
||||||
checkInitialized();
|
|
||||||
return propertyType;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static JetMethodAnnotation get(PsiMethod psiMethod) {
|
|
||||||
PsiAnnotation annotation =
|
|
||||||
JavaAnnotationResolver.findOwnAnnotation(psiMethod, JvmStdlibNames.JET_METHOD.getFqName().asString());
|
|
||||||
return annotation != null ? new JetMethodAnnotation(annotation) : NULL_ANNOTATION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-42
@@ -1,42 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.kt;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiAnnotation;
|
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
|
||||||
|
|
||||||
public class JetPackageClassAnnotation extends PsiAnnotationWithAbiVersion {
|
|
||||||
private static final JetPackageClassAnnotation NULL_ANNOTATION = new JetPackageClassAnnotation(null);
|
|
||||||
static {
|
|
||||||
NULL_ANNOTATION.checkInitialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetPackageClassAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
|
||||||
super(psiAnnotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static JetPackageClassAnnotation get(PsiClass psiClass) {
|
|
||||||
PsiAnnotation annotation = JavaAnnotationResolver.findOwnAnnotation(psiClass,
|
|
||||||
JvmStdlibNames.JET_PACKAGE_CLASS.getFqName().asString());
|
|
||||||
return annotation != null ? new JetPackageClassAnnotation(annotation) : NULL_ANNOTATION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-46
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.kt;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiAnnotation;
|
|
||||||
import com.intellij.psi.PsiParameter;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmStdlibNames;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
|
||||||
|
|
||||||
public class JetTypeParameterAnnotation extends PsiAnnotationWrapper {
|
|
||||||
private static final JetTypeParameterAnnotation NULL_ANNOTATION = new JetTypeParameterAnnotation(null);
|
|
||||||
static {
|
|
||||||
NULL_ANNOTATION.checkInitialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetTypeParameterAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
|
||||||
super(psiAnnotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void initialize() {
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public static JetTypeParameterAnnotation get(@NotNull PsiParameter psiParameter) {
|
|
||||||
PsiAnnotation annotation =
|
|
||||||
JavaAnnotationResolver.findOwnAnnotation(psiParameter, JvmStdlibNames.JET_TYPE_PARAMETER.getFqName().asString());
|
|
||||||
return annotation != null ? new JetTypeParameterAnnotation(annotation) : NULL_ANNOTATION;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+1
-7
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
|||||||
|
|
||||||
public class JetValueParameterAnnotation extends PsiAnnotationWrapper {
|
public class JetValueParameterAnnotation extends PsiAnnotationWrapper {
|
||||||
private static final JetValueParameterAnnotation NULL_ANNOTATION = new JetValueParameterAnnotation(null);
|
private static final JetValueParameterAnnotation NULL_ANNOTATION = new JetValueParameterAnnotation(null);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
NULL_ANNOTATION.checkInitialized();
|
NULL_ANNOTATION.checkInitialized();
|
||||||
}
|
}
|
||||||
@@ -32,7 +33,6 @@ public class JetValueParameterAnnotation extends PsiAnnotationWrapper {
|
|||||||
private String name;
|
private String name;
|
||||||
private String type;
|
private String type;
|
||||||
private boolean receiver;
|
private boolean receiver;
|
||||||
private boolean hasDefaultValue;
|
|
||||||
private boolean vararg;
|
private boolean vararg;
|
||||||
|
|
||||||
private JetValueParameterAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
private JetValueParameterAnnotation(@Nullable PsiAnnotation psiAnnotation) {
|
||||||
@@ -44,7 +44,6 @@ public class JetValueParameterAnnotation extends PsiAnnotationWrapper {
|
|||||||
name = getStringAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_NAME_FIELD, "");
|
name = getStringAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_NAME_FIELD, "");
|
||||||
type = getStringAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_TYPE_FIELD, "");
|
type = getStringAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_TYPE_FIELD, "");
|
||||||
receiver = getBooleanAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_RECEIVER_FIELD, false);
|
receiver = getBooleanAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_RECEIVER_FIELD, false);
|
||||||
hasDefaultValue = getBooleanAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_HAS_DEFAULT_VALUE_FIELD, false);
|
|
||||||
vararg = getBooleanAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_VARARG, false);
|
vararg = getBooleanAttribute(JvmStdlibNames.JET_VALUE_PARAMETER_VARARG, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,11 +63,6 @@ public class JetValueParameterAnnotation extends PsiAnnotationWrapper {
|
|||||||
checkInitialized();
|
checkInitialized();
|
||||||
return receiver;
|
return receiver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasDefaultValue() {
|
|
||||||
checkInitialized();
|
|
||||||
return hasDefaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean vararg() {
|
public boolean vararg() {
|
||||||
checkInitialized();
|
checkInitialized();
|
||||||
|
|||||||
-24
@@ -36,28 +36,4 @@ public abstract class PsiAnnotationWithFlags extends PsiAnnotationWrapper {
|
|||||||
checkInitialized();
|
checkInitialized();
|
||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public final boolean hasPropertyFlag() {
|
|
||||||
return (flags() & JvmStdlibNames.FLAG_PROPERTY_BIT) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final boolean hasForceFinalFlag() {
|
|
||||||
return (flags() & JvmStdlibNames.FLAG_FORCE_FINAL_BIT) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final boolean hasForceOpenFlag() {
|
|
||||||
return (flags() & JvmStdlibNames.FLAG_FORCE_OPEN_BIT) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final boolean hasInternalFlag() {
|
|
||||||
return (flags() & JvmStdlibNames.FLAG_INTERNAL_BIT) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final boolean hasProtectedFlag() {
|
|
||||||
return (flags() & JvmStdlibNames.FLAG_PROTECTED_BIT) != 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public final boolean hasPrivateFlag() {
|
|
||||||
return (flags() & JvmStdlibNames.FLAG_PRIVATE_BIT) != 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -19,7 +19,6 @@ package org.jetbrains.jet.lang.resolve.java.provider;
|
|||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||||
@@ -47,7 +46,8 @@ public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase
|
|||||||
@Override
|
@Override
|
||||||
@NotNull
|
@NotNull
|
||||||
protected MembersCache buildMembersCache() {
|
protected MembersCache buildMembersCache() {
|
||||||
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers, getDeclarationOrigin() == KOTLIN);
|
return MembersCache.buildMembersByNameCache(new MembersCache(), psiClassFinder, psiClass, null, staticMembers,
|
||||||
|
getDeclarationOrigin() == KOTLIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -64,7 +64,7 @@ public class ClassPsiDeclarationProviderImpl extends PsiDeclarationProviderBase
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static DeclarationOrigin determineOrigin(@Nullable PsiClass psiClass) {
|
private static DeclarationOrigin determineOrigin(@Nullable PsiClass psiClass) {
|
||||||
return ((psiClass != null) && DescriptorResolverUtils.isKotlinClass(psiClass)) ? KOTLIN : JAVA;
|
return JAVA;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
-58
@@ -1,58 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.provider;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import com.intellij.psi.PsiPackage;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOTLIN;
|
|
||||||
|
|
||||||
public final class KotlinNamespacePsiDeclarationProvider extends ClassPsiDeclarationProviderImpl implements PackagePsiDeclarationProvider {
|
|
||||||
@NotNull
|
|
||||||
private final PsiPackage psiPackage;
|
|
||||||
|
|
||||||
public KotlinNamespacePsiDeclarationProvider(
|
|
||||||
@NotNull PsiPackage psiPackage,
|
|
||||||
@NotNull PsiClass psiClass,
|
|
||||||
@NotNull PsiClassFinder psiClassFinder
|
|
||||||
) {
|
|
||||||
super(psiClass, true, psiClassFinder);
|
|
||||||
this.psiPackage = psiPackage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public PsiPackage getPsiPackage() {
|
|
||||||
return psiPackage;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
protected MembersCache buildMembersCache() {
|
|
||||||
MembersCache cacheWithMembers = super.buildMembersCache();
|
|
||||||
MembersCache.buildMembersByNameCache(cacheWithMembers, psiClassFinder, null, psiPackage, true, getDeclarationOrigin() == KOTLIN);
|
|
||||||
return cacheWithMembers;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
public DeclarationOrigin getDeclarationOrigin() {
|
|
||||||
return KOTLIN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+12
-96
@@ -19,16 +19,15 @@ package org.jetbrains.jet.lang.resolve.java.provider;
|
|||||||
import com.google.common.collect.HashMultimap;
|
import com.google.common.collect.HashMultimap;
|
||||||
import com.google.common.collect.ImmutableSet;
|
import com.google.common.collect.ImmutableSet;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import com.intellij.openapi.util.Ref;
|
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.util.MethodSignature;
|
|
||||||
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
|
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod;
|
||||||
import com.intellij.psi.util.PsiFormatUtil;
|
import com.intellij.psi.util.PsiFormatUtil;
|
||||||
import com.intellij.util.ArrayUtil;
|
import com.intellij.util.ArrayUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
|
import org.jetbrains.jet.lang.resolve.java.PsiClassFinder;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.TypeSource;
|
||||||
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
|
import org.jetbrains.jet.lang.resolve.java.prop.PropertyNameUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
|
import org.jetbrains.jet.lang.resolve.java.prop.PropertyParseResult;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.*;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.*;
|
||||||
@@ -129,9 +128,6 @@ public final class MembersCache {
|
|||||||
private void process() {
|
private void process() {
|
||||||
for (PsiClass psiClass : psiClasses) {
|
for (PsiClass psiClass : psiClasses) {
|
||||||
if (!(psiClass instanceof JetJavaMirrorMarker)) { // to filter out JetLightClasses
|
if (!(psiClass instanceof JetJavaMirrorMarker)) { // to filter out JetLightClasses
|
||||||
if (JetClassAnnotation.get(psiClass).kind() == JvmStdlibNames.FLAG_CLASS_KIND_OBJECT) {
|
|
||||||
processObjectClass(psiClass);
|
|
||||||
}
|
|
||||||
if (isSamInterface(psiClass)) {
|
if (isSamInterface(psiClass)) {
|
||||||
processSamInterface(psiClass);
|
processSamInterface(psiClass);
|
||||||
}
|
}
|
||||||
@@ -139,16 +135,6 @@ public final class MembersCache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processObjectClass(@NotNull PsiClass psiClass) {
|
|
||||||
PsiField instanceField = psiClass.findFieldByName(JvmAbi.INSTANCE_FIELD, false);
|
|
||||||
if (instanceField != null) {
|
|
||||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(psiClass.getName()));
|
|
||||||
|
|
||||||
TypeSource type = new TypeSource("", instanceField.getType(), instanceField);
|
|
||||||
namedMembers.addPropertyAccessor(new PropertyPsiDataElement(new PsiFieldWrapper(instanceField), type, null));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void processSamInterface(@NotNull PsiClass psiClass) {
|
private void processSamInterface(@NotNull PsiClass psiClass) {
|
||||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(psiClass.getName()));
|
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(psiClass.getName()));
|
||||||
namedMembers.setSamInterface(psiClass);
|
namedMembers.setSamInterface(psiClass);
|
||||||
@@ -248,9 +234,7 @@ public final class MembersCache {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//process private accessors
|
if (member.isPrivate()) {
|
||||||
if (member.isPrivate()
|
|
||||||
&& !(member instanceof PsiMethodWrapper && ((PsiMethodWrapper)member).getJetMethodAnnotation().hasPropertyFlag())) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -288,90 +272,25 @@ public final class MembersCache {
|
|||||||
if (propertyParseResult != null && propertyParseResult.isGetter()) {
|
if (propertyParseResult != null && propertyParseResult.isGetter()) {
|
||||||
processGetter(ownMethod, method, propertyParseResult);
|
processGetter(ownMethod, method, propertyParseResult);
|
||||||
}
|
}
|
||||||
else if (propertyParseResult != null && !propertyParseResult.isGetter()) {
|
else if (propertyParseResult != null) {
|
||||||
processSetter(method, propertyParseResult);
|
processSetter(method, propertyParseResult);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!method.getJetMethodAnnotation().hasPropertyFlag()) {
|
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(method.getName()));
|
||||||
NamedMembers namedMembers = getOrCreateEmpty(Name.identifier(method.getName()));
|
namedMembers.addMethod(method);
|
||||||
namedMembers.addMethod(method);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: manually!!!!
|
||||||
private void processSetter(PsiMethodWrapper method, PropertyParseResult propertyParseResult) {
|
private void processSetter(PsiMethodWrapper method, PropertyParseResult propertyParseResult) {
|
||||||
|
//TODO
|
||||||
String propertyName = propertyParseResult.getPropertyName();
|
String propertyName = propertyParseResult.getPropertyName();
|
||||||
NamedMembers members = getOrCreateEmpty(Name.identifier(propertyName));
|
getOrCreateEmpty(Name.identifier(propertyName));
|
||||||
|
|
||||||
if (method.getJetMethodAnnotation().hasPropertyFlag()) {
|
|
||||||
if (method.getParameters().size() == 0) {
|
|
||||||
// TODO: report error properly
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
TypeSource receiverType = null;
|
|
||||||
PsiParameterWrapper p1 = method.getParameter(0);
|
|
||||||
if (p1.getJetValueParameter().receiver()) {
|
|
||||||
receiverType = new TypeSource(p1.getJetValueParameter().type(), p1.getPsiParameter().getType(), p1.getPsiParameter());
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (i < method.getParameters().size() && method.getParameter(i).getJetTypeParameter().isDefined()) {
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i + 1 != method.getParameters().size()) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
PsiParameterWrapper propertyTypeParameter = method.getParameter(i);
|
|
||||||
TypeSource propertyType =
|
|
||||||
new TypeSource(method.getJetMethodAnnotation().propertyType(), propertyTypeParameter.getPsiParameter().getType(),
|
|
||||||
propertyTypeParameter.getPsiParameter());
|
|
||||||
|
|
||||||
members.addPropertyAccessor(new PropertyPsiDataElement(method, false, propertyType, receiverType));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void processGetter(PsiMethod ownMethod, PsiMethodWrapper method, PropertyParseResult propertyParseResult) {
|
private void processGetter(PsiMethod ownMethod, PsiMethodWrapper method, PropertyParseResult propertyParseResult) {
|
||||||
|
//TODO:
|
||||||
String propertyName = propertyParseResult.getPropertyName();
|
String propertyName = propertyParseResult.getPropertyName();
|
||||||
NamedMembers members = getOrCreateEmpty(Name.identifier(propertyName));
|
getOrCreateEmpty(Name.identifier(propertyName));
|
||||||
|
|
||||||
// TODO: some java properties too
|
|
||||||
if (method.getJetMethodAnnotation().hasPropertyFlag()) {
|
|
||||||
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
TypeSource receiverType;
|
|
||||||
if (i < method.getParameters().size() && method.getParameter(i).getJetValueParameter().receiver()) {
|
|
||||||
PsiParameterWrapper receiverParameter = method.getParameter(i);
|
|
||||||
receiverType =
|
|
||||||
new TypeSource(receiverParameter.getJetValueParameter().type(), receiverParameter.getPsiParameter().getType(),
|
|
||||||
receiverParameter.getPsiParameter());
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
receiverType = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
while (i < method.getParameters().size() && method.getParameter(i).getJetTypeParameter().isDefined()) {
|
|
||||||
// TODO: store is reified
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i != method.getParameters().size()) {
|
|
||||||
// TODO: report error properly
|
|
||||||
throw new IllegalStateException("something is wrong with method " + ownMethod);
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: what if returnType == null?
|
|
||||||
PsiType returnType = method.getReturnType();
|
|
||||||
assert returnType != null;
|
|
||||||
TypeSource propertyType = new TypeSource(method.getJetMethodAnnotation().propertyType(), returnType, method.getPsiMethod());
|
|
||||||
|
|
||||||
members.addPropertyAccessor(new PropertyPsiDataElement(method, true, propertyType, receiverType));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createEmptyEntry(@NotNull Name identifier) {
|
private void createEmptyEntry(@NotNull Name identifier) {
|
||||||
@@ -413,9 +332,6 @@ public final class MembersCache {
|
|||||||
// Returns null if not SAM interface
|
// Returns null if not SAM interface
|
||||||
@Nullable
|
@Nullable
|
||||||
public static PsiMethod getSamInterfaceMethod(@NotNull PsiClass psiClass) {
|
public static PsiMethod getSamInterfaceMethod(@NotNull PsiClass psiClass) {
|
||||||
if (DescriptorResolverUtils.isKotlinClass(psiClass)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String qualifiedName = psiClass.getQualifiedName();
|
String qualifiedName = psiClass.getQualifiedName();
|
||||||
if (qualifiedName == null || qualifiedName.startsWith(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.asString() + ".")) {
|
if (qualifiedName == null || qualifiedName.startsWith(KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME.asString() + ".")) {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
-6
@@ -38,12 +38,6 @@ public final class PsiDeclarationProviderFactory {
|
|||||||
return new ClassPsiDeclarationProviderImpl(psiClass, false, psiClassFinder);
|
return new ClassPsiDeclarationProviderImpl(psiClass, false, psiClassFinder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public KotlinNamespacePsiDeclarationProvider createDeclarationForKotlinNamespace(
|
|
||||||
@NotNull PsiPackage psiPackage, @NotNull PsiClass psiClass) {
|
|
||||||
return new KotlinNamespacePsiDeclarationProvider(psiPackage, psiClass, psiClassFinder);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public PackagePsiDeclarationProvider createDeclarationProviderForNamespaceWithoutMembers(@NotNull PsiPackage psiPackage) {
|
public PackagePsiDeclarationProvider createDeclarationProviderForNamespaceWithoutMembers(@NotNull PsiPackage psiPackage) {
|
||||||
return new PackagePsiDeclarationProviderImpl(psiPackage, psiClassFinder);
|
return new PackagePsiDeclarationProviderImpl(psiPackage, psiClassFinder);
|
||||||
|
|||||||
-168
@@ -1,168 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.resolver;
|
|
||||||
|
|
||||||
import com.intellij.psi.PsiClass;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.Modality;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorResolverUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassObjectAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassNonStaticMembersScope;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiClassWrapper;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqNameBase;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValueOfMethod;
|
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValuesMethod;
|
|
||||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName;
|
|
||||||
|
|
||||||
public final class JavaClassObjectResolver {
|
|
||||||
|
|
||||||
private BindingTrace trace;
|
|
||||||
private JavaSemanticServices semanticServices;
|
|
||||||
private JavaSupertypeResolver supertypesResolver;
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setSupertypesResolver(JavaSupertypeResolver supertypesResolver) {
|
|
||||||
this.supertypesResolver = supertypesResolver;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setTrace(BindingTrace trace) {
|
|
||||||
this.trace = trace;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setSemanticServices(JavaSemanticServices semanticServices) {
|
|
||||||
this.semanticServices = semanticServices;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
public ClassDescriptorFromJvmBytecode createClassObjectDescriptor(
|
|
||||||
@NotNull ClassDescriptor containing,
|
|
||||||
@NotNull PsiClass psiClass
|
|
||||||
) {
|
|
||||||
DescriptorResolverUtils.checkPsiClassIsNotJet(psiClass);
|
|
||||||
|
|
||||||
if (psiClass.isEnum()) {
|
|
||||||
return createClassObjectDescriptorForEnum(containing, psiClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!DescriptorResolverUtils.isKotlinClass(psiClass)) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
PsiClass classObjectPsiClass = getClassObjectPsiClass(psiClass);
|
|
||||||
if (classObjectPsiClass == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return createClassObjectFromPsi(containing, classObjectPsiClass);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private ClassDescriptorFromJvmBytecode createClassObjectFromPsi(
|
|
||||||
@NotNull ClassDescriptor containing,
|
|
||||||
@NotNull PsiClass classObjectPsiClass
|
|
||||||
) {
|
|
||||||
String qualifiedName = classObjectPsiClass.getQualifiedName();
|
|
||||||
assert qualifiedName != null;
|
|
||||||
FqName fqName = new FqName(qualifiedName);
|
|
||||||
ClassPsiDeclarationProvider classObjectData = semanticServices.getPsiDeclarationProviderFactory().createBinaryClassData(classObjectPsiClass);
|
|
||||||
ClassDescriptorFromJvmBytecode classObjectDescriptor
|
|
||||||
= new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, false);
|
|
||||||
classObjectDescriptor.setSupertypes(supertypesResolver.getSupertypes(classObjectDescriptor,
|
|
||||||
new PsiClassWrapper(classObjectPsiClass),
|
|
||||||
classObjectData,
|
|
||||||
Collections.<TypeParameterDescriptor>emptyList()));
|
|
||||||
setUpClassObjectDescriptor(classObjectDescriptor, containing, fqName, classObjectData, getClassObjectName(containing.getName()));
|
|
||||||
return classObjectDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private ClassDescriptorFromJvmBytecode createClassObjectDescriptorForEnum(
|
|
||||||
@NotNull ClassDescriptor containing,
|
|
||||||
@NotNull PsiClass psiClass
|
|
||||||
) {
|
|
||||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = createSyntheticClassObject(containing, psiClass);
|
|
||||||
|
|
||||||
classObjectDescriptor.getBuilder().addFunctionDescriptor(createEnumClassObjectValuesMethod(classObjectDescriptor, trace));
|
|
||||||
classObjectDescriptor.getBuilder().addFunctionDescriptor(createEnumClassObjectValueOfMethod(classObjectDescriptor, trace));
|
|
||||||
|
|
||||||
return classObjectDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private ClassDescriptorFromJvmBytecode createSyntheticClassObject(
|
|
||||||
@NotNull ClassDescriptor containing,
|
|
||||||
@NotNull PsiClass psiClass
|
|
||||||
) {
|
|
||||||
FqNameUnsafe fqName = DescriptorResolverUtils.getFqNameForClassObject(psiClass);
|
|
||||||
ClassDescriptorFromJvmBytecode classObjectDescriptor =
|
|
||||||
new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, false);
|
|
||||||
ClassPsiDeclarationProvider data = semanticServices.getPsiDeclarationProviderFactory().createSyntheticClassObjectClassData(psiClass);
|
|
||||||
setUpClassObjectDescriptor(classObjectDescriptor, containing, fqName, data, getClassObjectName(containing.getName().asString()));
|
|
||||||
return classObjectDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setUpClassObjectDescriptor(
|
|
||||||
@NotNull ClassDescriptorFromJvmBytecode classObjectDescriptor,
|
|
||||||
@NotNull ClassDescriptor containing,
|
|
||||||
@NotNull FqNameBase fqName,
|
|
||||||
@NotNull ClassPsiDeclarationProvider data,
|
|
||||||
@NotNull Name classObjectName
|
|
||||||
) {
|
|
||||||
classObjectDescriptor.setName(classObjectName);
|
|
||||||
classObjectDescriptor.setModality(Modality.FINAL);
|
|
||||||
classObjectDescriptor.setVisibility(containing.getVisibility());
|
|
||||||
classObjectDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
|
|
||||||
classObjectDescriptor.createTypeConstructor();
|
|
||||||
JavaClassNonStaticMembersScope classMembersScope = new JavaClassNonStaticMembersScope(classObjectDescriptor, data, semanticServices);
|
|
||||||
WritableScopeImpl writableScope =
|
|
||||||
new WritableScopeImpl(classMembersScope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION, "Member lookup scope");
|
|
||||||
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
|
||||||
classObjectDescriptor.setScopeForMemberLookup(writableScope);
|
|
||||||
classObjectDescriptor.setScopeForConstructorResolve(classMembersScope);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Nullable
|
|
||||||
private static PsiClass getClassObjectPsiClass(@NotNull PsiClass ownerClass) {
|
|
||||||
for (PsiClass inner : ownerClass.getInnerClasses()) {
|
|
||||||
if (JetClassObjectAnnotation.get(inner).isDefined()) {
|
|
||||||
return inner;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+64
-26
@@ -32,7 +32,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
||||||
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
import org.jetbrains.jet.lang.resolve.java.sam.SingleAbstractMethodUtils;
|
||||||
@@ -44,16 +43,20 @@ import org.jetbrains.jet.lang.resolve.name.FqNameBase;
|
|||||||
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
|
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
||||||
|
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||||
|
import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||||
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
import org.jetbrains.jet.lang.types.checker.JetTypeChecker;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValueOfMethod;
|
||||||
import java.util.Set;
|
import static org.jetbrains.jet.lang.resolve.DescriptorResolver.createEnumClassObjectValuesMethod;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassObjectName;
|
||||||
|
|
||||||
public final class JavaClassResolver {
|
public final class JavaClassResolver {
|
||||||
|
|
||||||
@@ -85,7 +88,6 @@ public final class JavaClassResolver {
|
|||||||
private JavaAnnotationResolver annotationResolver;
|
private JavaAnnotationResolver annotationResolver;
|
||||||
private PsiClassFinder psiClassFinder;
|
private PsiClassFinder psiClassFinder;
|
||||||
private JavaNamespaceResolver namespaceResolver;
|
private JavaNamespaceResolver namespaceResolver;
|
||||||
private JavaClassObjectResolver classObjectResolver;
|
|
||||||
private JavaSupertypeResolver supertypesResolver;
|
private JavaSupertypeResolver supertypesResolver;
|
||||||
private JavaFunctionResolver functionResolver;
|
private JavaFunctionResolver functionResolver;
|
||||||
private DeserializedDescriptorResolver kotlinDescriptorResolver;
|
private DeserializedDescriptorResolver kotlinDescriptorResolver;
|
||||||
@@ -108,11 +110,6 @@ public final class JavaClassResolver {
|
|||||||
this.signatureResolver = signatureResolver;
|
this.signatureResolver = signatureResolver;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setClassObjectResolver(JavaClassObjectResolver classObjectResolver) {
|
|
||||||
this.classObjectResolver = classObjectResolver;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setSemanticServices(JavaSemanticServices semanticServices) {
|
public void setSemanticServices(JavaSemanticServices semanticServices) {
|
||||||
this.semanticServices = semanticServices;
|
this.semanticServices = semanticServices;
|
||||||
@@ -258,6 +255,7 @@ public final class JavaClassResolver {
|
|||||||
|
|
||||||
return doCreateClassDescriptor(fqName, psiClass, taskList, containingDeclaration);
|
return doCreateClassDescriptor(fqName, psiClass, taskList, containingDeclaration);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private ClassDescriptorFromJvmBytecode doCreateClassDescriptor(
|
private ClassDescriptorFromJvmBytecode doCreateClassDescriptor(
|
||||||
@NotNull FqName fqName,
|
@NotNull FqName fqName,
|
||||||
@@ -265,12 +263,7 @@ public final class JavaClassResolver {
|
|||||||
@NotNull PostponedTasks taskList,
|
@NotNull PostponedTasks taskList,
|
||||||
@NotNull ClassOrNamespaceDescriptor containingDeclaration
|
@NotNull ClassOrNamespaceDescriptor containingDeclaration
|
||||||
) {
|
) {
|
||||||
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
ClassKind kind = getClassKind(psiClass);
|
||||||
if (jetClassAnnotation.isDefined()) {
|
|
||||||
AbiVersionUtil.checkAbiVersion(psiClass, jetClassAnnotation.getAbiVersion(), trace);
|
|
||||||
}
|
|
||||||
|
|
||||||
ClassKind kind = getClassKind(psiClass, jetClassAnnotation);
|
|
||||||
ClassPsiDeclarationProvider classData = semanticServices.getPsiDeclarationProviderFactory().createBinaryClassData(psiClass);
|
ClassPsiDeclarationProvider classData = semanticServices.getPsiDeclarationProviderFactory().createBinaryClassData(psiClass);
|
||||||
ClassDescriptorFromJvmBytecode classDescriptor = new ClassDescriptorFromJvmBytecode(
|
ClassDescriptorFromJvmBytecode classDescriptor = new ClassDescriptorFromJvmBytecode(
|
||||||
containingDeclaration, kind, isInnerClass(psiClass));
|
containingDeclaration, kind, isInnerClass(psiClass));
|
||||||
@@ -279,12 +272,12 @@ public final class JavaClassResolver {
|
|||||||
classDescriptor.setName(Name.identifier(psiClass.getName()));
|
classDescriptor.setName(Name.identifier(psiClass.getName()));
|
||||||
|
|
||||||
List<JavaSignatureResolver.TypeParameterDescriptorInitialization> typeParameterDescriptorInitializations
|
List<JavaSignatureResolver.TypeParameterDescriptorInitialization> typeParameterDescriptorInitializations
|
||||||
= signatureResolver.createUninitializedClassTypeParameters(psiClass, classDescriptor);
|
= JavaSignatureResolver.createUninitializedClassTypeParameters(psiClass, classDescriptor);
|
||||||
|
|
||||||
classDescriptor.setTypeParameterDescriptors(getTypeParametersDescriptors(typeParameterDescriptorInitializations));
|
classDescriptor.setTypeParameterDescriptors(getTypeParametersDescriptors(typeParameterDescriptorInitializations));
|
||||||
List<JetType> supertypes = Lists.newArrayList();
|
List<JetType> supertypes = Lists.newArrayList();
|
||||||
classDescriptor.setSupertypes(supertypes);
|
classDescriptor.setSupertypes(supertypes);
|
||||||
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass, jetClassAnnotation));
|
classDescriptor.setVisibility(DescriptorResolverUtils.resolveVisibility(psiClass));
|
||||||
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
|
classDescriptor.setModality(resolveModality(psiClass, classDescriptor));
|
||||||
classDescriptor.createTypeConstructor();
|
classDescriptor.createTypeConstructor();
|
||||||
JavaClassNonStaticMembersScope membersScope = new JavaClassNonStaticMembersScope(classDescriptor, classData, semanticServices);
|
JavaClassNonStaticMembersScope membersScope = new JavaClassNonStaticMembersScope(classDescriptor, classData, semanticServices);
|
||||||
@@ -298,9 +291,9 @@ public final class JavaClassResolver {
|
|||||||
List<TypeParameterDescriptor> classTypeParameters = classDescriptor.getTypeConstructor().getParameters();
|
List<TypeParameterDescriptor> classTypeParameters = classDescriptor.getTypeConstructor().getParameters();
|
||||||
supertypes.addAll(supertypesResolver.getSupertypes(classDescriptor, new PsiClassWrapper(psiClass), classData, classTypeParameters));
|
supertypes.addAll(supertypesResolver.getSupertypes(classDescriptor, new PsiClassWrapper(psiClass), classData, classTypeParameters));
|
||||||
|
|
||||||
ClassDescriptorFromJvmBytecode classObjectDescriptor = classObjectResolver.createClassObjectDescriptor(classDescriptor, psiClass);
|
if (psiClass.isEnum()) {
|
||||||
cache(DescriptorResolverUtils.getFqNameForClassObject(psiClass), classObjectDescriptor);
|
ClassDescriptorFromJvmBytecode classObjectDescriptor = createClassObjectDescriptorForEnum(classDescriptor, psiClass);
|
||||||
if (classObjectDescriptor != null) {
|
cache(DescriptorResolverUtils.getFqNameForClassObject(psiClass), classObjectDescriptor);
|
||||||
classDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor);
|
classDescriptor.getBuilder().setClassObjectDescriptor(classObjectDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -468,20 +461,65 @@ public final class JavaClassResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static ClassKind getClassKind(@NotNull PsiClass psiClass, @NotNull JetClassAnnotation jetClassAnnotation) {
|
private static ClassKind getClassKind(@NotNull PsiClass psiClass) {
|
||||||
if (psiClass.isInterface()) {
|
if (psiClass.isInterface()) {
|
||||||
return (psiClass.isAnnotationType() ? ClassKind.ANNOTATION_CLASS : ClassKind.TRAIT);
|
return (psiClass.isAnnotationType() ? ClassKind.ANNOTATION_CLASS : ClassKind.TRAIT);
|
||||||
}
|
}
|
||||||
if (psiClass.isEnum()) {
|
if (psiClass.isEnum()) {
|
||||||
return ClassKind.ENUM_CLASS;
|
return ClassKind.ENUM_CLASS;
|
||||||
}
|
}
|
||||||
else {
|
return ClassKind.CLASS;
|
||||||
return jetClassAnnotation.kind() == JvmStdlibNames.FLAG_CLASS_KIND_OBJECT ? ClassKind.OBJECT : ClassKind.CLASS;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
public ClassDescriptor resolveClass(FqName name) {
|
public ClassDescriptor resolveClass(FqName name) {
|
||||||
return resolveClass(name, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
|
return resolveClass(name, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private ClassDescriptorFromJvmBytecode createClassObjectDescriptorForEnum(
|
||||||
|
@NotNull ClassDescriptor containing,
|
||||||
|
@NotNull PsiClass psiClass
|
||||||
|
) {
|
||||||
|
ClassDescriptorFromJvmBytecode classObjectDescriptor = createSyntheticClassObject(containing, psiClass);
|
||||||
|
|
||||||
|
classObjectDescriptor.getBuilder().addFunctionDescriptor(createEnumClassObjectValuesMethod(classObjectDescriptor, trace));
|
||||||
|
classObjectDescriptor.getBuilder().addFunctionDescriptor(createEnumClassObjectValueOfMethod(classObjectDescriptor, trace));
|
||||||
|
|
||||||
|
return classObjectDescriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private ClassDescriptorFromJvmBytecode createSyntheticClassObject(
|
||||||
|
@NotNull ClassDescriptor containing,
|
||||||
|
@NotNull PsiClass psiClass
|
||||||
|
) {
|
||||||
|
ClassDescriptorFromJvmBytecode classObjectDescriptor =
|
||||||
|
new ClassDescriptorFromJvmBytecode(containing, ClassKind.CLASS_OBJECT, false);
|
||||||
|
ClassPsiDeclarationProvider data =
|
||||||
|
semanticServices.getPsiDeclarationProviderFactory().createSyntheticClassObjectClassData(psiClass);
|
||||||
|
setUpClassObjectDescriptor(classObjectDescriptor, containing, data, getClassObjectName(containing.getName().asString()));
|
||||||
|
return classObjectDescriptor;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setUpClassObjectDescriptor(
|
||||||
|
@NotNull ClassDescriptorFromJvmBytecode classObjectDescriptor,
|
||||||
|
@NotNull ClassDescriptor containing,
|
||||||
|
@NotNull ClassPsiDeclarationProvider data,
|
||||||
|
@NotNull Name classObjectName
|
||||||
|
) {
|
||||||
|
classObjectDescriptor.setName(classObjectName);
|
||||||
|
classObjectDescriptor.setModality(Modality.FINAL);
|
||||||
|
classObjectDescriptor.setVisibility(containing.getVisibility());
|
||||||
|
classObjectDescriptor.setTypeParameterDescriptors(Collections.<TypeParameterDescriptor>emptyList());
|
||||||
|
classObjectDescriptor.createTypeConstructor();
|
||||||
|
JavaClassNonStaticMembersScope classMembersScope =
|
||||||
|
new JavaClassNonStaticMembersScope(classObjectDescriptor, data, semanticServices);
|
||||||
|
WritableScopeImpl writableScope =
|
||||||
|
new WritableScopeImpl(classMembersScope, classObjectDescriptor, RedeclarationHandler.THROW_EXCEPTION,
|
||||||
|
"Member lookup scope");
|
||||||
|
writableScope.changeLockLevel(WritableScope.LockLevel.BOTH);
|
||||||
|
classObjectDescriptor.setScopeForMemberLookup(writableScope);
|
||||||
|
classObjectDescriptor.setScopeForConstructorResolve(classMembersScope);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-17
@@ -30,7 +30,6 @@ import org.jetbrains.jet.lang.resolve.BindingTrace;
|
|||||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetConstructorAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -102,7 +101,8 @@ public final class JavaConstructorResolver {
|
|||||||
containingClass,
|
containingClass,
|
||||||
Collections.<AnnotationDescriptor>emptyList(),
|
Collections.<AnnotationDescriptor>emptyList(),
|
||||||
true);
|
true);
|
||||||
constructorDescriptor.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), constructorVisibility, isStatic);
|
constructorDescriptor
|
||||||
|
.initialize(typeParameters, Collections.<ValueParameterDescriptor>emptyList(), constructorVisibility, isStatic);
|
||||||
constructors.add(constructorDescriptor);
|
constructors.add(constructorDescriptor);
|
||||||
trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
trace.record(BindingContext.CONSTRUCTOR, psiClass, constructorDescriptor);
|
||||||
}
|
}
|
||||||
@@ -175,27 +175,14 @@ public final class JavaConstructorResolver {
|
|||||||
) {
|
) {
|
||||||
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
PsiMethodWrapper constructor = new PsiMethodWrapper(psiConstructor);
|
||||||
|
|
||||||
JetConstructorAnnotation constructorAnnotation = constructor.getJetConstructorAnnotation();
|
|
||||||
//noinspection deprecation
|
|
||||||
if (constructorAnnotation.hidden()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Do not resolve kotlin constructors without JetConstructorAnnotation
|
|
||||||
if (DescriptorResolverUtils.isKotlinClass(psiClass) && !constructorAnnotation.isDefined()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (trace.get(BindingContext.CONSTRUCTOR, psiConstructor) != null) {
|
if (trace.get(BindingContext.CONSTRUCTOR, psiConstructor) != null) {
|
||||||
return trace.get(BindingContext.CONSTRUCTOR, psiConstructor);
|
return trace.get(BindingContext.CONSTRUCTOR, psiConstructor);
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean primary = constructor.getJetConstructorAnnotation().isDefined();
|
|
||||||
|
|
||||||
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(
|
ConstructorDescriptorImpl constructorDescriptor = new ConstructorDescriptorImpl(
|
||||||
classDescriptor,
|
classDescriptor,
|
||||||
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
||||||
primary);
|
false);
|
||||||
|
|
||||||
String context = "constructor of class " + psiClass.getQualifiedName();
|
String context = "constructor of class " + psiClass.getQualifiedName();
|
||||||
JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors = valueParameterResolver.resolveParameterDescriptors(
|
JavaDescriptorResolver.ValueParameterDescriptors valueParameterDescriptors = valueParameterResolver.resolveParameterDescriptors(
|
||||||
@@ -219,7 +206,7 @@ public final class JavaConstructorResolver {
|
|||||||
|
|
||||||
constructorDescriptor.initialize(classDescriptor.getTypeConstructor().getParameters(),
|
constructorDescriptor.initialize(classDescriptor.getTypeConstructor().getParameters(),
|
||||||
valueParameterDescriptors.getDescriptors(),
|
valueParameterDescriptors.getDescriptors(),
|
||||||
DescriptorResolverUtils.resolveVisibility(psiConstructor, constructorAnnotation),
|
DescriptorResolverUtils.resolveVisibility(psiConstructor),
|
||||||
aStatic);
|
aStatic);
|
||||||
trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
|
trace.record(BindingContext.CONSTRUCTOR, psiConstructor, constructorDescriptor);
|
||||||
return constructorDescriptor;
|
return constructorDescriptor;
|
||||||
|
|||||||
+32
-42
@@ -34,7 +34,6 @@ import org.jetbrains.jet.lang.resolve.java.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
import org.jetbrains.jet.lang.resolve.java.descriptor.ClassDescriptorFromJvmBytecode;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeMethodSignatureData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.SignaturesPropagationData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.*;
|
import org.jetbrains.jet.lang.resolve.java.provider.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -115,11 +114,6 @@ public final class JavaFunctionResolver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: ugly
|
|
||||||
if (method.getJetMethodAnnotation().hasPropertyFlag()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
PsiMethod psiMethod = method.getPsiMethod();
|
PsiMethod psiMethod = method.getPsiMethod();
|
||||||
PsiClass containingClass = psiMethod.getContainingClass();
|
PsiClass containingClass = psiMethod.getContainingClass();
|
||||||
if (declarationOrigin == KOTLIN) {
|
if (declarationOrigin == KOTLIN) {
|
||||||
@@ -139,7 +133,7 @@ public final class JavaFunctionResolver {
|
|||||||
ownerDescriptor,
|
ownerDescriptor,
|
||||||
annotationResolver.resolveAnnotations(psiMethod),
|
annotationResolver.resolveAnnotations(psiMethod),
|
||||||
Name.identifier(method.getName()),
|
Name.identifier(method.getName()),
|
||||||
DescriptorKindUtils.flagsToKind(method.getJetMethodAnnotation().kind())
|
CallableMemberDescriptor.Kind.DECLARATION
|
||||||
);
|
);
|
||||||
|
|
||||||
String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName();
|
String context = "method " + method.getName() + " in class " + psiClass.getQualifiedName();
|
||||||
@@ -159,7 +153,7 @@ public final class JavaFunctionResolver {
|
|||||||
List<String> signatureErrors = Lists.newArrayList();
|
List<String> signatureErrors = Lists.newArrayList();
|
||||||
|
|
||||||
List<FunctionDescriptor> superFunctions;
|
List<FunctionDescriptor> superFunctions;
|
||||||
if (ownerDescriptor instanceof ClassDescriptor && !method.getJetMethodAnnotation().isDefined()) { // don't propagate for Kotlin functions
|
if (ownerDescriptor instanceof ClassDescriptor) {
|
||||||
SignaturesPropagationData signaturesPropagationData = new SignaturesPropagationData(
|
SignaturesPropagationData signaturesPropagationData = new SignaturesPropagationData(
|
||||||
(ClassDescriptor) ownerDescriptor, returnType, valueParameterDescriptors, methodTypeParameters, method, trace);
|
(ClassDescriptor) ownerDescriptor, returnType, valueParameterDescriptors, methodTypeParameters, method, trace);
|
||||||
superFunctions = signaturesPropagationData.getSuperFunctions();
|
superFunctions = signaturesPropagationData.getSuperFunctions();
|
||||||
@@ -192,8 +186,8 @@ public final class JavaFunctionResolver {
|
|||||||
methodTypeParameters,
|
methodTypeParameters,
|
||||||
valueParameterDescriptors.getDescriptors(),
|
valueParameterDescriptors.getDescriptors(),
|
||||||
returnType,
|
returnType,
|
||||||
DescriptorResolverUtils.resolveModality(method, method.isFinal()),
|
Modality.convertFromFlags(method.isAbstract(), !method.isFinal()),
|
||||||
DescriptorResolverUtils.resolveVisibility(psiMethod, method.getJetMethodAnnotation()),
|
DescriptorResolverUtils.resolveVisibility(psiMethod),
|
||||||
/*isInline = */ false
|
/*isInline = */ false
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -210,8 +204,8 @@ public final class JavaFunctionResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!RawTypesCheck.hasRawTypesInHierarchicalSignature(psiMethod)
|
if (!RawTypesCheck.hasRawTypesInHierarchicalSignature(psiMethod)
|
||||||
&& JavaMethodSignatureUtil.isMethodReturnTypeCompatible(psiMethod)
|
&& JavaMethodSignatureUtil.isMethodReturnTypeCompatible(psiMethod)
|
||||||
&& !containsErrorType(superFunctions, functionDescriptorImpl)) {
|
&& !containsErrorType(superFunctions, functionDescriptorImpl)) {
|
||||||
if (signatureErrors.isEmpty()) {
|
if (signatureErrors.isEmpty()) {
|
||||||
checkFunctionsOverrideCorrectly(method, superFunctions, functionDescriptorImpl);
|
checkFunctionsOverrideCorrectly(method, superFunctions, functionDescriptorImpl);
|
||||||
}
|
}
|
||||||
@@ -276,13 +270,11 @@ public final class JavaFunctionResolver {
|
|||||||
|
|
||||||
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
|
Set<SimpleFunctionDescriptor> functionsFromCurrent = Sets.newHashSet();
|
||||||
for (PsiMethodWrapper method : namedMembers.getMethods()) {
|
for (PsiMethodWrapper method : namedMembers.getMethods()) {
|
||||||
SimpleFunctionDescriptor function = resolveMethodToFunctionDescriptor(psiClass, method, scopeData.getDeclarationOrigin(), owner, true);
|
SimpleFunctionDescriptor function =
|
||||||
|
resolveMethodToFunctionDescriptor(psiClass, method, scopeData.getDeclarationOrigin(), owner, true);
|
||||||
if (function != null) {
|
if (function != null) {
|
||||||
functionsFromCurrent.add(function);
|
functionsFromCurrent.add(function);
|
||||||
|
ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamAdapter(function));
|
||||||
if (!DescriptorResolverUtils.isKotlinClass(psiClass)) {
|
|
||||||
ContainerUtil.addIfNotNull(functionsFromCurrent, resolveSamAdapter(function));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -296,20 +288,20 @@ public final class JavaFunctionResolver {
|
|||||||
ClassDescriptor classDescriptor = (ClassDescriptor) owner;
|
ClassDescriptor classDescriptor = (ClassDescriptor) owner;
|
||||||
|
|
||||||
OverrideResolver.generateOverridesInFunctionGroup(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor,
|
OverrideResolver.generateOverridesInFunctionGroup(methodName, functionsFromSupertypes, functionsFromCurrent, classDescriptor,
|
||||||
new OverrideResolver.DescriptorSink() {
|
new OverrideResolver.DescriptorSink() {
|
||||||
@Override
|
@Override
|
||||||
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
|
public void addToScope(@NotNull CallableMemberDescriptor fakeOverride) {
|
||||||
fakeOverrides.add((FunctionDescriptor) fakeOverride);
|
fakeOverrides.add((FunctionDescriptor) fakeOverride);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void conflict(
|
public void conflict(
|
||||||
@NotNull CallableMemberDescriptor fromSuper,
|
@NotNull CallableMemberDescriptor fromSuper,
|
||||||
@NotNull CallableMemberDescriptor fromCurrent
|
@NotNull CallableMemberDescriptor fromCurrent
|
||||||
) {
|
) {
|
||||||
// nop
|
// nop
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
OverrideResolver.resolveUnknownVisibilities(fakeOverrides, trace);
|
OverrideResolver.resolveUnknownVisibilities(fakeOverrides, trace);
|
||||||
@@ -426,18 +418,12 @@ public final class JavaFunctionResolver {
|
|||||||
@NotNull TypeVariableResolver typeVariableResolver
|
@NotNull TypeVariableResolver typeVariableResolver
|
||||||
) {
|
) {
|
||||||
|
|
||||||
String returnTypeFromAnnotation = method.getJetMethodAnnotation().returnType();
|
TypeUsage typeUsage = JavaTypeTransformer
|
||||||
|
.adjustTypeUsageWithMutabilityAnnotations(method.getPsiMethod(), TypeUsage.MEMBER_SIGNATURE_COVARIANT);
|
||||||
|
JetType transformedType = typeTransformer.transformToType(returnType, typeUsage, typeVariableResolver);
|
||||||
|
|
||||||
JetType transformedType;
|
if (JavaAnnotationResolver
|
||||||
if (returnTypeFromAnnotation.length() > 0) {
|
.findAnnotationWithExternal(method.getPsiMethod(), JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString()) !=
|
||||||
transformedType = typeTransformer.transformToType(returnTypeFromAnnotation, typeVariableResolver);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
TypeUsage typeUsage = JavaTypeTransformer.adjustTypeUsageWithMutabilityAnnotations(method.getPsiMethod(), TypeUsage.MEMBER_SIGNATURE_COVARIANT);
|
|
||||||
transformedType = typeTransformer.transformToType(returnType, typeUsage, typeVariableResolver);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (JavaAnnotationResolver.findAnnotationWithExternal(method.getPsiMethod(), JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString()) !=
|
|
||||||
null) {
|
null) {
|
||||||
return TypeUtils.makeNullableAsSpecified(transformedType, false);
|
return TypeUtils.makeNullableAsSpecified(transformedType, false);
|
||||||
}
|
}
|
||||||
@@ -473,7 +459,11 @@ public final class JavaFunctionResolver {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SimpleFunctionDescriptor recordSamConstructor(ClassDescriptorFromJvmBytecode klass, SimpleFunctionDescriptor constructorFunction, BindingTrace trace) {
|
private static SimpleFunctionDescriptor recordSamConstructor(
|
||||||
|
ClassDescriptorFromJvmBytecode klass,
|
||||||
|
SimpleFunctionDescriptor constructorFunction,
|
||||||
|
BindingTrace trace
|
||||||
|
) {
|
||||||
trace.record(JavaBindingContext.SAM_CONSTRUCTOR_TO_INTERFACE, constructorFunction, klass);
|
trace.record(JavaBindingContext.SAM_CONSTRUCTOR_TO_INTERFACE, constructorFunction, klass);
|
||||||
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, constructorFunction, klass);
|
trace.record(BindingContext.SOURCE_DESCRIPTOR_FOR_SYNTHESIZED, constructorFunction, klass);
|
||||||
return constructorFunction;
|
return constructorFunction;
|
||||||
|
|||||||
-9
@@ -20,8 +20,6 @@ import com.intellij.psi.PsiClass;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassObjectAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.ClassPsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
|
|
||||||
@@ -56,19 +54,12 @@ public final class JavaInnerClassResolver {
|
|||||||
PsiClass[] innerPsiClasses = psiClass.getInnerClasses();
|
PsiClass[] innerPsiClasses = psiClass.getInnerClasses();
|
||||||
List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length);
|
List<ClassDescriptor> result = new ArrayList<ClassDescriptor>(innerPsiClasses.length);
|
||||||
for (PsiClass innerPsiClass : innerPsiClasses) {
|
for (PsiClass innerPsiClass : innerPsiClasses) {
|
||||||
if (shouldBeIgnored(innerPsiClass)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass);
|
ClassDescriptor classDescriptor = resolveInnerClass(innerPsiClass);
|
||||||
result.add(classDescriptor);
|
result.add(classDescriptor);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean shouldBeIgnored(PsiClass innerPsiClass) {
|
|
||||||
return JetClassObjectAnnotation.get(innerPsiClass).isDefined();
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) {
|
private ClassDescriptor resolveInnerClass(@NotNull PsiClass innerPsiClass) {
|
||||||
String name = innerPsiClass.getQualifiedName();
|
String name = innerPsiClass.getQualifiedName();
|
||||||
|
|||||||
+1
-2
@@ -37,7 +37,6 @@ import org.jetbrains.jet.lang.resolve.java.provider.MembersCache;
|
|||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaBaseScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaBaseScope;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaClassStaticMembersScope;
|
||||||
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScopeWithoutMembers;
|
import org.jetbrains.jet.lang.resolve.java.scope.JavaPackageScopeWithoutMembers;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiClassWrapper;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
@@ -201,7 +200,7 @@ public final class JavaNamespaceResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isOldKotlinPackageClass(@NotNull PsiClass psiClass) {
|
private static boolean isOldKotlinPackageClass(@NotNull PsiClass psiClass) {
|
||||||
return new PsiClassWrapper(psiClass).getJetPackageClass().isDefined();
|
return hasAnnotation(psiClass, JvmStdlibNames.JET_PACKAGE_CLASS.getFqName());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean hasKotlinPackageAnnotation(@NotNull PsiClass psiClass) {
|
private static boolean hasKotlinPackageAnnotation(@NotNull PsiClass psiClass) {
|
||||||
|
|||||||
+13
-19
@@ -30,8 +30,6 @@ import org.jetbrains.jet.lang.resolve.*;
|
|||||||
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData;
|
import org.jetbrains.jet.lang.resolve.java.kotlinSignature.AlternativeFieldSignatureData;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.DescriptorKindUtils;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetMethodAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
import org.jetbrains.jet.lang.resolve.java.provider.NamedMembers;
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
import org.jetbrains.jet.lang.resolve.java.provider.PsiDeclarationProvider;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.*;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.*;
|
||||||
@@ -45,6 +43,7 @@ import java.util.*;
|
|||||||
|
|
||||||
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.JAVA;
|
||||||
|
|
||||||
|
//TODO: getters and setter are not working
|
||||||
public final class JavaPropertyResolver {
|
public final class JavaPropertyResolver {
|
||||||
|
|
||||||
private JavaSemanticServices semanticServices;
|
private JavaSemanticServices semanticServices;
|
||||||
@@ -174,17 +173,16 @@ public final class JavaPropertyResolver {
|
|||||||
|
|
||||||
PropertyPsiDataElement characteristicMember = psiData.getCharacteristicMember();
|
PropertyPsiDataElement characteristicMember = psiData.getCharacteristicMember();
|
||||||
|
|
||||||
Visibility visibility = DescriptorResolverUtils.resolveVisibility(psiData.getCharacteristicPsi(), null);
|
Visibility visibility = DescriptorResolverUtils.resolveVisibility(psiData.getCharacteristicPsi());
|
||||||
CallableMemberDescriptor.Kind kind = CallableMemberDescriptor.Kind.DECLARATION;
|
CallableMemberDescriptor.Kind kind = CallableMemberDescriptor.Kind.DECLARATION;
|
||||||
|
|
||||||
PropertyPsiDataElement getter = psiData.getGetter();
|
PropertyPsiDataElement getter = psiData.getGetter();
|
||||||
if (getter != null) {
|
if (getter != null) {
|
||||||
JetMethodAnnotation methodAnnotation = ((PsiMethodWrapper) getter.getMember()).getJetMethodAnnotation();
|
visibility = DescriptorResolverUtils.resolveVisibility(psiData.getCharacteristicPsi());
|
||||||
visibility = DescriptorResolverUtils.resolveVisibility(psiData.getCharacteristicPsi(), methodAnnotation);
|
|
||||||
kind = DescriptorKindUtils.flagsToKind(methodAnnotation.kind());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
PropertyDescriptorImpl propertyDescriptor = createPropertyDescriptor(owner, propertyName, psiData, isFinal, isVar, visibility, kind);
|
PropertyDescriptorImpl propertyDescriptor =
|
||||||
|
createPropertyDescriptor(owner, propertyName, psiData, isFinal, isVar, visibility, kind);
|
||||||
|
|
||||||
PropertyGetterDescriptorImpl getterDescriptor = resolveGetter(visibility, kind, getter, propertyDescriptor);
|
PropertyGetterDescriptorImpl getterDescriptor = resolveGetter(visibility, kind, getter, propertyDescriptor);
|
||||||
PropertySetterDescriptorImpl setterDescriptor = resolveSetter(psiData, kind, propertyDescriptor);
|
PropertySetterDescriptorImpl setterDescriptor = resolveSetter(psiData, kind, propertyDescriptor);
|
||||||
@@ -209,9 +207,7 @@ public final class JavaPropertyResolver {
|
|||||||
);
|
);
|
||||||
initializeSetterAndGetter(propertyDescriptor, getterDescriptor, setterDescriptor, propertyType, psiData);
|
initializeSetterAndGetter(propertyDescriptor, getterDescriptor, setterDescriptor, propertyType, psiData);
|
||||||
|
|
||||||
if (kind == CallableMemberDescriptor.Kind.DECLARATION) {
|
trace.record(BindingContext.VARIABLE, psiData.getCharacteristicPsi(), propertyDescriptor);
|
||||||
trace.record(BindingContext.VARIABLE, psiData.getCharacteristicPsi(), propertyDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (scopeData.getDeclarationOrigin() == JAVA) {
|
if (scopeData.getDeclarationOrigin() == JAVA) {
|
||||||
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, propertyDescriptor);
|
trace.record(JavaBindingContext.IS_DECLARED_IN_JAVA, propertyDescriptor);
|
||||||
@@ -277,8 +273,8 @@ public final class JavaPropertyResolver {
|
|||||||
return new PropertyDescriptorImpl(
|
return new PropertyDescriptorImpl(
|
||||||
owner,
|
owner,
|
||||||
annotationResolver.resolveAnnotations(psiData.getCharacteristicPsi()),
|
annotationResolver.resolveAnnotations(psiData.getCharacteristicPsi()),
|
||||||
DescriptorResolverUtils.resolveModality(psiData.getCharacteristicMember().getMember(),
|
Modality.convertFromFlags(psiData.getCharacteristicMember().getMember().isAbstract(),
|
||||||
isFinal || psiData.isPropertyForNamedObject()),
|
!(isFinal || psiData.isPropertyForNamedObject())),
|
||||||
visibility,
|
visibility,
|
||||||
isVar,
|
isVar,
|
||||||
propertyName,
|
propertyName,
|
||||||
@@ -310,6 +306,7 @@ public final class JavaPropertyResolver {
|
|||||||
return propertyType;
|
return propertyType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: doesn't work
|
||||||
private static void initializeSetterAndGetter(
|
private static void initializeSetterAndGetter(
|
||||||
@NotNull PropertyDescriptor propertyDescriptor,
|
@NotNull PropertyDescriptor propertyDescriptor,
|
||||||
@Nullable PropertyGetterDescriptorImpl getterDescriptor,
|
@Nullable PropertyGetterDescriptorImpl getterDescriptor,
|
||||||
@@ -325,13 +322,11 @@ public final class JavaPropertyResolver {
|
|||||||
assert setter != null;
|
assert setter != null;
|
||||||
List<PsiParameterWrapper> parameters = ((PsiMethodWrapper) setter.getMember()).getParameters();
|
List<PsiParameterWrapper> parameters = ((PsiMethodWrapper) setter.getMember()).getParameters();
|
||||||
assert parameters.size() != 0;
|
assert parameters.size() != 0;
|
||||||
int valueIndex = parameters.size() - 1;
|
|
||||||
PsiParameterWrapper valueParameter = parameters.get(valueIndex);
|
|
||||||
setterDescriptor.initialize(new ValueParameterDescriptorImpl(
|
setterDescriptor.initialize(new ValueParameterDescriptorImpl(
|
||||||
setterDescriptor,
|
setterDescriptor,
|
||||||
0,
|
0,
|
||||||
Collections.<AnnotationDescriptor>emptyList(),
|
Collections.<AnnotationDescriptor>emptyList(),
|
||||||
Name.identifierNoValidate(valueParameter.getJetValueParameter().name()),
|
Name.identifierNoValidate(""),
|
||||||
propertyDescriptor.getType(),
|
propertyDescriptor.getType(),
|
||||||
false,
|
false,
|
||||||
null));
|
null));
|
||||||
@@ -368,12 +363,11 @@ public final class JavaPropertyResolver {
|
|||||||
if (setter == null) {
|
if (setter == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
Visibility setterVisibility = DescriptorResolverUtils.resolveVisibility(setter.getMember().getPsiMember(), null);
|
Visibility setterVisibility = DescriptorResolverUtils.resolveVisibility(setter.getMember().getPsiMember());
|
||||||
if (setter.getMember() instanceof PsiMethodWrapper) {
|
if (setter.getMember() instanceof PsiMethodWrapper) {
|
||||||
setterVisibility = DescriptorResolverUtils.resolveVisibility(
|
setterVisibility = DescriptorResolverUtils.resolveVisibility(
|
||||||
setter.getMember().getPsiMember(),
|
setter.getMember().getPsiMember()
|
||||||
((PsiMethodWrapper) setter.getMember())
|
);
|
||||||
.getJetMethodAnnotation());
|
|
||||||
}
|
}
|
||||||
return new PropertySetterDescriptorImpl(
|
return new PropertySetterDescriptorImpl(
|
||||||
propertyDescriptor,
|
propertyDescriptor,
|
||||||
|
|||||||
+70
-56
@@ -21,12 +21,14 @@ import com.intellij.psi.*;
|
|||||||
import jet.typeinfo.TypeInfoVariance;
|
import jet.typeinfo.TypeInfoVariance;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.ClassifierDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
|
import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl;
|
||||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
@@ -72,7 +74,10 @@ public final class JavaSignatureResolver {
|
|||||||
@Nullable
|
@Nullable
|
||||||
private final List<JetType> upperBoundsForKotlin;
|
private final List<JetType> upperBoundsForKotlin;
|
||||||
|
|
||||||
private TypeParameterDescriptorInitialization(@NotNull TypeParameterDescriptorImpl descriptor, @NotNull PsiTypeParameter psiTypeParameter) {
|
private TypeParameterDescriptorInitialization(
|
||||||
|
@NotNull TypeParameterDescriptorImpl descriptor,
|
||||||
|
@NotNull PsiTypeParameter psiTypeParameter
|
||||||
|
) {
|
||||||
this.origin = TypeParameterDescriptorOrigin.JAVA;
|
this.origin = TypeParameterDescriptorOrigin.JAVA;
|
||||||
this.descriptor = descriptor;
|
this.descriptor = descriptor;
|
||||||
this.psiTypeParameter = psiTypeParameter;
|
this.psiTypeParameter = psiTypeParameter;
|
||||||
@@ -96,7 +101,6 @@ public final class JavaSignatureResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private static PsiTypeParameter getPsiTypeParameterByName(PsiTypeParameterListOwner clazz, String name) {
|
private static PsiTypeParameter getPsiTypeParameterByName(PsiTypeParameterListOwner clazz, String name) {
|
||||||
for (PsiTypeParameter typeParameter : clazz.getTypeParameters()) {
|
for (PsiTypeParameter typeParameter : clazz.getTypeParameters()) {
|
||||||
@@ -108,7 +112,6 @@ public final class JavaSignatureResolver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private abstract class JetSignatureTypeParameterVisitor extends JetSignatureExceptionsAdapter {
|
private abstract class JetSignatureTypeParameterVisitor extends JetSignatureExceptionsAdapter {
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -124,8 +127,8 @@ public final class JavaSignatureResolver {
|
|||||||
@NotNull PsiTypeParameterListOwner psiOwner,
|
@NotNull PsiTypeParameterListOwner psiOwner,
|
||||||
@NotNull String name,
|
@NotNull String name,
|
||||||
@NotNull TypeVariableResolver typeVariableResolver,
|
@NotNull TypeVariableResolver typeVariableResolver,
|
||||||
@NotNull TypeParameterDescriptorImpl typeParameterDescriptor)
|
@NotNull TypeParameterDescriptorImpl typeParameterDescriptor
|
||||||
{
|
) {
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
throw new IllegalStateException();
|
throw new IllegalStateException();
|
||||||
}
|
}
|
||||||
@@ -164,7 +167,8 @@ public final class JavaSignatureResolver {
|
|||||||
@Override
|
@Override
|
||||||
public void visitFormalTypeParameterEnd() {
|
public void visitFormalTypeParameterEnd() {
|
||||||
PsiTypeParameter psiTypeParameter = getPsiTypeParameterByName(psiOwner, name);
|
PsiTypeParameter psiTypeParameter = getPsiTypeParameterByName(psiOwner, name);
|
||||||
TypeParameterDescriptorInitialization typeParameterDescriptorInitialization = new TypeParameterDescriptorInitialization(typeParameterDescriptor, psiTypeParameter, upperBounds);
|
TypeParameterDescriptorInitialization typeParameterDescriptorInitialization =
|
||||||
|
new TypeParameterDescriptorInitialization(typeParameterDescriptor, psiTypeParameter, upperBounds);
|
||||||
done(typeParameterDescriptorInitialization);
|
done(typeParameterDescriptorInitialization);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -182,7 +186,11 @@ public final class JavaSignatureResolver {
|
|||||||
private final TypeVariableResolver typeVariableResolver;
|
private final TypeVariableResolver typeVariableResolver;
|
||||||
|
|
||||||
|
|
||||||
private JetSignatureTypeParametersVisitor(@NotNull DeclarationDescriptor containingDeclaration, @NotNull PsiTypeParameterListOwner psiOwner, @NotNull String context) {
|
private JetSignatureTypeParametersVisitor(
|
||||||
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
|
@NotNull PsiTypeParameterListOwner psiOwner,
|
||||||
|
@NotNull String context
|
||||||
|
) {
|
||||||
this.containingDeclaration = containingDeclaration;
|
this.containingDeclaration = containingDeclaration;
|
||||||
this.psiOwner = psiOwner;
|
this.psiOwner = psiOwner;
|
||||||
|
|
||||||
@@ -219,37 +227,41 @@ public final class JavaSignatureResolver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see #resolveMethodTypeParametersFromJetSignature(String, PsiMethod, DeclarationDescriptor)
|
* @see #resolveMethodTypeParametersFromJetSignature(String, PsiMethod, DeclarationDescriptor)
|
||||||
*/
|
*/
|
||||||
private List<TypeParameterDescriptorInitialization> resolveClassTypeParametersFromJetSignature(String jetSignature,
|
private List<TypeParameterDescriptorInitialization> resolveClassTypeParametersFromJetSignature(
|
||||||
final PsiClass clazz, final ClassDescriptor classDescriptor) {
|
String jetSignature,
|
||||||
|
final PsiClass clazz, final ClassDescriptor classDescriptor
|
||||||
|
) {
|
||||||
String context = "class " + clazz.getQualifiedName();
|
String context = "class " + clazz.getQualifiedName();
|
||||||
JetSignatureTypeParametersVisitor jetSignatureTypeParametersVisitor = new JetSignatureTypeParametersVisitor(classDescriptor, clazz, context) {
|
JetSignatureTypeParametersVisitor jetSignatureTypeParametersVisitor =
|
||||||
@Override
|
new JetSignatureTypeParametersVisitor(classDescriptor, clazz, context) {
|
||||||
public JetSignatureVisitor visitSuperclass() {
|
@Override
|
||||||
// TODO
|
public JetSignatureVisitor visitSuperclass() {
|
||||||
return new JetSignatureAdapter();
|
// TODO
|
||||||
}
|
return new JetSignatureAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JetSignatureVisitor visitInterface() {
|
public JetSignatureVisitor visitInterface() {
|
||||||
// TODO
|
// TODO
|
||||||
return new JetSignatureAdapter();
|
return new JetSignatureAdapter();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
new JetSignatureReader(jetSignature).accept(jetSignatureTypeParametersVisitor);
|
new JetSignatureReader(jetSignature).accept(jetSignatureTypeParametersVisitor);
|
||||||
return jetSignatureTypeParametersVisitor.r;
|
return jetSignatureTypeParametersVisitor.r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private static List<TypeParameterDescriptorInitialization> makeUninitializedTypeParameters(
|
private static List<TypeParameterDescriptorInitialization> makeUninitializedTypeParameters(
|
||||||
@NotNull DeclarationDescriptor containingDeclaration,
|
@NotNull DeclarationDescriptor containingDeclaration,
|
||||||
@NotNull PsiTypeParameter[] typeParameters
|
@NotNull PsiTypeParameter[] typeParameters
|
||||||
) {
|
) {
|
||||||
List<TypeParameterDescriptorInitialization> result = Lists.newArrayList();
|
List<TypeParameterDescriptorInitialization> result = Lists.newArrayList();
|
||||||
for (PsiTypeParameter typeParameter : typeParameters) {
|
for (PsiTypeParameter typeParameter : typeParameters) {
|
||||||
TypeParameterDescriptorInitialization typeParameterDescriptor = makeUninitializedTypeParameter(containingDeclaration, typeParameter);
|
TypeParameterDescriptorInitialization typeParameterDescriptor =
|
||||||
|
makeUninitializedTypeParameter(containingDeclaration, typeParameter);
|
||||||
result.add(typeParameterDescriptor);
|
result.add(typeParameterDescriptor);
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
@@ -271,12 +283,15 @@ public final class JavaSignatureResolver {
|
|||||||
return new TypeParameterDescriptorInitialization(typeParameterDescriptor, psiTypeParameter);
|
return new TypeParameterDescriptorInitialization(typeParameterDescriptor, psiTypeParameter);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initializeTypeParameter(TypeParameterDescriptorInitialization typeParameter, TypeVariableResolver typeVariableByPsiResolver) {
|
private void initializeTypeParameter(
|
||||||
|
TypeParameterDescriptorInitialization typeParameter,
|
||||||
|
TypeVariableResolver typeVariableByPsiResolver
|
||||||
|
) {
|
||||||
TypeParameterDescriptorImpl typeParameterDescriptor = typeParameter.descriptor;
|
TypeParameterDescriptorImpl typeParameterDescriptor = typeParameter.descriptor;
|
||||||
if (typeParameter.origin == TypeParameterDescriptorOrigin.KOTLIN) {
|
if (typeParameter.origin == TypeParameterDescriptorOrigin.KOTLIN) {
|
||||||
List<JetType> upperBoundsForKotlin = typeParameter.upperBoundsForKotlin;
|
List<JetType> upperBoundsForKotlin = typeParameter.upperBoundsForKotlin;
|
||||||
assert upperBoundsForKotlin != null;
|
assert upperBoundsForKotlin != null;
|
||||||
if (upperBoundsForKotlin.size() == 0){
|
if (upperBoundsForKotlin.size() == 0) {
|
||||||
typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType());
|
typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -289,15 +304,19 @@ public final class JavaSignatureResolver {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
PsiClassType[] referencedTypes = typeParameter.psiTypeParameter.getExtendsList().getReferencedTypes();
|
PsiClassType[] referencedTypes = typeParameter.psiTypeParameter.getExtendsList().getReferencedTypes();
|
||||||
if (referencedTypes.length == 0){
|
if (referencedTypes.length == 0) {
|
||||||
typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType());
|
typeParameterDescriptor.addUpperBound(KotlinBuiltIns.getInstance().getNullableAnyType());
|
||||||
}
|
}
|
||||||
else if (referencedTypes.length == 1) {
|
else if (referencedTypes.length == 1) {
|
||||||
typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer().transformToType(referencedTypes[0], TypeUsage.UPPER_BOUND, typeVariableByPsiResolver));
|
typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer()
|
||||||
|
.transformToType(referencedTypes[0], TypeUsage.UPPER_BOUND,
|
||||||
|
typeVariableByPsiResolver));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (PsiClassType referencedType : referencedTypes) {
|
for (PsiClassType referencedType : referencedTypes) {
|
||||||
typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer().transformToType(referencedType, TypeUsage.UPPER_BOUND, typeVariableByPsiResolver));
|
typeParameterDescriptor.addUpperBound(semanticServices.getTypeTransformer()
|
||||||
|
.transformToType(referencedType, TypeUsage.UPPER_BOUND,
|
||||||
|
typeVariableByPsiResolver));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -319,22 +338,22 @@ public final class JavaSignatureResolver {
|
|||||||
for (TypeParameterDescriptorInitialization psiTypeParameter : typeParametersInitialization) {
|
for (TypeParameterDescriptorInitialization psiTypeParameter : typeParametersInitialization) {
|
||||||
prevTypeParameters.add(psiTypeParameter.descriptor);
|
prevTypeParameters.add(psiTypeParameter.descriptor);
|
||||||
initializeTypeParameter(psiTypeParameter,
|
initializeTypeParameter(psiTypeParameter,
|
||||||
TypeVariableResolvers.typeVariableResolverFromTypeParameters(typeParameters, typeParametersOwner, context));
|
TypeVariableResolvers
|
||||||
|
.typeVariableResolverFromTypeParameters(typeParameters, typeParametersOwner, context));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(
|
@NotNull
|
||||||
|
public static List<TypeParameterDescriptorInitialization> createUninitializedClassTypeParameters(
|
||||||
PsiClass psiClass, ClassDescriptor classDescriptor
|
PsiClass psiClass, ClassDescriptor classDescriptor
|
||||||
) {
|
) {
|
||||||
JetClassAnnotation jetClassAnnotation = JetClassAnnotation.get(psiClass);
|
List<TypeParameterDescriptorInitialization> result = Lists.newArrayList();
|
||||||
|
for (PsiTypeParameter typeParameter : psiClass.getTypeParameters()) {
|
||||||
if (jetClassAnnotation.signature().length() > 0) {
|
TypeParameterDescriptorInitialization typeParameterDescriptor = makeUninitializedTypeParameter(classDescriptor, typeParameter);
|
||||||
return resolveClassTypeParametersFromJetSignature(
|
result.add(typeParameterDescriptor);
|
||||||
jetClassAnnotation.signature(), psiClass, classDescriptor);
|
|
||||||
}
|
}
|
||||||
|
return result;
|
||||||
return makeUninitializedTypeParameters(classDescriptor, psiClass.getTypeParameters());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -343,15 +362,9 @@ public final class JavaSignatureResolver {
|
|||||||
@NotNull DeclarationDescriptor functionDescriptor
|
@NotNull DeclarationDescriptor functionDescriptor
|
||||||
) {
|
) {
|
||||||
|
|
||||||
List<TypeParameterDescriptorInitialization> typeParametersIntialization;
|
|
||||||
PsiMethod psiMethod = method.getPsiMethod();
|
PsiMethod psiMethod = method.getPsiMethod();
|
||||||
if (method.getJetMethodAnnotation().typeParameters().length() > 0) {
|
List<TypeParameterDescriptorInitialization> typeParametersIntialization =
|
||||||
typeParametersIntialization = resolveMethodTypeParametersFromJetSignature(
|
makeUninitializedTypeParameters(functionDescriptor, psiMethod.getTypeParameters());
|
||||||
method.getJetMethodAnnotation().typeParameters(), psiMethod, functionDescriptor);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
typeParametersIntialization = makeUninitializedTypeParameters(functionDescriptor, psiMethod.getTypeParameters());
|
|
||||||
}
|
|
||||||
|
|
||||||
PsiClass psiMethodContainingClass = psiMethod.getContainingClass();
|
PsiClass psiMethodContainingClass = psiMethod.getContainingClass();
|
||||||
assert psiMethodContainingClass != null;
|
assert psiMethodContainingClass != null;
|
||||||
@@ -370,15 +383,16 @@ public final class JavaSignatureResolver {
|
|||||||
/**
|
/**
|
||||||
* @see #resolveClassTypeParametersFromJetSignature(String, PsiClass, ClassDescriptor)
|
* @see #resolveClassTypeParametersFromJetSignature(String, PsiClass, ClassDescriptor)
|
||||||
*/
|
*/
|
||||||
private List<TypeParameterDescriptorInitialization> resolveMethodTypeParametersFromJetSignature(String jetSignature,
|
private List<TypeParameterDescriptorInitialization> resolveMethodTypeParametersFromJetSignature(
|
||||||
PsiMethod method, DeclarationDescriptor functionDescriptor)
|
String jetSignature,
|
||||||
{
|
PsiMethod method, DeclarationDescriptor functionDescriptor
|
||||||
|
) {
|
||||||
PsiClass methodContainingClass = method.getContainingClass();
|
PsiClass methodContainingClass = method.getContainingClass();
|
||||||
assert methodContainingClass != null;
|
assert methodContainingClass != null;
|
||||||
String context = "method " + method.getName() + " in class " + methodContainingClass.getQualifiedName();
|
String context = "method " + method.getName() + " in class " + methodContainingClass.getQualifiedName();
|
||||||
JetSignatureTypeParametersVisitor jetSignatureTypeParametersVisitor = new JetSignatureTypeParametersVisitor(functionDescriptor, method, context);
|
JetSignatureTypeParametersVisitor jetSignatureTypeParametersVisitor =
|
||||||
|
new JetSignatureTypeParametersVisitor(functionDescriptor, method, context);
|
||||||
new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(jetSignatureTypeParametersVisitor);
|
new JetSignatureReader(jetSignature).acceptFormalTypeParametersOnly(jetSignatureTypeParametersVisitor);
|
||||||
return jetSignatureTypeParametersVisitor.r;
|
return jetSignatureTypeParametersVisitor.r;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-58
@@ -18,7 +18,6 @@ package org.jetbrains.jet.lang.resolve.java.resolver;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import com.intellij.psi.PsiClassType;
|
import com.intellij.psi.PsiClassType;
|
||||||
import jet.typeinfo.TypeInfoVariance;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
@@ -33,10 +32,6 @@ import org.jetbrains.jet.lang.types.ErrorUtils;
|
|||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
import org.jetbrains.jet.lang.types.TypeUtils;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureAdapter;
|
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureExceptionsAdapter;
|
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureReader;
|
|
||||||
import org.jetbrains.jet.rt.signature.JetSignatureVisitor;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
import javax.inject.Inject;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -48,7 +43,6 @@ import static org.jetbrains.jet.lang.resolve.java.provider.DeclarationOrigin.KOT
|
|||||||
public final class JavaSupertypeResolver {
|
public final class JavaSupertypeResolver {
|
||||||
|
|
||||||
private BindingTrace trace;
|
private BindingTrace trace;
|
||||||
private JavaSemanticServices semanticServices;
|
|
||||||
private JavaTypeTransformer typeTransformer;
|
private JavaTypeTransformer typeTransformer;
|
||||||
private JavaClassResolver classResolver;
|
private JavaClassResolver classResolver;
|
||||||
|
|
||||||
@@ -57,11 +51,6 @@ public final class JavaSupertypeResolver {
|
|||||||
this.trace = trace;
|
this.trace = trace;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject
|
|
||||||
public void setSemanticServices(JavaSemanticServices semanticServices) {
|
|
||||||
this.semanticServices = semanticServices;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public void setTypeTransformer(JavaTypeTransformer typeTransformer) {
|
public void setTypeTransformer(JavaTypeTransformer typeTransformer) {
|
||||||
this.typeTransformer = typeTransformer;
|
this.typeTransformer = typeTransformer;
|
||||||
@@ -83,15 +72,10 @@ public final class JavaSupertypeResolver {
|
|||||||
|
|
||||||
String context = "class " + psiClass.getQualifiedName();
|
String context = "class " + psiClass.getQualifiedName();
|
||||||
|
|
||||||
if (psiClass.getJetClass().signature().length() > 0) {
|
TypeVariableResolver typeVariableResolverForSupertypes =
|
||||||
readSuperTypes(psiClass, typeParameters, classDescriptor, result, context);
|
TypeVariableResolvers.typeVariableResolverFromTypeParameters(typeParameters, classDescriptor, context);
|
||||||
}
|
transformSupertypeList(result, psiClass.getPsiClass().getExtendsListTypes(), typeVariableResolverForSupertypes);
|
||||||
else {
|
transformSupertypeList(result, psiClass.getPsiClass().getImplementsListTypes(), typeVariableResolverForSupertypes);
|
||||||
TypeVariableResolver typeVariableResolverForSupertypes =
|
|
||||||
TypeVariableResolvers.typeVariableResolverFromTypeParameters(typeParameters, classDescriptor, context);
|
|
||||||
transformSupertypeList(result, psiClass.getPsiClass().getExtendsListTypes(), typeVariableResolverForSupertypes);
|
|
||||||
transformSupertypeList(result, psiClass.getPsiClass().getImplementsListTypes(), typeVariableResolverForSupertypes);
|
|
||||||
}
|
|
||||||
|
|
||||||
reportIncompleteHierarchyForErrorTypes(classDescriptor, result);
|
reportIncompleteHierarchyForErrorTypes(classDescriptor, result);
|
||||||
|
|
||||||
@@ -101,43 +85,6 @@ public final class JavaSupertypeResolver {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void readSuperTypes(
|
|
||||||
PsiClassWrapper psiClass,
|
|
||||||
List<TypeParameterDescriptor> typeParameters,
|
|
||||||
ClassDescriptor classDescriptor,
|
|
||||||
final List<JetType> result,
|
|
||||||
String context
|
|
||||||
) {
|
|
||||||
final TypeVariableResolver typeVariableResolver =
|
|
||||||
TypeVariableResolvers.typeVariableResolverFromTypeParameters(typeParameters, classDescriptor, context);
|
|
||||||
|
|
||||||
new JetSignatureReader(psiClass.getJetClass().signature()).accept(new JetSignatureExceptionsAdapter() {
|
|
||||||
@Override
|
|
||||||
public JetSignatureVisitor visitFormalTypeParameter(String name, TypeInfoVariance variance, boolean reified) {
|
|
||||||
// TODO: collect
|
|
||||||
return new JetSignatureAdapter();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JetSignatureVisitor visitSuperclass() {
|
|
||||||
return new JetTypeJetSignatureReader(semanticServices, KotlinBuiltIns.getInstance(),
|
|
||||||
typeVariableResolver) {
|
|
||||||
@Override
|
|
||||||
protected void done(@NotNull JetType jetType) {
|
|
||||||
if (!jetType.equals(KotlinBuiltIns.getInstance().getAnyType())) {
|
|
||||||
result.add(jetType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public JetSignatureVisitor visitInterface() {
|
|
||||||
return visitSuperclass();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addBaseClass(
|
private void addBaseClass(
|
||||||
@NotNull PsiClassWrapper psiClass,
|
@NotNull PsiClassWrapper psiClass,
|
||||||
@NotNull ClassPsiDeclarationProvider classData,
|
@NotNull ClassPsiDeclarationProvider classData,
|
||||||
@@ -158,7 +105,7 @@ public final class JavaSupertypeResolver {
|
|||||||
else {
|
else {
|
||||||
//TODO: hack here
|
//TODO: hack here
|
||||||
result.add(KotlinBuiltIns.getInstance().getAnyType());
|
result.add(KotlinBuiltIns.getInstance().getAnyType());
|
||||||
// throw new IllegalStateException("Could not resolve java.lang.Object");
|
// throw new IllegalStateException("Could not resolve java.lang.Object");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-46
@@ -22,8 +22,8 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.impl.ValueParameterDescriptorImpl;
|
||||||
import org.jetbrains.jet.lang.resolve.java.*;
|
import org.jetbrains.jet.lang.resolve.java.*;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiParameterWrapper;
|
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiParameterWrapper;
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||||
@@ -49,34 +49,17 @@ public final class JavaValueParameterResolver {
|
|||||||
PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver
|
PsiParameterWrapper parameter, TypeVariableResolver typeVariableResolver
|
||||||
) {
|
) {
|
||||||
|
|
||||||
if (parameter.getJetTypeParameter().isDefined()) {
|
|
||||||
return JvmMethodParameterMeaning.typeInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
PsiType psiType = parameter.getPsiParameter().getType();
|
PsiType psiType = parameter.getPsiParameter().getType();
|
||||||
|
|
||||||
// TODO: must be very slow, make it lazy?
|
// TODO: must be very slow, make it lazy?
|
||||||
Name name = Name.identifier(getParameterName(i, parameter));
|
Name name = Name.identifier(getParameterName(i, parameter));
|
||||||
|
|
||||||
if (parameter.getJetValueParameter().name().length() > 0) {
|
TypeUsage typeUsage = JavaTypeTransformer
|
||||||
name = Name.identifier(parameter.getJetValueParameter().name());
|
.adjustTypeUsageWithMutabilityAnnotations(parameter.getPsiParameter(), TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT);
|
||||||
}
|
JetType outType = getTypeTransformer().transformToType(psiType, typeUsage, typeVariableResolver);
|
||||||
|
|
||||||
String typeFromAnnotation = parameter.getJetValueParameter().type();
|
|
||||||
boolean receiver = parameter.getJetValueParameter().receiver();
|
|
||||||
boolean hasDefaultValue = parameter.getJetValueParameter().hasDefaultValue();
|
|
||||||
|
|
||||||
JetType outType;
|
|
||||||
if (typeFromAnnotation.length() > 0) {
|
|
||||||
outType = getTypeTransformer().transformToType(typeFromAnnotation, typeVariableResolver);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
TypeUsage typeUsage = JavaTypeTransformer.adjustTypeUsageWithMutabilityAnnotations(parameter.getPsiParameter(), TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT);
|
|
||||||
outType = getTypeTransformer().transformToType(psiType, typeUsage, typeVariableResolver);
|
|
||||||
}
|
|
||||||
|
|
||||||
JetType varargElementType;
|
JetType varargElementType;
|
||||||
if (psiType instanceof PsiEllipsisType || parameter.getJetValueParameter().vararg()) {
|
if (psiType instanceof PsiEllipsisType) {
|
||||||
varargElementType = KotlinBuiltIns.getInstance().getArrayElementType(TypeUtils.makeNotNullable(outType));
|
varargElementType = KotlinBuiltIns.getInstance().getArrayElementType(TypeUtils.makeNotNullable(outType));
|
||||||
outType = TypeUtils.makeNotNullable(outType);
|
outType = TypeUtils.makeNotNullable(outType);
|
||||||
}
|
}
|
||||||
@@ -84,29 +67,24 @@ public final class JavaValueParameterResolver {
|
|||||||
varargElementType = null;
|
varargElementType = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (receiver) {
|
JetType transformedType;
|
||||||
return JvmMethodParameterMeaning.receiver(outType);
|
if (JavaAnnotationResolver
|
||||||
|
.findAnnotationWithExternal(parameter.getPsiParameter(), JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString()) !=
|
||||||
|
null) {
|
||||||
|
transformedType = TypeUtils.makeNullableAsSpecified(outType, false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
transformedType = outType;
|
||||||
JetType transformedType;
|
|
||||||
if (JavaAnnotationResolver.findAnnotationWithExternal(parameter.getPsiParameter(), JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().asString()) !=
|
|
||||||
null) {
|
|
||||||
transformedType = TypeUtils.makeNullableAsSpecified(outType, false);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
transformedType = outType;
|
|
||||||
}
|
|
||||||
return JvmMethodParameterMeaning.regular(new ValueParameterDescriptorImpl(
|
|
||||||
containingDeclaration,
|
|
||||||
i,
|
|
||||||
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
|
||||||
name,
|
|
||||||
transformedType,
|
|
||||||
hasDefaultValue,
|
|
||||||
varargElementType
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
return JvmMethodParameterMeaning.regular(new ValueParameterDescriptorImpl(
|
||||||
|
containingDeclaration,
|
||||||
|
i,
|
||||||
|
Collections.<AnnotationDescriptor>emptyList(), // TODO
|
||||||
|
name,
|
||||||
|
transformedType,
|
||||||
|
false,
|
||||||
|
varargElementType
|
||||||
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -182,9 +160,5 @@ public final class JavaValueParameterResolver {
|
|||||||
public static JvmMethodParameterMeaning regular(@NotNull ValueParameterDescriptor valueParameterDescriptor) {
|
public static JvmMethodParameterMeaning regular(@NotNull ValueParameterDescriptor valueParameterDescriptor) {
|
||||||
return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor);
|
return new JvmMethodParameterMeaning(JvmMethodParameterKind.REGULAR, null, valueParameterDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JvmMethodParameterMeaning typeInfo() {
|
|
||||||
return new JvmMethodParameterMeaning(JvmMethodParameterKind.TYPE_INFO, null, null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
-56
@@ -1,56 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2013 JetBrains s.r.o.
|
|
||||||
*
|
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
* you may not use this file except in compliance with the License.
|
|
||||||
* You may obtain a copy of the License at
|
|
||||||
*
|
|
||||||
* http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
*
|
|
||||||
* Unless required by applicable law or agreed to in writing, software
|
|
||||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
* See the License for the specific language governing permissions and
|
|
||||||
* limitations under the License.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.jet.lang.resolve.java.scope;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaSemanticServices;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.provider.KotlinNamespacePsiDeclarationProvider;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
|
||||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
|
||||||
|
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class JavaScopeForKotlinNamespace extends JavaPackageScope {
|
|
||||||
@NotNull
|
|
||||||
private final KotlinNamespacePsiDeclarationProvider declarationProvider;
|
|
||||||
|
|
||||||
public JavaScopeForKotlinNamespace(
|
|
||||||
@NotNull NamespaceDescriptor descriptor,
|
|
||||||
@NotNull KotlinNamespacePsiDeclarationProvider declarationProvider,
|
|
||||||
@NotNull FqName packageFQN,
|
|
||||||
@NotNull JavaSemanticServices semanticServices
|
|
||||||
) {
|
|
||||||
super(descriptor, declarationProvider, packageFQN, semanticServices);
|
|
||||||
this.declarationProvider = declarationProvider;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
protected Set<FunctionDescriptor> computeFunctionDescriptor(@NotNull Name name) {
|
|
||||||
return getResolver().resolveFunctionGroup(name, declarationProvider, descriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
@Override
|
|
||||||
protected Collection<ClassDescriptor> computeInnerClasses() {
|
|
||||||
return getResolver().resolveInnerClasses(declarationProvider);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-13
@@ -35,19 +35,6 @@ public final class PropertyPsiDataElement {
|
|||||||
private final TypeSource type;
|
private final TypeSource type;
|
||||||
@Nullable
|
@Nullable
|
||||||
private final TypeSource receiverType;
|
private final TypeSource receiverType;
|
||||||
|
|
||||||
|
|
||||||
public PropertyPsiDataElement(
|
|
||||||
@NotNull PsiMethodWrapper method,
|
|
||||||
boolean getter,
|
|
||||||
@NotNull TypeSource type,
|
|
||||||
@Nullable TypeSource receiverType
|
|
||||||
) {
|
|
||||||
this.member = method;
|
|
||||||
this.type = type;
|
|
||||||
this.receiverType = receiverType;
|
|
||||||
this.getter = getter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PropertyPsiDataElement(@NotNull PsiFieldWrapper field, @NotNull TypeSource type, @Nullable TypeSource receiverType) {
|
public PropertyPsiDataElement(@NotNull PsiFieldWrapper field, @NotNull TypeSource type, @Nullable TypeSource receiverType) {
|
||||||
this.member = field;
|
this.member = field;
|
||||||
|
|||||||
-21
@@ -18,8 +18,6 @@ package org.jetbrains.jet.lang.resolve.java.wrapper;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiClass;
|
import com.intellij.psi.PsiClass;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetClassAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetPackageClassAnnotation;
|
|
||||||
|
|
||||||
public class PsiClassWrapper {
|
public class PsiClassWrapper {
|
||||||
|
|
||||||
@@ -38,23 +36,4 @@ public class PsiClassWrapper {
|
|||||||
public PsiClass getPsiClass() {
|
public PsiClass getPsiClass() {
|
||||||
return psiClass;
|
return psiClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JetClassAnnotation jetClass;
|
|
||||||
private JetPackageClassAnnotation jetPackageClass;
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public JetClassAnnotation getJetClass() {
|
|
||||||
if (jetClass == null) {
|
|
||||||
jetClass = JetClassAnnotation.get(psiClass);
|
|
||||||
}
|
|
||||||
return jetClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public JetPackageClassAnnotation getJetPackageClass() {
|
|
||||||
if (jetPackageClass == null) {
|
|
||||||
jetPackageClass = JetPackageClassAnnotation.get(psiClass);
|
|
||||||
}
|
|
||||||
return jetPackageClass;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-26
@@ -22,8 +22,6 @@ import com.intellij.psi.PsiParameter;
|
|||||||
import com.intellij.psi.PsiType;
|
import com.intellij.psi.PsiType;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetConstructorAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetMethodAnnotation;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -33,8 +31,9 @@ public class PsiMethodWrapper extends PsiMemberWrapper {
|
|||||||
public PsiMethodWrapper(@NotNull PsiMethod psiMethod) {
|
public PsiMethodWrapper(@NotNull PsiMethod psiMethod) {
|
||||||
super(psiMethod);
|
super(psiMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PsiParameterWrapper> parameters;
|
private List<PsiParameterWrapper> parameters;
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public List<PsiParameterWrapper> getParameters() {
|
public List<PsiParameterWrapper> getParameters() {
|
||||||
if (parameters == null) {
|
if (parameters == null) {
|
||||||
@@ -47,29 +46,6 @@ public class PsiMethodWrapper extends PsiMemberWrapper {
|
|||||||
return parameters;
|
return parameters;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public PsiParameterWrapper getParameter(int i) {
|
|
||||||
return getParameters().get(i);
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetMethodAnnotation jetMethodAnnotation;
|
|
||||||
@NotNull
|
|
||||||
public JetMethodAnnotation getJetMethodAnnotation() {
|
|
||||||
if (jetMethodAnnotation == null) {
|
|
||||||
jetMethodAnnotation = JetMethodAnnotation.get(getPsiMethod());
|
|
||||||
}
|
|
||||||
return jetMethodAnnotation;
|
|
||||||
}
|
|
||||||
|
|
||||||
private JetConstructorAnnotation jetConstructorAnnotation;
|
|
||||||
@NotNull
|
|
||||||
public JetConstructorAnnotation getJetConstructorAnnotation() {
|
|
||||||
if (jetConstructorAnnotation == null) {
|
|
||||||
jetConstructorAnnotation = JetConstructorAnnotation.get(getPsiMethod());
|
|
||||||
}
|
|
||||||
return jetConstructorAnnotation;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isAbstract() {
|
public boolean isAbstract() {
|
||||||
return psiMember.hasModifierProperty(PsiModifier.ABSTRACT);
|
return psiMember.hasModifierProperty(PsiModifier.ABSTRACT);
|
||||||
|
|||||||
-20
@@ -18,36 +18,16 @@ package org.jetbrains.jet.lang.resolve.java.wrapper;
|
|||||||
|
|
||||||
import com.intellij.psi.PsiParameter;
|
import com.intellij.psi.PsiParameter;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetTypeParameterAnnotation;
|
|
||||||
import org.jetbrains.jet.lang.resolve.java.kt.JetValueParameterAnnotation;
|
|
||||||
|
|
||||||
public class PsiParameterWrapper {
|
public class PsiParameterWrapper {
|
||||||
private final PsiParameter psiParameter;
|
private final PsiParameter psiParameter;
|
||||||
|
|
||||||
public PsiParameterWrapper(@NotNull PsiParameter psiParameter) {
|
public PsiParameterWrapper(@NotNull PsiParameter psiParameter) {
|
||||||
this.psiParameter = psiParameter;
|
this.psiParameter = psiParameter;
|
||||||
|
|
||||||
this.jetValueParameter = JetValueParameterAnnotation.get(psiParameter);
|
|
||||||
this.jetTypeParameter = JetTypeParameterAnnotation.get(psiParameter);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
private final JetValueParameterAnnotation jetValueParameter;
|
|
||||||
@NotNull
|
|
||||||
private final JetTypeParameterAnnotation jetTypeParameter;
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public PsiParameter getPsiParameter() {
|
public PsiParameter getPsiParameter() {
|
||||||
return psiParameter;
|
return psiParameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public JetValueParameterAnnotation getJetValueParameter() {
|
|
||||||
return jetValueParameter;
|
|
||||||
}
|
|
||||||
|
|
||||||
@NotNull
|
|
||||||
public JetTypeParameterAnnotation getJetTypeParameter() {
|
|
||||||
return jetTypeParameter;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user