JavaElementFinder builds new light classes
This commit is contained in:
@@ -35,7 +35,6 @@ import org.jetbrains.jet.lang.resolve.java.JavaPsiFacadeKotlinHacks;
|
||||
import org.jetbrains.jet.lang.resolve.java.JvmAbi;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.lang.resolve.name.Name;
|
||||
import org.jetbrains.jet.util.QualifiedNamesUtil;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -102,7 +101,7 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade
|
||||
|
||||
for (JetClassOrObject declaration : classOrObjectDeclarations) {
|
||||
if (!(declaration instanceof JetEnumEntry)) {
|
||||
JetLightClass lightClass = JetLightClass.create(psiManager, (JetFile) declaration.getContainingFile(), qualifiedName);
|
||||
KotlinLightClass lightClass = KotlinLightClass.create(psiManager, qualifiedName, declaration);
|
||||
if (lightClass != null) {
|
||||
answer.add(lightClass);
|
||||
}
|
||||
@@ -111,13 +110,10 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade
|
||||
}
|
||||
|
||||
private void findPackageClass(FqName qualifiedName, GlobalSearchScope scope, List<PsiClass> answer) {
|
||||
FqName packageClassName = QualifiedNamesUtil.combine(qualifiedName, Name.identifier(JvmAbi.PACKAGE_CLASS));
|
||||
Collection<JetFile> filesForPackage = lightClassGenerationSupport.findFilesForPackage(qualifiedName, scope);
|
||||
|
||||
if (!filesForPackage.isEmpty() && NamespaceCodegen.shouldGenerateNSClass(filesForPackage)) {
|
||||
// TODO This is wrong, but mimics the previous behavior. Will fix
|
||||
JetFile someFile = filesForPackage.iterator().next();
|
||||
JetLightClass lightClass = JetLightClass.create(psiManager, someFile, packageClassName);
|
||||
KotlinLightClassForPackage lightClass = KotlinLightClassForPackage.create(psiManager, qualifiedName, filesForPackage);
|
||||
if (lightClass != null) {
|
||||
answer.add(lightClass);
|
||||
}
|
||||
@@ -202,8 +198,7 @@ public class JavaElementFinder extends PsiElementFinder implements JavaPsiFacade
|
||||
for (JetClassOrObject declaration : declarations) {
|
||||
String localName = getLocalName(declaration);
|
||||
if (localName != null) {
|
||||
JetLightClass aClass = JetLightClass.create(psiManager, (JetFile) declaration.getContainingFile(),
|
||||
QualifiedNamesUtil.combine(packageFQN, Name.identifier(localName)));
|
||||
KotlinLightClass aClass = KotlinLightClass.create(psiManager, packageFQN.child(Name.identifier(localName)), declaration);
|
||||
if (aClass != null) {
|
||||
answer.add(aClass);
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ import org.jetbrains.jet.plugin.JetLanguage;
|
||||
import javax.swing.*;
|
||||
import java.util.Collections;
|
||||
|
||||
@Deprecated
|
||||
public class JetLightClass extends AbstractLightClass implements JetJavaMirrorMarker {
|
||||
static class JetBadWrapperException extends RuntimeException {
|
||||
private final String context;
|
||||
|
||||
@@ -30,6 +30,7 @@ import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetClassBody;
|
||||
import org.jetbrains.jet.lang.psi.JetClassObject;
|
||||
import org.jetbrains.jet.lang.psi.JetClassOrObject;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.resolve.java.JetJavaMirrorMarker;
|
||||
import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
import org.jetbrains.jet.plugin.JetLanguage;
|
||||
@@ -37,11 +38,19 @@ import org.jetbrains.jet.plugin.JetLanguage;
|
||||
public class KotlinLightClass extends AbstractLightClass implements JetJavaMirrorMarker {
|
||||
private final static Key<CachedValue<PsiJavaFileStub>> JAVA_API_STUB = Key.create("JAVA_API_STUB");
|
||||
|
||||
@Nullable
|
||||
public static KotlinLightClass create(@NotNull PsiManager manager, @NotNull FqName qualifiedName, @NotNull JetClassOrObject classOrObject) {
|
||||
if (LightClassUtil.belongsToKotlinBuiltIns((JetFile) classOrObject.getContainingFile())) {
|
||||
return null;
|
||||
}
|
||||
return new KotlinLightClass(manager, qualifiedName, classOrObject);
|
||||
}
|
||||
|
||||
private final FqName classFqName; // FqName of (possibly inner) class
|
||||
private final JetClassOrObject outermostClassOrObject; // outermost parent of this class (may be equal to this class itself)
|
||||
private PsiClass delegate;
|
||||
|
||||
protected KotlinLightClass(@NotNull PsiManager manager, @NotNull FqName name, @NotNull JetClassOrObject classOrObject) {
|
||||
private KotlinLightClass(@NotNull PsiManager manager, @NotNull FqName name, @NotNull JetClassOrObject classOrObject) {
|
||||
super(manager, JetLanguage.INSTANCE);
|
||||
this.classFqName = name;
|
||||
this.outermostClassOrObject = getOutermostClassOrObject(classOrObject);
|
||||
|
||||
+8
-1
@@ -38,13 +38,20 @@ import javax.swing.*;
|
||||
import java.util.Collection;
|
||||
|
||||
public class KotlinLightClassForPackage extends KotlinLightClassForPackageBase implements JetJavaMirrorMarker {
|
||||
@Nullable
|
||||
public static KotlinLightClassForPackage create(@NotNull PsiManager manager, @NotNull FqName qualifiedName, @NotNull Collection<JetFile> files) {
|
||||
for (JetFile file : files) {
|
||||
if (LightClassUtil.belongsToKotlinBuiltIns(file)) return null;
|
||||
}
|
||||
return new KotlinLightClassForPackage(manager, qualifiedName, files);
|
||||
}
|
||||
|
||||
private final FqName packageFqName;
|
||||
private final Collection<JetFile> files;
|
||||
private final int hashCode;
|
||||
private final CachedValue<PsiJavaFileStub> javaFileStub;
|
||||
|
||||
public KotlinLightClassForPackage(@NotNull PsiManager manager, @NotNull FqName packageFqName, @NotNull Collection<JetFile> files) {
|
||||
private KotlinLightClassForPackage(@NotNull PsiManager manager, @NotNull FqName packageFqName, @NotNull Collection<JetFile> files) {
|
||||
super(manager);
|
||||
this.packageFqName = packageFqName;
|
||||
assert !files.isEmpty() : "No files for package " + packageFqName;
|
||||
|
||||
Reference in New Issue
Block a user