Fix the accessing to static field from Parent through Child
This commit is contained in:
@@ -2220,7 +2220,10 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> implem
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
propertyDescriptor = DescriptorUtils.unwrapFakeOverride(propertyDescriptor);
|
if (!isStaticBackingField) {
|
||||||
|
propertyDescriptor = DescriptorUtils.unwrapFakeOverride(propertyDescriptor);
|
||||||
|
}
|
||||||
|
|
||||||
Type backingFieldOwner =
|
Type backingFieldOwner =
|
||||||
typeMapper.mapOwner(changeOwnerOnTypeMapping ? propertyDescriptor.getContainingDeclaration() : propertyDescriptor);
|
typeMapper.mapOwner(changeOwnerOnTypeMapping ? propertyDescriptor.getContainingDeclaration() : propertyDescriptor);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
class Child extends Parent {
|
||||||
|
public static int b = 3;
|
||||||
|
public static int c = 4;
|
||||||
|
public static void bar() {}
|
||||||
|
public static void baz() {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
class Parent {
|
||||||
|
public static int a = 1;
|
||||||
|
public static int b = 2;
|
||||||
|
public static void foo() {}
|
||||||
|
public static void baz() {}
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
fun test() {
|
||||||
|
Parent.a
|
||||||
|
Parent.b
|
||||||
|
Parent.foo()
|
||||||
|
Parent.baz()
|
||||||
|
|
||||||
|
Child.a
|
||||||
|
Child.b
|
||||||
|
Child.c
|
||||||
|
Child.foo()
|
||||||
|
Child.bar()
|
||||||
|
Child.baz()
|
||||||
|
}
|
||||||
|
|
||||||
|
// @TestKt.class:
|
||||||
|
// 1 GETSTATIC Parent.a : I
|
||||||
|
// 1 GETSTATIC Parent.b : I
|
||||||
|
// 1 INVOKESTATIC Parent.foo()
|
||||||
|
// 1 INVOKESTATIC Parent.baz()
|
||||||
|
// 1 GETSTATIC Child.a : I
|
||||||
|
// 1 GETSTATIC Child.b : I
|
||||||
|
// 1 GETSTATIC Child.c : I
|
||||||
|
// 1 INVOKESTATIC Child.foo()
|
||||||
|
// 1 INVOKESTATIC Child.bar()
|
||||||
|
// 1 INVOKESTATIC Child.baz()
|
||||||
@@ -71,6 +71,7 @@ public abstract class AbstractBytecodeTextTest extends CodegenTestCase {
|
|||||||
|
|
||||||
public void doTestMultiFile(@NotNull String folderName) throws Exception {
|
public void doTestMultiFile(@NotNull String folderName) throws Exception {
|
||||||
final List<String> files = new ArrayList<String>(2);
|
final List<String> files = new ArrayList<String>(2);
|
||||||
|
|
||||||
FileUtil.processFilesRecursively(new File(folderName), new Processor<File>() {
|
FileUtil.processFilesRecursively(new File(folderName), new Processor<File>() {
|
||||||
@Override
|
@Override
|
||||||
public boolean process(File file) {
|
public boolean process(File file) {
|
||||||
@@ -81,11 +82,11 @@ public abstract class AbstractBytecodeTextTest extends CodegenTestCase {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL, new File(folderName));
|
||||||
doTestMultiFile(files);
|
doTestMultiFile(files);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void doTestMultiFile(@NotNull List<String> filenames) throws Exception {
|
private void doTestMultiFile(@NotNull List<String> filenames) throws Exception {
|
||||||
createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.ALL);
|
|
||||||
Collections.sort(filenames);
|
Collections.sort(filenames);
|
||||||
String[] sortedFilenames = ArrayUtil.toStringArray(filenames);
|
String[] sortedFilenames = ArrayUtil.toStringArray(filenames);
|
||||||
loadFiles(sortedFilenames);
|
loadFiles(sortedFilenames);
|
||||||
|
|||||||
@@ -35,6 +35,12 @@ public class BytecodeTextMultifileTestGenerated extends AbstractBytecodeTextTest
|
|||||||
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeTextMultifile"), Pattern.compile("^([^\\.]+)$"), false);
|
JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/bytecodeTextMultifile"), Pattern.compile("^([^\\.]+)$"), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("javaStatics")
|
||||||
|
public void testJavaStatics() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeTextMultifile/javaStatics/");
|
||||||
|
doTestMultiFile(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("partMembersCall")
|
@TestMetadata("partMembersCall")
|
||||||
public void testPartMembersCall() throws Exception {
|
public void testPartMembersCall() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeTextMultifile/partMembersCall/");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeTextMultifile/partMembersCall/");
|
||||||
|
|||||||
@@ -20,15 +20,19 @@ import com.google.common.collect.Lists;
|
|||||||
import com.intellij.openapi.util.io.FileUtil;
|
import com.intellij.openapi.util.io.FileUtil;
|
||||||
import com.intellij.testFramework.TestDataFile;
|
import com.intellij.testFramework.TestDataFile;
|
||||||
import com.intellij.testFramework.UsefulTestCase;
|
import com.intellij.testFramework.UsefulTestCase;
|
||||||
|
import com.intellij.util.SmartList;
|
||||||
import kotlin.Charsets;
|
import kotlin.Charsets;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
import org.jetbrains.kotlin.backend.common.output.OutputFile;
|
||||||
|
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles;
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment;
|
||||||
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
|
import org.jetbrains.kotlin.codegen.forTestCompile.ForTestCompileRuntime;
|
||||||
|
import org.jetbrains.kotlin.config.CompilerConfiguration;
|
||||||
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
|
import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.test.ConfigurationKind;
|
import org.jetbrains.kotlin.test.ConfigurationKind;
|
||||||
import org.jetbrains.kotlin.test.JetTestUtils;
|
import org.jetbrains.kotlin.test.JetTestUtils;
|
||||||
|
import org.jetbrains.kotlin.test.TestJdkKind;
|
||||||
import org.jetbrains.kotlin.utils.UtilsPackage;
|
import org.jetbrains.kotlin.utils.UtilsPackage;
|
||||||
import org.jetbrains.org.objectweb.asm.ClassReader;
|
import org.jetbrains.org.objectweb.asm.ClassReader;
|
||||||
import org.jetbrains.org.objectweb.asm.tree.ClassNode;
|
import org.jetbrains.org.objectweb.asm.tree.ClassNode;
|
||||||
@@ -47,12 +51,15 @@ import java.lang.annotation.Annotation;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.getJvmClasspathRoots;
|
import static org.jetbrains.kotlin.cli.jvm.config.ConfigPackage.getJvmClasspathRoots;
|
||||||
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.*;
|
import static org.jetbrains.kotlin.codegen.CodegenTestUtil.*;
|
||||||
import static org.jetbrains.kotlin.load.kotlin.PackageClassUtils.getPackageClassFqName;
|
import static org.jetbrains.kotlin.load.kotlin.PackageClassUtils.getPackageClassFqName;
|
||||||
|
import static org.jetbrains.kotlin.test.JetTestUtils.compilerConfigurationForTests;
|
||||||
|
import static org.jetbrains.kotlin.test.JetTestUtils.getAnnotationsJar;
|
||||||
|
|
||||||
public abstract class CodegenTestCase extends UsefulTestCase {
|
public abstract class CodegenTestCase extends UsefulTestCase {
|
||||||
|
|
||||||
@@ -64,11 +71,19 @@ public abstract class CodegenTestCase extends UsefulTestCase {
|
|||||||
protected GeneratedClassLoader initializedClassLoader;
|
protected GeneratedClassLoader initializedClassLoader;
|
||||||
protected ConfigurationKind configurationKind;
|
protected ConfigurationKind configurationKind;
|
||||||
|
|
||||||
protected void createEnvironmentWithMockJdkAndIdeaAnnotations(@NotNull ConfigurationKind configurationKind) {
|
final protected void createEnvironmentWithMockJdkAndIdeaAnnotations(@NotNull ConfigurationKind configurationKind, File... javaSourceRoot) {
|
||||||
if (myEnvironment != null) {
|
if (myEnvironment != null) {
|
||||||
throw new IllegalStateException("must not set up myEnvironment twice");
|
throw new IllegalStateException("must not set up myEnvironment twice");
|
||||||
}
|
}
|
||||||
myEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(getTestRootDisposable(), configurationKind);
|
|
||||||
|
CompilerConfiguration configuration =
|
||||||
|
compilerConfigurationForTests(configurationKind, TestJdkKind.MOCK_JDK,
|
||||||
|
Collections.singletonList(getAnnotationsJar()), new SmartList<File>(javaSourceRoot));
|
||||||
|
|
||||||
|
myEnvironment = KotlinCoreEnvironment.createForTests(
|
||||||
|
getTestRootDisposable(),
|
||||||
|
configuration,
|
||||||
|
EnvironmentConfigFiles.JVM_CONFIG_FILES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user