From 45cc0cd99e6d08e18f2b540f54b721eb88696542 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 23 Jan 2012 19:12:19 +0400 Subject: [PATCH] properly read fields of array type from java bytecode KT-1086 --- .../resolve/java/JavaDescriptorResolver.java | 23 ++++++++++++------- .../readJavaBinaryClass/FieldOfArrayType.java | 5 ++++ .../readJavaBinaryClass/FieldOfArrayType.kt | 5 ++++ 3 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 compiler/testData/readJavaBinaryClass/FieldOfArrayType.java create mode 100644 compiler/testData/readJavaBinaryClass/FieldOfArrayType.kt diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 852bf60db09..91cc61ef736 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -7,6 +7,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiArrayType; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiClassType; import com.intellij.psi.PsiElement; @@ -825,16 +826,22 @@ public class JavaDescriptorResolver { } else if (typeSource.getTypeString().length() > 0) { return typeSource.getTypeString(); } else { - if (typeSource.getPsiType() instanceof PsiClassType) { - return ((PsiClassType) typeSource.getPsiType()).getClassName(); - } else if (typeSource.getPsiType() instanceof PsiPrimitiveType) { - return typeSource.getPsiType().getPresentableText(); - } else { - throw new IllegalStateException("" + typeSource.getPsiType().getClass()); - } + return psiTypeToKey(typeSource.getPsiType()); } } - + + private Object psiTypeToKey(PsiType psiType) { + if (psiType instanceof PsiClassType) { + return ((PsiClassType) psiType).getClassName(); + } else if (psiType instanceof PsiPrimitiveType) { + return psiType.getPresentableText(); + } else if (psiType instanceof PsiArrayType) { + return Pair.create("[", psiTypeToKey(((PsiArrayType) psiType).getComponentType())); + } else { + throw new IllegalStateException("" + psiType.getClass()); + } + } + private Object propertyKeyForGrouping(PropertyAccessorData propertyAccessor) { Object type = key(propertyAccessor.getType()); Object receiverType = key(propertyAccessor.getReceiverType()); diff --git a/compiler/testData/readJavaBinaryClass/FieldOfArrayType.java b/compiler/testData/readJavaBinaryClass/FieldOfArrayType.java new file mode 100644 index 00000000000..1a4e2e78926 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/FieldOfArrayType.java @@ -0,0 +1,5 @@ +package test; + +class FieldOfArrayType { + public java.io.File[] files; +} diff --git a/compiler/testData/readJavaBinaryClass/FieldOfArrayType.kt b/compiler/testData/readJavaBinaryClass/FieldOfArrayType.kt new file mode 100644 index 00000000000..59b34d2c993 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/FieldOfArrayType.kt @@ -0,0 +1,5 @@ +package test + +open class FieldOfArrayType() { + var files: Array? = null +}