Make an abstraction over VirtualFileFinder
Java descriptor loader now can work with KotlinClassFinder, which finds abstract KotlinJvmBinaryClass'es: they are based on VirtualFile in the compiler/IDE and will be based on j.l.Class in the reflection
This commit is contained in:
+8
-3
@@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureCheck
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.PsiClassFinderImpl;
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.JavaAnnotationArgumentResolver;
|
||||
@@ -57,6 +58,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
|
||||
private final JavaDescriptorResolver javaDescriptorResolver;
|
||||
private final PsiClassFinderImpl psiClassFinder;
|
||||
private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder;
|
||||
private final VirtualFileFinder virtualFileFinder;
|
||||
private final JavaAnnotationResolver javaAnnotationResolver;
|
||||
private final JavaAnnotationArgumentResolver javaAnnotationArgumentResolver;
|
||||
@@ -87,6 +89,7 @@ public class InjectorForJavaDescriptorResolver {
|
||||
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
|
||||
this.javaDescriptorResolver = new JavaDescriptorResolver();
|
||||
this.psiClassFinder = new PsiClassFinderImpl();
|
||||
this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder();
|
||||
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
|
||||
this.javaAnnotationResolver = new JavaAnnotationResolver();
|
||||
this.javaAnnotationArgumentResolver = new JavaAnnotationArgumentResolver();
|
||||
@@ -120,6 +123,8 @@ public class InjectorForJavaDescriptorResolver {
|
||||
|
||||
this.psiClassFinder.setProject(project);
|
||||
|
||||
virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaAnnotationResolver.setArgumentResolver(javaAnnotationArgumentResolver);
|
||||
javaAnnotationResolver.setClassResolver(javaClassResolver);
|
||||
javaAnnotationResolver.setExternalAnnotationResolver(psiBasedExternalAnnotationResolver);
|
||||
@@ -133,11 +138,11 @@ public class InjectorForJavaDescriptorResolver {
|
||||
javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||
javaClassResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
|
||||
javaClassResolver.setMemberResolver(javaMemberResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver);
|
||||
javaClassResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
deserializedDescriptorResolver.setAnnotationDeserializer(annotationDescriptorDeserializer);
|
||||
deserializedDescriptorResolver.setErrorReporter(traceBasedErrorReporter);
|
||||
@@ -145,13 +150,13 @@ public class InjectorForJavaDescriptorResolver {
|
||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||
|
||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||
annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder);
|
||||
|
||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaNamespaceResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
|
||||
javaNamespaceResolver.setMemberResolver(javaMemberResolver);
|
||||
javaNamespaceResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaMemberResolver.setClassResolver(javaClassResolver);
|
||||
javaMemberResolver.setConstructorResolver(javaConstructorResolver);
|
||||
|
||||
+8
-3
@@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedJavaResolverCache;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.TraceBasedErrorReporter;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedMethodSignatureChecker;
|
||||
import org.jetbrains.jet.lang.resolve.java.resolver.PsiBasedExternalAnnotationResolver;
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileKotlinClassFinder;
|
||||
import org.jetbrains.jet.lang.resolve.NamespaceFactoryImpl;
|
||||
import org.jetbrains.jet.lang.resolve.kotlin.VirtualFileFinder;
|
||||
import org.jetbrains.jet.lang.resolve.DeclarationResolver;
|
||||
@@ -96,6 +97,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
private final TraceBasedErrorReporter traceBasedErrorReporter;
|
||||
private final PsiBasedMethodSignatureChecker psiBasedMethodSignatureChecker;
|
||||
private final PsiBasedExternalAnnotationResolver psiBasedExternalAnnotationResolver;
|
||||
private final VirtualFileKotlinClassFinder virtualFileKotlinClassFinder;
|
||||
private final NamespaceFactoryImpl namespaceFactory;
|
||||
private final VirtualFileFinder virtualFileFinder;
|
||||
private final DeclarationResolver declarationResolver;
|
||||
@@ -156,6 +158,7 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
this.traceBasedErrorReporter = new TraceBasedErrorReporter();
|
||||
this.psiBasedMethodSignatureChecker = new PsiBasedMethodSignatureChecker();
|
||||
this.psiBasedExternalAnnotationResolver = new PsiBasedExternalAnnotationResolver();
|
||||
this.virtualFileKotlinClassFinder = new VirtualFileKotlinClassFinder();
|
||||
this.namespaceFactory = new NamespaceFactoryImpl();
|
||||
this.virtualFileFinder = com.intellij.openapi.components.ServiceManager.getService(project, VirtualFileFinder.class);
|
||||
this.declarationResolver = new DeclarationResolver();
|
||||
@@ -241,6 +244,8 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
psiBasedMethodSignatureChecker.setAnnotationResolver(javaAnnotationResolver);
|
||||
psiBasedMethodSignatureChecker.setExternalSignatureResolver(traceBasedExternalSignatureResolver);
|
||||
|
||||
virtualFileKotlinClassFinder.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
this.namespaceFactory.setModuleDescriptor(moduleDescriptor);
|
||||
this.namespaceFactory.setTrace(bindingTrace);
|
||||
|
||||
@@ -316,11 +321,11 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
javaClassResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaClassResolver.setFunctionResolver(javaFunctionResolver);
|
||||
javaClassResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaClassResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
|
||||
javaClassResolver.setMemberResolver(javaMemberResolver);
|
||||
javaClassResolver.setNamespaceResolver(javaNamespaceResolver);
|
||||
javaClassResolver.setSupertypesResolver(javaSupertypeResolver);
|
||||
javaClassResolver.setTypeParameterResolver(javaTypeParameterResolver);
|
||||
javaClassResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaAnnotationResolver.setArgumentResolver(javaAnnotationArgumentResolver);
|
||||
javaAnnotationResolver.setClassResolver(javaClassResolver);
|
||||
@@ -338,13 +343,13 @@ public class InjectorForTopDownAnalyzerForJvm implements InjectorForTopDownAnaly
|
||||
deserializedDescriptorResolver.setJavaNamespaceResolver(javaNamespaceResolver);
|
||||
|
||||
annotationDescriptorDeserializer.setJavaClassResolver(javaClassResolver);
|
||||
annotationDescriptorDeserializer.setVirtualFileFinder(virtualFileFinder);
|
||||
annotationDescriptorDeserializer.setKotlinClassFinder(virtualFileKotlinClassFinder);
|
||||
|
||||
javaNamespaceResolver.setCache(traceBasedJavaResolverCache);
|
||||
javaNamespaceResolver.setDeserializedDescriptorResolver(deserializedDescriptorResolver);
|
||||
javaNamespaceResolver.setJavaClassFinder(javaClassFinder);
|
||||
javaNamespaceResolver.setKotlinClassFinder(virtualFileKotlinClassFinder);
|
||||
javaNamespaceResolver.setMemberResolver(javaMemberResolver);
|
||||
javaNamespaceResolver.setVirtualFileFinder(virtualFileFinder);
|
||||
|
||||
javaMemberResolver.setClassResolver(javaClassResolver);
|
||||
javaMemberResolver.setConstructorResolver(javaConstructorResolver);
|
||||
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 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.kotlin;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
public interface VirtualFileFinder {
|
||||
// TODO: support scope
|
||||
@Nullable
|
||||
VirtualFile find(@NotNull FqName className);
|
||||
}
|
||||
+49
@@ -0,0 +1,49 @@
|
||||
/*
|
||||
* 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.kotlin;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class VirtualFileKotlinClass implements KotlinJvmBinaryClass {
|
||||
private final VirtualFile file;
|
||||
|
||||
public VirtualFileKotlinClass(@NotNull VirtualFile file) {
|
||||
this.file = file;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@Override
|
||||
public VirtualFile getFile() {
|
||||
return file;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return file.hashCode();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
return obj instanceof VirtualFileKotlinClass && ((VirtualFileKotlinClass) obj).file.equals(file);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return getClass().getSimpleName() + ": " + file.toString();
|
||||
}
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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.kotlin;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
public class VirtualFileKotlinClassFinder implements KotlinClassFinder {
|
||||
private VirtualFileFinder virtualFileFinder;
|
||||
|
||||
@Inject
|
||||
public void setVirtualFileFinder(@NotNull VirtualFileFinder virtualFileFinder) {
|
||||
this.virtualFileFinder = virtualFileFinder;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public KotlinJvmBinaryClass find(@NotNull FqName fqName) {
|
||||
VirtualFile file = virtualFileFinder.find(fqName);
|
||||
return file == null ? null : new VirtualFileKotlinClass(file);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user