Get rid of trace in JavaClassResolver and JavaNamespaceResolver
Create TraceBasedErrorReporter which reports ABI errors to the trace
This commit is contained in:
+30
-26
@@ -22,19 +22,20 @@ import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolverImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.vfilefinder.VirtualFileFinder;
|
||||
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.JavaAnnotationArgumentResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeTransformer;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||
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.JavaPropertyResolver;
|
||||
@@ -50,19 +51,20 @@ public class InjectorForJavaDescriptorResolver {
|
||||
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
|
||||
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
|
||||
private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver;
|
||||
private final TraceBasedErrorReporter traceBasedErrorReporter;
|
||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||
private final PsiClassFinderImpl psiClassFinder;
|
||||
private final VirtualFileFinder virtualFileFinder;
|
||||
private final JavaClassResolver javaClassResolver;
|
||||
private final JavaAnnotationResolver javaAnnotationResolver;
|
||||
private final JavaAnnotationArgumentResolver javaAnnotationArgumentResolver;
|
||||
private final DeserializedDescriptorResolver deserializedDescriptorResolver;
|
||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||
private final JavaFunctionResolver javaFunctionResolver;
|
||||
private final JavaTypeParameterResolver javaTypeParameterResolver;
|
||||
private final JavaTypeTransformer javaTypeTransformer;
|
||||
private final JavaValueParameterResolver javaValueParameterResolver;
|
||||
private final DeserializedDescriptorResolver deserializedDescriptorResolver;
|
||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||
private final JavaSupertypeResolver javaSupertypeResolver;
|
||||
private final JavaConstructorResolver javaConstructorResolver;
|
||||
private final JavaPropertyResolver javaPropertyResolver;
|
||||
@@ -77,19 +79,20 @@ public class InjectorForJavaDescriptorResolver {
|
||||
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
|
||||
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
|
||||
this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl();
|
||||
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
|
||||
this.javaDescriptorResolver = new JavaDescriptorResolver();
|
||||
this.psiClassFinder = new PsiClassFinderImpl();
|
||||
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
|
||||
this.javaClassResolver = new JavaClassResolver();
|
||||
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
||||
this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver();
|
||||
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||
this.javaTypeParameterResolver = new JavaTypeParameterResolver();
|
||||
this.javaTypeTransformer = new JavaTypeTransformer();
|
||||
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
||||
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
||||
this.javaConstructorResolver = new JavaConstructorResolver();
|
||||
this.javaPropertyResolver = new JavaPropertyResolver();
|
||||
@@ -102,6 +105,8 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
fakeOverrideVisibilityResolver.setTrace(bindingTrace);
|
||||
|
||||
traceBasedErrorReporter.setTrace(bindingTrace);
|
||||
|
||||
this.javaDescriptorResolver.setClassResolver(javaClassResolver);
|
||||
this.javaDescriptorResolver.setConstructorResolver(javaConstructorResolver);
|
||||
this.javaDescriptorResolver.setFunctionResolver(javaFunctionResolver);
|
||||
@@ -112,13 +117,12 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaClassResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||
javaClassResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaClassResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassResolver.setTrace(bindingTrace);
|
||||
javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver);
|
||||
javaClassResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
@@ -128,6 +132,21 @@ public class InjectorForJavaDescriptorResolver {
|
||||
javaAnnotationArgumentResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaAnnotationArgumentResolver.setClassResolver(javaClassResolver);
|
||||
|
||||
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
|
||||
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
|
||||
deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver);
|
||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||
|
||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||
annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder);
|
||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaNamespaceResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaNamespaceResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaFunctionResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
|
||||
@@ -142,21 +161,6 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
javaValueParameterResolver.setTypeTransformer(javaTypeTransformer);
|
||||
|
||||
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
|
||||
deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver);
|
||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||
|
||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||
annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder);
|
||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaNamespaceResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaNamespaceResolver.setTrace(bindingTrace);
|
||||
javaNamespaceResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
||||
javaSupertypeResolver.setTrace(bindingTrace);
|
||||
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
||||
|
||||
+30
-26
@@ -34,6 +34,7 @@ import org.jetbrains.jet.lang.resolve.java.JavaClassFinderImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedExternalSignatureResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.FakeOverrideVisibilityResolverImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
|
||||
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
|
||||
import org.jetbrains.jet.lang.resolve.java.vfilefinder.VirtualFileFinder;
|
||||
import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
||||
@@ -55,13 +56,13 @@ import org.jetbrains.jet.lang.resolve.ScriptBodyResolver;
|
||||
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.JavaAnnotationArgumentResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaNamespaceResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaFunctionResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaTypeTransformer;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaValueParameterResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.DeserializedDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.AnnotationDescriptorDeserializer;
|
||||
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.JavaPropertyResolver;
|
||||
@@ -89,6 +90,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
private final TraceBasedExternalSignatureResolver traceBasedExternalSignatureResolver;
|
||||
private final TraceBasedJavaResolverCache traceBasedJavaResolverCache;
|
||||
private final FakeOverrideVisibilityResolverImpl fakeOverrideVisibilityResolver;
|
||||
private final TraceBasedErrorReporter traceBasedErrorReporter;
|
||||
private final NamespaceFactoryImpl namespaceFactory;
|
||||
private final VirtualFileFinder virtualFileFinder;
|
||||
private final DeclarationResolver declarationResolver;
|
||||
@@ -110,13 +112,13 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
private final JavaClassResolver javaClassResolver;
|
||||
private final JavaAnnotationResolver javaAnnotationResolver;
|
||||
private final JavaAnnotationArgumentResolver javaAnnotationArgumentResolver;
|
||||
private final DeserializedDescriptorResolver deserializedDescriptorResolver;
|
||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||
private final JavaFunctionResolver javaFunctionResolver;
|
||||
private final JavaTypeParameterResolver javaTypeParameterResolver;
|
||||
private final JavaTypeTransformer javaTypeTransformer;
|
||||
private final JavaValueParameterResolver javaValueParameterResolver;
|
||||
private final DeserializedDescriptorResolver deserializedDescriptorResolver;
|
||||
private final AnnotationDescriptorDeserializer annotationDescriptorDeserializer;
|
||||
private final JavaNamespaceResolver javaNamespaceResolver;
|
||||
private final JavaSupertypeResolver javaSupertypeResolver;
|
||||
private final JavaConstructorResolver javaConstructorResolver;
|
||||
private final JavaPropertyResolver javaPropertyResolver;
|
||||
@@ -145,6 +147,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.traceBasedExternalSignatureResolver = new TraceBasedExternalSignatureResolver();
|
||||
this.traceBasedJavaResolverCache = new TraceBasedJavaResolverCache();
|
||||
this.fakeOverrideVisibilityResolver = new FakeOverrideVisibilityResolverImpl();
|
||||
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
|
||||
this.namespaceFactory = new NamespaceFactoryImpl();
|
||||
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
|
||||
this.declarationResolver = new DeclarationResolver();
|
||||
@@ -166,13 +169,13 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.javaClassResolver = new JavaClassResolver();
|
||||
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
||||
this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver();
|
||||
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||
this.javaFunctionResolver = new JavaFunctionResolver();
|
||||
this.javaTypeParameterResolver = new JavaTypeParameterResolver();
|
||||
this.javaTypeTransformer = new JavaTypeTransformer();
|
||||
this.javaValueParameterResolver = new JavaValueParameterResolver();
|
||||
this.deserializedDescriptorResolver = new DeserializedDescriptorResolver();
|
||||
this.annotationDescriptorDeserializer = new AnnotationDescriptorDeserializer();
|
||||
this.javaNamespaceResolver = new JavaNamespaceResolver();
|
||||
this.javaSupertypeResolver = new JavaSupertypeResolver();
|
||||
this.javaConstructorResolver = new JavaConstructorResolver();
|
||||
this.javaPropertyResolver = new JavaPropertyResolver();
|
||||
@@ -228,6 +231,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
|
||||
fakeOverrideVisibilityResolver.setTrace(bindingTrace);
|
||||
|
||||
traceBasedErrorReporter.setTrace(bindingTrace);
|
||||
|
||||
this.namespaceFactory.setModuleDescriptor(moduleDescriptor);
|
||||
this.namespaceFactory.setTrace(bindingTrace);
|
||||
|
||||
@@ -299,13 +304,12 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
|
||||
javaClassResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaClassResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||
javaClassResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaClassResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaClassResolver.setKotlinDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassResolver.setTrace(bindingTrace);
|
||||
javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver);
|
||||
javaClassResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
@@ -315,6 +319,21 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
javaAnnotationArgumentResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaAnnotationArgumentResolver.setClassResolver(javaClassResolver);
|
||||
|
||||
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
|
||||
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
|
||||
deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver);
|
||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||
|
||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||
annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder);
|
||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaNamespaceResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaNamespaceResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaFunctionResolver.setAnnotationResolver(javaAnnotationResolver);
|
||||
javaFunctionResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaFunctionResolver.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
|
||||
@@ -329,21 +348,6 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
|
||||
javaValueParameterResolver.setTypeTransformer(javaTypeTransformer);
|
||||
|
||||
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
|
||||
deserializedDescriptorResolver.setJavaClassResolver(javaClassResolver);
|
||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||
|
||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||
annotationDescriptorDeserializer.setPsiClassFinder(psiClassFinder);
|
||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaNamespaceResolver.setJavaDescriptorResolver(javaDescriptorResolver);
|
||||
javaNamespaceResolver.setTrace(bindingTrace);
|
||||
javaNamespaceResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaSupertypeResolver.setClassResolver(javaClassResolver);
|
||||
javaSupertypeResolver.setTrace(bindingTrace);
|
||||
javaSupertypeResolver.setTypeTransformer(javaTypeTransformer);
|
||||
|
||||
@@ -34,20 +34,6 @@ public final class AbiVersionUtil {
|
||||
return abiVersion == JvmAbi.VERSION;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static ErrorReporter abiVersionErrorReporter(
|
||||
@NotNull final VirtualFile file,
|
||||
@NotNull final FqName classFqName,
|
||||
@NotNull final BindingTrace trace
|
||||
) {
|
||||
return new ErrorReporter() {
|
||||
@Override
|
||||
public void reportIncompatibleAbiVersion(int actualVersion) {
|
||||
trace.record(ABI_VERSION_ERRORS, new AbiVersionErrorLocation(classFqName, file), actualVersion);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static final class AbiVersionErrorLocation {
|
||||
@NotNull
|
||||
private final FqName classFqName;
|
||||
|
||||
+24
-31
@@ -39,7 +39,6 @@ import static org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule.INCLUDE_K
|
||||
import static org.jetbrains.jet.lang.resolve.java.resolver.DeserializedResolverUtils.kotlinFqNameToJavaFqName;
|
||||
|
||||
public final class DeserializedDescriptorResolver {
|
||||
|
||||
private AnnotationDescriptorDeserializer annotationDeserializer;
|
||||
|
||||
private final LockBasedStorageManager storageManager = new LockBasedStorageManager();
|
||||
@@ -48,6 +47,8 @@ public final class DeserializedDescriptorResolver {
|
||||
|
||||
private JavaClassResolver javaClassResolver;
|
||||
|
||||
private ErrorReporter errorReporter;
|
||||
|
||||
@NotNull
|
||||
private final DescriptorFinder javaDescriptorFinder = new DescriptorFinder() {
|
||||
@Nullable
|
||||
@@ -84,26 +85,30 @@ public final class DeserializedDescriptorResolver {
|
||||
this.javaClassResolver = javaClassResolver;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ClassDescriptor resolveClass(@NotNull ClassId id, @NotNull VirtualFile file, @NotNull ErrorReporter reporter) {
|
||||
ClassData classData = readClassDataFromClassFile(file, reporter);
|
||||
if (classData == null) {
|
||||
return null;
|
||||
}
|
||||
return createDeserializedClass(classData, id);
|
||||
@Inject
|
||||
public void setErrorReporter(ErrorReporter errorReporter) {
|
||||
this.errorReporter = errorReporter;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JetScope createKotlinPackageScope(
|
||||
@NotNull NamespaceDescriptor descriptor,
|
||||
@NotNull VirtualFile file,
|
||||
@NotNull ErrorReporter reporter
|
||||
) {
|
||||
PackageData packageData = readPackageDataFromClassFile(file, reporter);
|
||||
if (packageData == null) {
|
||||
return null;
|
||||
public ClassDescriptor resolveClass(@NotNull ClassId id, @NotNull VirtualFile file) {
|
||||
String[] data = readData(file);
|
||||
if (data != null) {
|
||||
ClassData classData = JavaProtoBufUtil.readClassDataFrom(data);
|
||||
return createDeserializedClass(classData, id);
|
||||
}
|
||||
return new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer, javaDescriptorFinder, packageData);
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JetScope createKotlinPackageScope(@NotNull NamespaceDescriptor descriptor, @NotNull VirtualFile file) {
|
||||
String[] data = readData(file);
|
||||
if (data != null) {
|
||||
PackageData packageData = JavaProtoBufUtil.readPackageDataFrom(data);
|
||||
return new DeserializedPackageMemberScope(storageManager, descriptor, annotationDeserializer, javaDescriptorFinder,
|
||||
packageData);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@@ -119,23 +124,11 @@ public final class DeserializedDescriptorResolver {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static ClassData readClassDataFromClassFile(@NotNull VirtualFile file, @NotNull ErrorReporter reporter) {
|
||||
String[] data = readData(file, reporter);
|
||||
return data == null ? null : JavaProtoBufUtil.readClassDataFrom(data);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PackageData readPackageDataFromClassFile(@NotNull VirtualFile file, @NotNull ErrorReporter reporter) {
|
||||
String[] data = readData(file, reporter);
|
||||
return data == null ? null : JavaProtoBufUtil.readPackageDataFrom(data);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String[] readData(@NotNull VirtualFile virtualFile, @NotNull ErrorReporter reporter) {
|
||||
private String[] readData(@NotNull VirtualFile virtualFile) {
|
||||
KotlinClassFileHeader header = KotlinClassFileHeader.readKotlinHeaderFromClassFile(virtualFile);
|
||||
int version = header.getVersion();
|
||||
if (!isAbiVersionCompatible(version) && header.getType() != KotlinClassFileHeader.HeaderType.NONE) {
|
||||
reporter.reportIncompatibleAbiVersion(version);
|
||||
errorReporter.reportIncompatibleAbiVersion(header.getFqName(), virtualFile, version);
|
||||
return null;
|
||||
}
|
||||
return header.getAnnotationData();
|
||||
|
||||
+5
-1
@@ -16,6 +16,10 @@
|
||||
|
||||
package org.jetbrains.jet.lang.resolve.java.resolver;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
public interface ErrorReporter {
|
||||
void reportIncompatibleAbiVersion(int actualVersion);
|
||||
void reportIncompatibleAbiVersion(@NotNull FqName fqName, @NotNull VirtualFile file, int actualVersion);
|
||||
}
|
||||
|
||||
+4
-12
@@ -28,7 +28,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.descriptors.serialization.ClassId;
|
||||
import org.jetbrains.jet.lang.descriptors.*;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
@@ -83,7 +82,6 @@ public final class JavaClassResolver {
|
||||
@NotNull
|
||||
private final Set<FqNameBase> unresolvedCache = Sets.newHashSet();
|
||||
|
||||
private BindingTrace trace;
|
||||
private JavaResolverCache cache;
|
||||
private JavaTypeParameterResolver typeParameterResolver;
|
||||
private JavaDescriptorResolver javaDescriptorResolver;
|
||||
@@ -92,7 +90,7 @@ public final class JavaClassResolver {
|
||||
private JavaNamespaceResolver namespaceResolver;
|
||||
private JavaSupertypeResolver supertypesResolver;
|
||||
private JavaFunctionResolver functionResolver;
|
||||
private DeserializedDescriptorResolver kotlinDescriptorResolver;
|
||||
private DeserializedDescriptorResolver deserializedDescriptorResolver;
|
||||
private VirtualFileFinder virtualFileFinder;
|
||||
|
||||
public JavaClassResolver() {
|
||||
@@ -103,19 +101,14 @@ public final class JavaClassResolver {
|
||||
this.virtualFileFinder = virtualFileFinder;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTrace(BindingTrace trace) {
|
||||
this.trace = trace;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setCache(JavaResolverCache cache) {
|
||||
this.cache = cache;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setKotlinDescriptorResolver(DeserializedDescriptorResolver kotlinDescriptorResolver) {
|
||||
this.kotlinDescriptorResolver = kotlinDescriptorResolver;
|
||||
public void setDeserializedDescriptorResolver(DeserializedDescriptorResolver deserializedDescriptorResolver) {
|
||||
this.deserializedDescriptorResolver = deserializedDescriptorResolver;
|
||||
}
|
||||
|
||||
@Inject
|
||||
@@ -229,8 +222,7 @@ public final class JavaClassResolver {
|
||||
: "We can resolve the class, so it can't be 'unresolved' during parent resolution";
|
||||
|
||||
ClassId id = ClassId.fromFqNameAndContainingDeclaration(qualifiedName, containingDeclaration);
|
||||
ErrorReporter errorReporter = AbiVersionUtil.abiVersionErrorReporter(file, qualifiedName, trace);
|
||||
ClassDescriptor deserializedDescriptor = kotlinDescriptorResolver.resolveClass(id, file, errorReporter);
|
||||
ClassDescriptor deserializedDescriptor = deserializedDescriptorResolver.resolveClass(id, file);
|
||||
if (deserializedDescriptor != null) {
|
||||
cache(javaClassToKotlinFqName(qualifiedName), deserializedDescriptor);
|
||||
return deserializedDescriptor;
|
||||
|
||||
+1
-10
@@ -26,7 +26,6 @@ import org.jetbrains.jet.lang.descriptors.ModuleDescriptorImpl;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.lang.resolve.java.*;
|
||||
import org.jetbrains.jet.lang.resolve.java.descriptor.JavaNamespaceDescriptor;
|
||||
@@ -60,7 +59,6 @@ public final class JavaNamespaceResolver {
|
||||
private final Set<FqName> unresolvedCache = Sets.newHashSet();
|
||||
|
||||
private JavaClassFinder javaClassFinder;
|
||||
private BindingTrace trace;
|
||||
private JavaResolverCache cache;
|
||||
private JavaDescriptorResolver javaDescriptorResolver;
|
||||
|
||||
@@ -77,11 +75,6 @@ public final class JavaNamespaceResolver {
|
||||
this.javaClassFinder = javaClassFinder;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setTrace(BindingTrace trace) {
|
||||
this.trace = trace;
|
||||
}
|
||||
|
||||
@Inject
|
||||
public void setCache(JavaResolverCache cache) {
|
||||
this.cache = cache;
|
||||
@@ -165,9 +158,7 @@ public final class JavaNamespaceResolver {
|
||||
cache.recordProperNamespace(namespaceDescriptor);
|
||||
|
||||
if (virtualFile != null) {
|
||||
ErrorReporter errorReporter = AbiVersionUtil.abiVersionErrorReporter(virtualFile, packageClassFqName, trace);
|
||||
JetScope kotlinPackageScope = deserializedDescriptorResolver.createKotlinPackageScope(namespaceDescriptor,
|
||||
virtualFile, errorReporter);
|
||||
JetScope kotlinPackageScope = deserializedDescriptorResolver.createKotlinPackageScope(namespaceDescriptor, virtualFile);
|
||||
if (kotlinPackageScope != null) {
|
||||
return kotlinPackageScope;
|
||||
}
|
||||
|
||||
+39
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
||||
import org.jetbrains.jet.lang.resolve.java.AbiVersionUtil;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class TraceBasedErrorReporter implements ErrorReporter {
|
||||
private BindingTrace trace;
|
||||
|
||||
@Inject
|
||||
public void setTrace(BindingTrace trace) {
|
||||
this.trace = trace;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void reportIncompatibleAbiVersion(@NotNull FqName fqName, @NotNull VirtualFile file, int actualVersion) {
|
||||
trace.record(AbiVersionUtil.ABI_VERSION_ERRORS, new AbiVersionUtil.AbiVersionErrorLocation(fqName, file), actualVersion);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user