diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JvmCodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/JvmCodegenUtil.java index 551e4a47340..f72b85811f8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/JvmCodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/JvmCodegenUtil.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.codegen; import com.intellij.openapi.vfs.StandardFileSystems; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.util.containers.Stack; import kotlin.Function1; import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; @@ -67,10 +66,6 @@ public class JvmCodegenUtil { return closure.getCaptureThis() == null && closure.getCaptureReceiverType() == null && closure.getCaptureVariables().isEmpty(); } - public static T peekFromStack(Stack stack) { - return stack.empty() ? null : stack.peek(); - } - private static boolean isCallInsideSameClassAsDeclared(@NotNull CallableMemberDescriptor descriptor, @NotNull CodegenContext context) { boolean isFakeOverride = descriptor.getKind() == CallableMemberDescriptor.Kind.FAKE_OVERRIDE; boolean isDelegate = descriptor.getKind() == CallableMemberDescriptor.Kind.DELEGATION; diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java index 25d33c04524..268d023908a 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/CodegenAnnotatingVisitor.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.descriptors.impl.ClassDescriptorImpl; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage; import org.jetbrains.jet.lang.resolve.calls.model.ExpressionValueArgument; @@ -45,9 +46,7 @@ import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant; import org.jetbrains.jet.lang.resolve.constants.EnumValue; import org.jetbrains.jet.lang.resolve.constants.NullValue; import org.jetbrains.jet.lang.resolve.java.JvmAbi; -import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.source.SourcePackage; @@ -56,7 +55,6 @@ import org.jetbrains.org.objectweb.asm.Type; import java.util.*; -import static org.jetbrains.jet.codegen.JvmCodegenUtil.peekFromStack; import static org.jetbrains.jet.codegen.binding.CodegenBinding.*; import static org.jetbrains.jet.lang.resolve.BindingContext.*; import static org.jetbrains.jet.lang.resolve.name.SpecialNames.safeIdentifier; @@ -401,14 +399,12 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { return peek + '$' + name; } else if (containingDeclaration instanceof PackageFragmentDescriptor) { - FqName qualifiedName = ((PackageFragmentDescriptor) containingDeclaration).getFqName(); - String packageClassShortName = PackageClassUtils.getPackageClassName(qualifiedName); - String packageClassName = peek.isEmpty() ? packageClassShortName : peek + "/" + packageClassShortName; - return packageClassName + '$' + name; - } - else { - return null; + JetFile containingFile = DescriptorToSourceUtils.getContainingFile(descriptor); + assert containingFile != null : "File not found for " + descriptor; + return PackagePartClassUtils.getPackagePartInternalName(containingFile) + '$' + name; } + + return null; } @Override @@ -547,7 +543,7 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { @NotNull private String getCurrentTopLevelClassOrPackagePartInternalName(@NotNull JetFile file) { ListIterator iterator = classStack.listIterator(classStack.size()); - while(iterator.hasPrevious()) { + while (iterator.hasPrevious()) { ClassDescriptor previous = iterator.previous().getDescriptor(); if (DescriptorUtils.isTopLevelOrInnerClass(previous)) { return CodegenBinding.getAsmType(bindingContext, previous).getInternalName(); @@ -556,4 +552,8 @@ class CodegenAnnotatingVisitor extends JetVisitorVoid { return PackagePartClassUtils.getPackagePartInternalName(file); } + + private static T peekFromStack(@NotNull Stack stack) { + return stack.empty() ? null : stack.peek(); + } } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java index a68877013b0..e38a1e76ad2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/binding/PsiCodegenPredictor.java @@ -33,9 +33,7 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorToSourceUtils; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmClassName; -import org.jetbrains.jet.lang.resolve.java.PackageClassUtils; import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.org.objectweb.asm.Type; @@ -82,14 +80,14 @@ public final class PsiCodegenPredictor { } } else { - FqName packageFqName = declaration.getContainingJetFile().getPackageFqName(); + JetFile containingFile = declaration.getContainingJetFile(); if (declaration instanceof JetNamedFunction) { Name name = ((JetNamedFunction) declaration).getNameAsName(); - return name == null ? null : PackageClassUtils.getPackageClassInternalName(packageFqName) + "$" + name.asString(); + return name == null ? null : PackagePartClassUtils.getPackagePartInternalName(containingFile) + "$" + name.asString(); } - parentInternalName = AsmUtil.internalNameByFqNameWithoutInnerClasses(packageFqName); + parentInternalName = AsmUtil.internalNameByFqNameWithoutInnerClasses(containingFile.getPackageFqName()); } if (declaration instanceof JetClassObject) { diff --git a/compiler/testData/checkLocalVariablesTable/itInLambda.kt b/compiler/testData/checkLocalVariablesTable/itInLambda.kt index 2d5d3c431fc..8b1fc8e5f97 100644 --- a/compiler/testData/checkLocalVariablesTable/itInLambda.kt +++ b/compiler/testData/checkLocalVariablesTable/itInLambda.kt @@ -8,6 +8,6 @@ fun foo1() { } } -// METHOD : _DefaultPackage$foo1$1.invoke(I)V -// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo1$1; INDEX=0 +// METHOD : _DefaultPackage*$foo1$1.invoke(I)V +// VARIABLE : NAME=this TYPE=L_DefaultPackage*$foo1$1; INDEX=0 // VARIABLE : NAME=it TYPE=I INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/itInReturnedLambda.kt b/compiler/testData/checkLocalVariablesTable/itInReturnedLambda.kt index d120df6f161..b7227c03b78 100644 --- a/compiler/testData/checkLocalVariablesTable/itInReturnedLambda.kt +++ b/compiler/testData/checkLocalVariablesTable/itInReturnedLambda.kt @@ -6,6 +6,6 @@ fun foo() { } } -// METHOD : _DefaultPackage$foo$1$1.invoke(I)V -// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo$1$1; INDEX=0 +// METHOD : _DefaultPackage*$foo$1$1.invoke(I)V +// VARIABLE : NAME=this TYPE=L_DefaultPackage*$foo$1$1; INDEX=0 // VARIABLE : NAME=it TYPE=I INDEX=1 diff --git a/compiler/testData/checkLocalVariablesTable/lambdaAsVar.kt b/compiler/testData/checkLocalVariablesTable/lambdaAsVar.kt index e59b382bee5..59a9d71cd3a 100644 --- a/compiler/testData/checkLocalVariablesTable/lambdaAsVar.kt +++ b/compiler/testData/checkLocalVariablesTable/lambdaAsVar.kt @@ -4,5 +4,5 @@ fun foo() { } } -// METHOD : _DefaultPackage$foo$a$1.invoke()V -// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo$a$1; INDEX=0 +// METHOD : _DefaultPackage*$foo$a$1.invoke()V +// VARIABLE : NAME=this TYPE=L_DefaultPackage*$foo$a$1; INDEX=0 diff --git a/compiler/testData/checkLocalVariablesTable/localFun.kt b/compiler/testData/checkLocalVariablesTable/localFun.kt index c53520bd3ab..5285fd66db3 100644 --- a/compiler/testData/checkLocalVariablesTable/localFun.kt +++ b/compiler/testData/checkLocalVariablesTable/localFun.kt @@ -3,5 +3,5 @@ fun foo() { } } -// METHOD : _DefaultPackage$foo$1.invoke()V -// VARIABLE : NAME=this TYPE=L_DefaultPackage$foo$1; INDEX=0 +// METHOD : _DefaultPackage*$foo$1.invoke()V +// VARIABLE : NAME=this TYPE=L_DefaultPackage*$foo$1; INDEX=0 diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/classInLambda.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/classInLambda.kt index 3caa9125007..fcfbbfe1435 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/classInLambda.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/classInLambda.kt @@ -8,8 +8,8 @@ fun box(): String { val enclosingMethod = classInLambda.javaClass.getEnclosingMethod() if (enclosingMethod?.getName() != "invoke") return "method: $enclosingMethod" - val enclosingClass = classInLambda.javaClass.getEnclosingClass() - if (enclosingClass?.getName() != "_DefaultPackage\$box\$classInLambda\$1") return "enclosing class: $enclosingClass" + val enclosingClass = classInLambda.javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.endsWith("\$box\$classInLambda\$1")) return "enclosing class: $enclosingClass" //KT-5092 //val declaringClass = classInLambda.javaClass.getDeclaringClass() diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/objectInLambda.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/objectInLambda.kt index a32ce78a8a2..2878443ed39 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/objectInLambda.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda/objectInLambda.kt @@ -7,8 +7,8 @@ fun box(): String { val enclosingMethod = objectInLambda.javaClass.getEnclosingMethod() if (enclosingMethod?.getName() != "invoke") return "method: $enclosingMethod" - val enclosingClass = objectInLambda.javaClass.getEnclosingClass() - if (enclosingClass?.getName() != "_DefaultPackage\$box\$objectInLambda\$1") return "enclosing class: $enclosingClass" + val enclosingClass = objectInLambda.javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.endsWith("\$box\$objectInLambda\$1")) return "enclosing class: $enclosingClass" //KT-5092 //val declaringClass = objectInLambda.javaClass.getDeclaringClass() diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLambda.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLambda.kt index f4e998e1e60..5e05e0aa25b 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLambda.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLambda.kt @@ -7,8 +7,8 @@ fun box(): String { val enclosingMethod = javaClass.getEnclosingMethod() if (enclosingMethod?.getName() != "invoke") return "method: $enclosingMethod" - val enclosingClass = javaClass.getEnclosingClass() - if (enclosingClass!!.getName() != "_DefaultPackage\$box\$l$1") return "enclosing class: $enclosingClass" + val enclosingClass = javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.contains("\$box\$l\$1")) return "enclosing class: $enclosingClass" val declaringClass = javaClass.getDeclaringClass() if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass" diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalClass.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalClass.kt index d9e58d20842..458bdfe0b72 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalClass.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalClass.kt @@ -6,11 +6,13 @@ fun box(): String { val l = L() val javaClass = l.a.javaClass - val enclosingMethod = javaClass.getEnclosingConstructor() - if (enclosingMethod?.getName() != "_DefaultPackage\$box\$L") return "ctor: $enclosingMethod" + val enclosingMethod = javaClass.getEnclosingConstructor()!!.getName() + if (!enclosingMethod.startsWith("_DefaultPackage\$") || !enclosingMethod.endsWith("\$box\$L")) return "ctor: $enclosingMethod" - val enclosingClass = javaClass.getEnclosingClass() - if (!enclosingClass!!.getName().startsWith("_DefaultPackage\$box\$L")) return "enclosing class: $enclosingClass" + val enclosingClass = javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.endsWith("\$box\$L")) return "enclosing class: $enclosingClass" + + if (enclosingMethod != enclosingClass) return "$enclosingClass != $enclosingMethod" val declaringClass = javaClass.getDeclaringClass() if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass" diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalFunction.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalFunction.kt index 0234248c39e..f486c657f6a 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalFunction.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInLocalFunction.kt @@ -7,8 +7,8 @@ fun box(): String { val enclosingMethod = javaClass.getEnclosingMethod() if (enclosingMethod?.getName() != "invoke") return "method: $enclosingMethod" - val enclosingClass = javaClass.getEnclosingClass() - if (enclosingClass!!.getName() != "_DefaultPackage\$box$1") return "enclosing class: $enclosingClass" + val enclosingClass = javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.contains("\$box$1")) return "enclosing class: $enclosingClass" val declaringClass = javaClass.getDeclaringClass() if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass" diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInMemberFunctionInLocalClass.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInMemberFunctionInLocalClass.kt index 5d3604317ac..d0169f485d7 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInMemberFunctionInLocalClass.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInMemberFunctionInLocalClass.kt @@ -9,8 +9,8 @@ fun box(): String { val enclosingMethod = javaClass.getEnclosingMethod() if (enclosingMethod?.getName() != "foo") return "method: $enclosingMethod" - val enclosingClass = javaClass.getEnclosingClass() - if (enclosingClass?.getName() != "_DefaultPackage\$box\$C") return "enclosing class: $enclosingClass" + val enclosingClass = javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.contains("\$box\$C")) return "enclosing class: $enclosingClass" val declaringClass = javaClass.getDeclaringClass() if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass" diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInObjectExpression.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInObjectExpression.kt index d99af95b209..116ffc4aa3b 100644 --- a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInObjectExpression.kt +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/lambda/lambdaInObjectExpression.kt @@ -5,11 +5,13 @@ fun box(): String { } val javaClass = l.a.javaClass - val enclosingMethod = javaClass.getEnclosingConstructor() - if (enclosingMethod?.getName() != "_DefaultPackage\$box\$l\$1") return "ctor: $enclosingMethod" + val enclosingMethod = javaClass.getEnclosingConstructor()!!.getName() + if (!enclosingMethod.startsWith("_DefaultPackage\$") || !enclosingMethod.endsWith("\$box\$l\$1")) return "ctor: $enclosingMethod" - val enclosingClass = javaClass.getEnclosingClass() - if (!enclosingClass!!.getName().startsWith("_DefaultPackage\$box\$l\$1")) return "enclosing class: $enclosingClass" + val enclosingClass = javaClass.getEnclosingClass()!!.getName() + if (!enclosingClass.startsWith("_DefaultPackage\$") || !enclosingClass.endsWith("\$box\$l\$1")) return "enclosing class: $enclosingClass" + + if (enclosingMethod != enclosingClass) return "$enclosingClass != $enclosingMethod" val declaringClass = javaClass.getDeclaringClass() if (declaringClass != null) return "anonymous function has a declaring class: $declaringClass" diff --git a/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/localClassInTopLevelFunction.kt b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/localClassInTopLevelFunction.kt new file mode 100644 index 00000000000..4de4bfda981 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/reflection/enclosing/localClassInTopLevelFunction.kt @@ -0,0 +1,10 @@ +// KT-4234 + +fun box(): String { + class C + + val name = javaClass().getSimpleName() + if (name != "box\$C") return "Fail: $name" + + return "OK" +} diff --git a/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt b/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt index 1f98687cbf5..2d886c33745 100644 --- a/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt +++ b/compiler/testData/codegen/bytecodeText/constClosureOptimization.kt @@ -17,6 +17,6 @@ fun test() { (::local)() } -// 3 GETSTATIC _DefaultPackage\$test\$1\.INSTANCE\$ -// 1 GETSTATIC _DefaultPackage\$test\$2\.INSTANCE\$ -// 1 GETSTATIC _DefaultPackage\$test\$3\.INSTANCE\$ +// 3 GETSTATIC _DefaultPackage\$.+\$test\$1\.INSTANCE\$ +// 1 GETSTATIC _DefaultPackage\$.+\$test\$2\.INSTANCE\$ +// 1 GETSTATIC _DefaultPackage\$.+\$test\$3\.INSTANCE\$ diff --git a/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java b/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java index 60448e453ca..31ca897124f 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/AbstractCheckLocalVariablesTableTest.java @@ -102,7 +102,10 @@ public abstract class AbstractCheckLocalVariablesTableTest extends TestCaseWithT for (LocalVariable expectedVariable : expectedLocalVariables) { LocalVariable actualVariable = actualLocalVariables.get(index); assertEquals("Names are different", expectedVariable.name, actualVariable.name); - assertEquals("Types are different for " + expectedVariable.name, expectedVariable.type, actualVariable.type); + assertTrue( + String.format("Type doesn't match regex: name %s, regex %s, type %s", expectedVariable.name, expectedVariable.type, actualVariable.type), + actualVariable.type.matches(expectedVariable.type) + ); assertEquals("Indexes are different", expectedVariable.index, actualVariable.index); index++; } @@ -149,7 +152,7 @@ public abstract class AbstractCheckLocalVariablesTableTest extends TestCaseWithT expectedLocalVariables.add(new LocalVariable(nameMatcher.group(1), - typeMatcher.group(1), + StringUtil.escapeToRegexp(typeMatcher.group(1)).replace("\\*", ".+"), Integer.parseInt(indexMatcher.group(1)))); } } diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 672b24a54ce..a93bdd913af 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -1891,6 +1891,12 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/boxWithStdlib/reflection/enclosing"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("localClassInTopLevelFunction.kt") + public void testLocalClassInTopLevelFunction() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithStdlib/reflection/enclosing/localClassInTopLevelFunction.kt"); + doTestWithStdlib(fileName); + } + @TestMetadata("compiler/testData/codegen/boxWithStdlib/reflection/enclosing/insideLambda") @TestDataPath("$PROJECT_ROOT") @RunWith(org.jetbrains.jet.JUnit3RunnerWithInners.class) diff --git a/idea/testData/debugger/tinyApp/outs/frameAnonymousObject.out b/idea/testData/debugger/tinyApp/outs/frameAnonymousObject.out index 56015b6b0e4..7c919496be2 100644 --- a/idea/testData/debugger/tinyApp/outs/frameAnonymousObject.out +++ b/idea/testData/debugger/tinyApp/outs/frameAnonymousObject.out @@ -25,9 +25,9 @@ fun foo(f: () -> Unit) { } // PRINT_FRAME - frame = invoke():11, FrameAnonymousObjectPackage$main$o$1$run$1 {frameAnonymousObject} - this = this = {frameAnonymousObject.FrameAnonymousObjectPackage$main$o$1$run$1@uniqueID}kotlin.Function0 - field = this$0: frameAnonymousObject.FrameAnonymousObjectPackage$main$o$1 = {frameAnonymousObject.FrameAnonymousObjectPackage$main$o$1@uniqueID} + frame = invoke():11, FrameAnonymousObjectPackage$@packagePartHASH$main$o$1$run$1 {frameAnonymousObject} + this = this = {frameAnonymousObject.FrameAnonymousObjectPackage$@packagePartHASH$main$o$1$run$1@uniqueID}kotlin.Function0 + field = this$0: frameAnonymousObject.FrameAnonymousObjectPackage$@packagePartHASH$main$o$1 = {frameAnonymousObject.FrameAnonymousObjectPackage$@packagePartHASH$main$o$1@uniqueID} field = obProp: int = 1 field = $val1: int = 1 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' diff --git a/idea/testData/debugger/tinyApp/outs/frameInnerLambda.out b/idea/testData/debugger/tinyApp/outs/frameInnerLambda.out index ea2067f31fd..7d2943e8d25 100644 --- a/idea/testData/debugger/tinyApp/outs/frameInnerLambda.out +++ b/idea/testData/debugger/tinyApp/outs/frameInnerLambda.out @@ -32,9 +32,9 @@ fun foo(f: () -> Unit) { // EXPRESSION: val1 + val2 // RESULT: 2: I - frame = invoke():9, FrameInnerLambdaPackage$main$1$1 {frameInnerLambda} - this = this = {frameInnerLambda.FrameInnerLambdaPackage$main$1$1@uniqueID}kotlin.Function0 - field = this$0: frameInnerLambda.FrameInnerLambdaPackage$main$1 = {frameInnerLambda.FrameInnerLambdaPackage$main$1@uniqueID}kotlin.Function0 + frame = invoke():9, FrameInnerLambdaPackage$@packagePartHASH$main$1$1 {frameInnerLambda} + this = this = {frameInnerLambda.FrameInnerLambdaPackage$@packagePartHASH$main$1$1@uniqueID}kotlin.Function0 + field = this$0: frameInnerLambda.FrameInnerLambdaPackage$@packagePartHASH$main$1 = {frameInnerLambda.FrameInnerLambdaPackage$@packagePartHASH$main$1@uniqueID}kotlin.Function0 field = $val1: int = 1 field = $val2: int = 1 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' diff --git a/idea/testData/debugger/tinyApp/outs/frameLambda.out b/idea/testData/debugger/tinyApp/outs/frameLambda.out index a350934bffb..9c05801b552 100644 --- a/idea/testData/debugger/tinyApp/outs/frameLambda.out +++ b/idea/testData/debugger/tinyApp/outs/frameLambda.out @@ -21,8 +21,8 @@ fun foo(f: () -> Unit) { // EXPRESSION: val1 // RESULT: 1: I - frame = invoke():7, FrameLambdaPackage$main$1 {frameLambda} - this = this = {frameLambda.FrameLambdaPackage$main$1@uniqueID}kotlin.Function0 + frame = invoke():7, FrameLambdaPackage$@packagePartHASH$main$1 {frameLambda} + this = this = {frameLambda.FrameLambdaPackage$@packagePartHASH$main$1@uniqueID}kotlin.Function0 field = $val1: int = 1 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' diff --git a/idea/testData/debugger/tinyApp/outs/frameLambdaNotUsed.out b/idea/testData/debugger/tinyApp/outs/frameLambdaNotUsed.out index 92dac611503..68d09807ab5 100644 --- a/idea/testData/debugger/tinyApp/outs/frameLambdaNotUsed.out +++ b/idea/testData/debugger/tinyApp/outs/frameLambdaNotUsed.out @@ -21,8 +21,8 @@ fun foo(f: () -> Unit) { // EXPRESSION: val1 // RESULT: Cannot find local variable: name = val1 - frame = invoke():7, FrameLambdaNotUsedPackage$main$1 {frameLambdaNotUsed} - this = this = {frameLambdaNotUsed.FrameLambdaNotUsedPackage$main$1@uniqueID}kotlin.Function0 + frame = invoke():7, FrameLambdaNotUsedPackage$@packagePartHASH$main$1 {frameLambdaNotUsed} + this = this = {frameLambdaNotUsed.FrameLambdaNotUsedPackage$@packagePartHASH$main$1@uniqueID}kotlin.Function0 local = a: int = 0 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' diff --git a/idea/testData/debugger/tinyApp/outs/frameObject.out b/idea/testData/debugger/tinyApp/outs/frameObject.out index e0c6fa974d5..ddd3127cf14 100644 --- a/idea/testData/debugger/tinyApp/outs/frameObject.out +++ b/idea/testData/debugger/tinyApp/outs/frameObject.out @@ -24,8 +24,8 @@ fun foo(f: () -> Unit) { // EXPRESSION: O.obProp // RESULT: 1: I - frame = invoke():6, FrameObjectPackage$main$1 {frameObject} - this = this = {frameObject.FrameObjectPackage$main$1@uniqueID}kotlin.Function0 + frame = invoke():6, FrameObjectPackage$@packagePartHASH$main$1 {frameObject} + this = this = {frameObject.FrameObjectPackage$@packagePartHASH$main$1@uniqueID}kotlin.Function0 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' Process finished with exit code 0 diff --git a/idea/testData/debugger/tinyApp/outs/frameSharedVar.out b/idea/testData/debugger/tinyApp/outs/frameSharedVar.out index f9dc0f2cb67..a100d961aba 100644 --- a/idea/testData/debugger/tinyApp/outs/frameSharedVar.out +++ b/idea/testData/debugger/tinyApp/outs/frameSharedVar.out @@ -17,8 +17,8 @@ fun foo(f: () -> Unit) { } // PRINT_FRAME - frame = invoke():7, FrameSharedVarPackage$main$1 {frameSharedVar} - this = this = {frameSharedVar.FrameSharedVarPackage$main$1@uniqueID}kotlin.Function0 + frame = invoke():7, FrameSharedVarPackage$@packagePartHASH$main$1 {frameSharedVar} + this = this = {frameSharedVar.FrameSharedVarPackage$@packagePartHASH$main$1@uniqueID}kotlin.Function0 field = $var1: kotlin.jvm.internal.Ref$IntRef = {kotlin.jvm.internal.Ref$IntRef@uniqueID}1 field = element: int = 1 Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket' diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt b/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt index 4e6509593b8..ca1063ee4cc 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/AbstractIncrementalJpsTest.kt @@ -33,6 +33,7 @@ import kotlin.test.fail import java.util.HashMap import org.jetbrains.jet.utils.keysToMap import org.jetbrains.jps.incremental.messages.BuildMessage +import java.util.regex.Pattern public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { private var testDataDir: File by Delegates.notNull() @@ -239,19 +240,21 @@ public abstract class AbstractIncrementalJpsTest : JpsBuildTestCase() { override fun isEnabled(): Boolean = true override fun logLine(message: String?) { - fun String.replaceHashWithStar(): String { - if (this contains "Package$") { - val lastDollar = this.lastIndexOf('$') - if (lastDollar != -1 && substring(lastDollar + 1).matches("[0-9a-f]{1,8}\\.class")) { - return substring(0, lastDollar) + "$*.class" - } + val matcher = STRIP_PACKAGE_PART_HASH_PATTERN.matcher(this) + if (matcher.find()) { + return matcher.replaceAll("\\$*") } return this } logBuf.append(message!!.trimLeading(rootPath + "/").replaceHashWithStar()).append('\n') } + + class object { + // We suspect sequences of several consecutive hexadecimal digits to be a package part hash code + val STRIP_PACKAGE_PART_HASH_PATTERN = Pattern.compile("\\$([0-9a-f]{5,8})") + } } private abstract class Modification(val path: String) { diff --git a/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log b/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log index ca0056732d4..d6788707583 100644 --- a/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log +++ b/jps-plugin/testData/incremental/pureKotlin/subpackage/build.log @@ -1,6 +1,6 @@ Cleaning output files: -out/production/module/outer/nested/NestedPackage$main$1.class -out/production/module/outer/nested/NestedPackage-nested-*.class +out/production/module/outer/nested/NestedPackage$nested$*$main$1.class +out/production/module/outer/nested/NestedPackage$nested$*.class out/production/module/outer/nested/NestedPackage.class End of files Compiling files: