diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java index 315c4bbb2de..63880fdecc8 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/AsmUtil.java @@ -291,23 +291,19 @@ public class AsmUtil { if (isEnumEntry(memberDescriptor)) { return NO_FLAG_PACKAGE_PRIVATE; } + if (memberDescriptor instanceof ConstructorDescriptor && isAnonymousObject(memberDescriptor.getContainingDeclaration())) { + return NO_FLAG_PACKAGE_PRIVATE; + } if (memberVisibility != Visibilities.PRIVATE) { return null; } // the following code is only for PRIVATE visibility of member if (memberDescriptor instanceof ConstructorDescriptor) { - if (isAnonymousObject(containingDeclaration)) { - return NO_FLAG_PACKAGE_PRIVATE; - } - ClassKind kind = ((ClassDescriptor) containingDeclaration).getKind(); - if (kind == ClassKind.OBJECT) { + if (kind == ClassKind.OBJECT || kind == ClassKind.ENUM_ENTRY) { return NO_FLAG_PACKAGE_PRIVATE; } - else if (kind == ClassKind.ENUM_ENTRY) { - return NO_FLAG_PACKAGE_PRIVATE; - } - else if (kind == ClassKind.ENUM_CLASS) { + if (kind == ClassKind.ENUM_CLASS) { //TODO: should be ACC_PRIVATE // see http://youtrack.jetbrains.com/issue/KT-2680 return ACC_PROTECTED; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java index 54c3c4faa90..59c92b2ed48 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/Errors.java @@ -180,12 +180,17 @@ public interface Errors { DiagnosticFactory1 ENUM_ENTRY_SHOULD_BE_INITIALIZED = DiagnosticFactory1.create(ERROR, NAME_IDENTIFIER); DiagnosticFactory1 ENUM_ENTRY_ILLEGAL_TYPE = DiagnosticFactory1.create(ERROR); + DiagnosticFactory1 LOCAL_ENUM_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, NAME_IDENTIFIER); // Class objects DiagnosticFactory0 MANY_CLASS_OBJECTS = DiagnosticFactory0.create(ERROR); DiagnosticFactory0 CLASS_OBJECT_NOT_ALLOWED = DiagnosticFactory0.create(ERROR); + // Objects + + DiagnosticFactory1 LOCAL_OBJECT_NOT_ALLOWED = DiagnosticFactory1.create(ERROR, NAME_IDENTIFIER); + // Type parameter declarations DiagnosticFactory1 FINAL_UPPER_BOUND = DiagnosticFactory1.create(WARNING); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java index 276f25ccc57..a9cdf4383f6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/diagnostics/rendering/DefaultErrorMessages.java @@ -216,6 +216,8 @@ public class DefaultErrorMessages { MAP.put(MANY_CLASS_OBJECTS, "Only one class object is allowed per class"); MAP.put(CLASS_OBJECT_NOT_ALLOWED, "A class object is not allowed here"); + MAP.put(LOCAL_OBJECT_NOT_ALLOWED, "Named object ''{0}'' is a singleton and cannot be local. Try to use anonymous object instead", NAME); + MAP.put(LOCAL_ENUM_NOT_ALLOWED, "Enum class ''{0}'' cannot be local", NAME); MAP.put(DELEGATION_IN_TRAIT, "Traits cannot use delegation"); MAP.put(DELEGATION_NOT_TO_TRAIT, "Only traits can be delegated to"); MAP.put(UNMET_TRAIT_REQUIREMENT, "Super trait ''{0}'' requires subclasses to extend ''{1}''", NAME, NAME); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java index 72c4c7653c4..011b9bfa434 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPsiUtil.java @@ -835,6 +835,7 @@ public class JetPsiUtil { JetBlockExpression.class, JetClassInitializer.class, JetProperty.class, JetFunction.class, JetParameter.class ); if (container == null) return null; + if (container.getParent() instanceof JetScript) return null; return (container instanceof JetClassInitializer) ? ((JetClassInitializer) container).getBody() : container; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java index 70057320445..782d1cd3ce3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationResolver.java @@ -182,7 +182,8 @@ public class DeclarationResolver { scopeForPropertyInitializers, property, trace, - c.getOuterDataFlowInfo()); + c.getOuterDataFlowInfo() + ); packageLike.addPropertyDescriptor(propertyDescriptor); c.getProperties().put(property, propertyDescriptor); c.registerDeclaringScope(property, scopeForPropertyInitializers); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java index 432e183a189..f5b987a4e79 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DeclarationsChecker.java @@ -76,7 +76,7 @@ public class DeclarationsChecker { jetClass, classDescriptor, classDescriptor.getScopeForClassHeaderResolution(), trace); } else if (classOrObject instanceof JetObjectDeclaration) { - checkObject((JetObjectDeclaration) classOrObject); + checkObject((JetObjectDeclaration) classOrObject, classDescriptor); } modifiersChecker.checkModifiersForDeclaration(classOrObject, classDescriptor); @@ -245,8 +245,11 @@ public class DeclarationsChecker { public abstract boolean removeNeeded(JetType subject, JetType other); } - private void checkObject(JetObjectDeclaration declaration) { + private void checkObject(JetObjectDeclaration declaration, ClassDescriptor classDescriptor) { reportErrorIfHasIllegalModifier(declaration); + if (declaration.isLocal() && !declaration.isClassObject() && !declaration.isObjectLiteral()) { + trace.report(LOCAL_OBJECT_NOT_ALLOWED.on(declaration, classDescriptor)); + } } private void checkClass(BodiesResolveContext c, JetClass aClass, ClassDescriptorWithResolutionScopes classDescriptor) { @@ -264,6 +267,9 @@ public class DeclarationsChecker { } else if (aClass.isEnum()) { checkEnumModifiers(aClass); + if (aClass.isLocal()) { + trace.report(LOCAL_ENUM_NOT_ALLOWED.on(aClass, classDescriptor)); + } } else if (aClass instanceof JetEnumEntry) { checkEnumEntry((JetEnumEntry) aClass, classDescriptor); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java index 4cb88b19417..08fa22c9317 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/ModifiersChecker.java @@ -37,9 +37,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Map; -import static org.jetbrains.jet.lang.diagnostics.Errors.ILLEGAL_MODIFIER; -import static org.jetbrains.jet.lang.diagnostics.Errors.ILLEGAL_PLATFORM_NAME; -import static org.jetbrains.jet.lang.diagnostics.Errors.INAPPLICABLE_ANNOTATION; +import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lexer.JetTokens.*; public class ModifiersChecker { @@ -121,16 +119,17 @@ public class ModifiersChecker { } private void checkInnerModifier(@NotNull JetModifierListOwner modifierListOwner, @NotNull DeclarationDescriptor descriptor) { - JetModifierList modifierList = modifierListOwner.getModifierList(); - - if (modifierList != null && modifierList.hasModifier(INNER_KEYWORD)) { + if (modifierListOwner.hasModifier(INNER_KEYWORD)) { if (isIllegalInner(descriptor)) { - checkIllegalInThisContextModifiers(modifierList, Collections.singletonList(INNER_KEYWORD)); + checkIllegalInThisContextModifiers(modifierListOwner.getModifierList(), Collections.singletonList(INNER_KEYWORD)); } + return; } - else { - if (modifierListOwner instanceof JetClass && !(modifierListOwner instanceof JetEnumEntry) && isIllegalNestedClass(descriptor)) { - trace.report(Errors.NESTED_CLASS_NOT_ALLOWED.on((JetClass) modifierListOwner)); + if (modifierListOwner instanceof JetClass && !(modifierListOwner instanceof JetEnumEntry)) { + JetClass aClass = (JetClass) modifierListOwner; + boolean localEnumError = aClass.isLocal() && aClass.isEnum(); + if (!localEnumError && isIllegalNestedClass(descriptor)) { + trace.report(NESTED_CLASS_NOT_ALLOWED.on(aClass)); } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java index 1e37f347da2..9a5ca3f0d26 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/extension/InlineAnalyzerExtension.java @@ -61,15 +61,6 @@ public class InlineAnalyzerExtension implements FunctionAnalyzerExtension.Analyz trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(klass, klass, descriptor)); } - @Override - public void visitObjectDeclaration(@NotNull JetObjectDeclaration declaration) { - if (declaration.getParent() instanceof JetObjectLiteralExpression) { - super.visitObjectDeclaration(declaration); - } else { - trace.report(Errors.NOT_YET_SUPPORTED_IN_INLINE.on(declaration, declaration, descriptor)); - } - } - @Override public void visitNamedFunction(@NotNull JetNamedFunction function) { if (function.getParent().getParent() instanceof JetObjectDeclaration) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java index 69e5babe6be..69b975138b6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/AbstractLazyMemberScope.java @@ -181,7 +181,8 @@ public abstract class AbstractLazyMemberScopeendsWithObjectDeclaration : () -> Int = { var x = 1 x = 333 - object A {} + object A {} } val expectedUnitReturnType1 = { () : Unit -> @@ -202,7 +202,7 @@ fun testFunctionLiterals() { val expectedUnitReturnType2 = { () : Unit -> fun meow() : Unit {} - object A {} + object A {} } -} \ No newline at end of file +} diff --git a/compiler/testData/diagnostics/tests/enum/localEnums.kt b/compiler/testData/diagnostics/tests/enum/localEnums.kt new file mode 100644 index 00000000000..9a3ccc61f3e --- /dev/null +++ b/compiler/testData/diagnostics/tests/enum/localEnums.kt @@ -0,0 +1,18 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE + +fun foo() { + enum class A { + FOO + BAR + } + val foo = A.FOO + val b = object { + enum class B {} + } + class C { + enum class D {} + } + val f = { + enum class E {} + } +} diff --git a/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt b/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt index c564b001b72..30be1897f4d 100644 --- a/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt +++ b/compiler/testData/diagnostics/tests/inline/unsupportedConstruction.kt @@ -8,9 +8,9 @@ inline fun unsupported() { } } - object B{ - object BInner {} - } + object B{ + object BInner {} + } fun local() { fun localInner() {} diff --git a/compiler/testData/diagnostics/tests/inner/referenceToSelfInLocal.kt b/compiler/testData/diagnostics/tests/inner/referenceToSelfInLocal.kt index e7b46fbd9b0..ddd18236cdd 100644 --- a/compiler/testData/diagnostics/tests/inner/referenceToSelfInLocal.kt +++ b/compiler/testData/diagnostics/tests/inner/referenceToSelfInLocal.kt @@ -11,7 +11,7 @@ fun f() { } } - object MyObject { + object MyObject { { val obj: MyObject = MyObject } diff --git a/compiler/testData/diagnostics/tests/objects/ObjectsLocal.kt b/compiler/testData/diagnostics/tests/objects/ObjectsLocal.kt index 605ca0ee97d..47841bf069e 100644 --- a/compiler/testData/diagnostics/tests/objects/ObjectsLocal.kt +++ b/compiler/testData/diagnostics/tests/objects/ObjectsLocal.kt @@ -14,7 +14,7 @@ fun test() { } b.foo() - object B { + object B { fun foo() {} } B.foo() diff --git a/compiler/testData/diagnostics/tests/objects/localObjects.kt b/compiler/testData/diagnostics/tests/objects/localObjects.kt new file mode 100644 index 00000000000..882e3e0aa53 --- /dev/null +++ b/compiler/testData/diagnostics/tests/objects/localObjects.kt @@ -0,0 +1,15 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE + +fun foo() { + object a {} + val b = object { + object c {} + } + b.c + class A { + object d {} + } + val f = { + object e {} + } +} \ No newline at end of file diff --git a/compiler/testData/repl/objects/localObject.repl b/compiler/testData/repl/objects/localObject.repl new file mode 100644 index 00000000000..7dcfbc9bb22 --- /dev/null +++ b/compiler/testData/repl/objects/localObject.repl @@ -0,0 +1,5 @@ +>>> fun foo() { +... object Bar { +... } +... } +ERROR: /line4.kts: (2, 1) Named object 'Bar' is a singleton and cannot be local. Try to use anonymous object instead \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 253c1e82a11..efaf773507c 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -3194,6 +3194,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/enum/kt2834.kt"); } + @TestMetadata("localEnums.kt") + public void testLocalEnums() throws Exception { + doTest("compiler/testData/diagnostics/tests/enum/localEnums.kt"); + } + @TestMetadata("starImportNestedClassAndEntries.kt") public void testStarImportNestedClassAndEntries() throws Exception { doTest("compiler/testData/diagnostics/tests/enum/starImportNestedClassAndEntries.kt"); @@ -5921,6 +5926,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/objects/localObjectInsideObject.kt"); } + @TestMetadata("localObjects.kt") + public void testLocalObjects() throws Exception { + doTest("compiler/testData/diagnostics/tests/objects/localObjects.kt"); + } + @TestMetadata("objectLiteralExpressionTypeMismatch.kt") public void testObjectLiteralExpressionTypeMismatch() throws Exception { doTest("compiler/testData/diagnostics/tests/objects/objectLiteralExpressionTypeMismatch.kt"); diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index dab8433f233..9e56e157289 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -2114,11 +2114,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/enum/entrywithinner.kt"); } - @TestMetadata("inFunction.kt") - public void testInFunction() throws Exception { - doTest("compiler/testData/codegen/box/enum/inFunction.kt"); - } - @TestMetadata("inPackage.kt") public void testInPackage() throws Exception { doTest("compiler/testData/codegen/box/enum/inPackage.kt"); @@ -2149,11 +2144,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/enum/kt2350.kt"); } - @TestMetadata("kt2673.kt") - public void testKt2673() throws Exception { - doTest("compiler/testData/codegen/box/enum/kt2673.kt"); - } - @TestMetadata("name.kt") public void testName() throws Exception { doTest("compiler/testData/codegen/box/enum/name.kt"); @@ -3336,11 +3326,6 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/localClasses/anonymousObjectInParameterInitializer.kt"); } - @TestMetadata("enum.kt") - public void testEnum() throws Exception { - doTest("compiler/testData/codegen/box/localClasses/enum.kt"); - } - @TestMetadata("inExtensionFunction.kt") public void testInExtensionFunction() throws Exception { doTest("compiler/testData/codegen/box/localClasses/inExtensionFunction.kt"); @@ -4059,6 +4044,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/objects/nestedObjectWithSuperclass.kt"); } + @TestMetadata("objectInLocalAnonymousObject.kt") + public void testObjectInLocalAnonymousObject() throws Exception { + doTest("compiler/testData/codegen/box/objects/objectInLocalAnonymousObject.kt"); + } + @TestMetadata("objectLiteral.kt") public void testObjectLiteral() throws Exception { doTest("compiler/testData/codegen/box/objects/objectLiteral.kt"); diff --git a/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTestGenerated.java b/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTestGenerated.java index c8c16861279..25085bc261d 100644 --- a/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/repl/ReplInterpreterTestGenerated.java @@ -186,6 +186,11 @@ public class ReplInterpreterTestGenerated extends AbstractReplInterpreterTest { doTest("compiler/testData/repl/objects/emptyObject.repl"); } + @TestMetadata("localObject.repl") + public void testLocalObject() throws Exception { + doTest("compiler/testData/repl/objects/localObject.repl"); + } + @TestMetadata("simpleObjectDeclaration.repl") public void testSimpleObjectDeclaration() throws Exception { doTest("compiler/testData/repl/objects/simpleObjectDeclaration.repl"); diff --git a/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java b/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java index 086af96c381..a70c5d11866 100644 --- a/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java +++ b/compiler/tests/org/jetbrains/jet/types/JetDefaultModalityModifiersTest.java @@ -134,8 +134,8 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture { List declarations = aClass.getDeclarations(); JetProperty property = (JetProperty) declarations.get(0); - PropertyDescriptor propertyDescriptor = descriptorResolver.resolvePropertyDescriptor(classDescriptor, scope, property, - JetTestUtils.DUMMY_TRACE, DataFlowInfo.EMPTY); + PropertyDescriptor propertyDescriptor = descriptorResolver.resolvePropertyDescriptor( + classDescriptor, scope, property, JetTestUtils.DUMMY_TRACE, DataFlowInfo.EMPTY); assertEquals(expectedPropertyModality, propertyDescriptor.getModality()); } @@ -147,8 +147,8 @@ public class JetDefaultModalityModifiersTest extends JetLiteFixture { List declarations = aClass.getDeclarations(); JetProperty property = (JetProperty) declarations.get(0); - PropertyDescriptor propertyDescriptor = descriptorResolver.resolvePropertyDescriptor(classDescriptor, scope, property, - JetTestUtils.DUMMY_TRACE, DataFlowInfo.EMPTY); + PropertyDescriptor propertyDescriptor = descriptorResolver.resolvePropertyDescriptor( + classDescriptor, scope, property, JetTestUtils.DUMMY_TRACE, DataFlowInfo.EMPTY); PropertyAccessorDescriptor propertyAccessor = isGetter ? propertyDescriptor.getGetter() : propertyDescriptor.getSetter(); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index 10ed897673d..35edbc96c36 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -289,9 +289,12 @@ public class DescriptorUtils { @NotNull public static Visibility getDefaultConstructorVisibility(@NotNull ClassDescriptor classDescriptor) { ClassKind classKind = classDescriptor.getKind(); - if (classKind == ClassKind.ENUM_CLASS || classKind.isSingleton() || isAnonymousObject(classDescriptor)) { + if (classKind == ClassKind.ENUM_CLASS || classKind.isSingleton()) { return Visibilities.PRIVATE; } + if (isAnonymousObject(classDescriptor)) { + return Visibilities.INTERNAL; + } assert classKind == ClassKind.CLASS || classKind == ClassKind.TRAIT || classKind == ClassKind.ANNOTATION_CLASS; return Visibilities.PUBLIC; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/name/FqNamesUtil.kt b/core/descriptors/src/org/jetbrains/jet/lang/resolve/name/FqNamesUtil.kt index baa9fed928d..d109911addb 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/name/FqNamesUtil.kt +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/name/FqNamesUtil.kt @@ -70,16 +70,16 @@ public fun ImportPath.isImported(alreadyImported: ImportPath): Boolean { public fun ImportPath.isImported(imports: Iterable): Boolean = imports.any { isImported(it) } +// Check that it is javaName(\.javaName)* or an empty string +private enum class State { + BEGINNING + MIDDLE + AFTER_DOT +} + public fun isValidJavaFqName(qualifiedName: String?): Boolean { if (qualifiedName == null) return false - // Check that it is javaName(\.javaName)* or an empty string - enum class State { - BEGINNING - MIDDLE - AFTER_DOT - } - var state = State.BEGINNING for (c in qualifiedName) { diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinPropertyProcessor.kt b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinPropertyProcessor.kt index cb7a7b52295..e2d57cff636 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinPropertyProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/rename/RenameKotlinPropertyProcessor.kt @@ -90,18 +90,18 @@ public class RenameKotlinPropertyProcessor : RenamePsiElementProcessor() { } } + private enum class UsageKind { + SIMPLE_PROPERTY_USAGE + GETTER_USAGE + SETTER_USAGE + } + override fun renameElement(element: PsiElement?, newName: String?, usages: Array, listener: RefactoringElementListener?) { if (element !is JetProperty) { super.renameElement(element, newName, usages, listener) return } - enum class UsageKind { - SIMPLE_PROPERTY_USAGE - GETTER_USAGE - SETTER_USAGE - } - val oldGetterName = PropertyCodegen.getterName(element.getNameAsName()) val oldSetterName = PropertyCodegen.setterName(element.getNameAsName()) diff --git a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/usagesSearch.kt b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/usagesSearch.kt index 1847cb671e3..d6f8331a9e5 100644 --- a/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/usagesSearch.kt +++ b/idea/src/org/jetbrains/jet/plugin/search/usagesSearch/usagesSearch.kt @@ -159,14 +159,14 @@ public class KotlinPsiSearchHelper(private val project: Project): PsiSearchHelpe public object UsagesSearch: QueryFactory() { { - object ExecutorImpl: QueryExecutorBase() { + val executorImpl = object : QueryExecutorBase() { override fun processQuery(request: UsagesSearchRequest, consumer: Processor) { val searchHelper = KotlinPsiSearchHelper(request.project) request.items.filter { it.filter != False }.all { searchHelper.processFilesWithText(it, consumer) } } } - registerExecutor(ExecutorImpl) + registerExecutor(executorImpl) } fun search(request: UsagesSearchRequest): Query = with(request) { diff --git a/idea/testData/checker/LocalObjects.kt b/idea/testData/checker/LocalObjects.kt index ebce487b825..d050ad6d848 100644 --- a/idea/testData/checker/LocalObjects.kt +++ b/idea/testData/checker/LocalObjects.kt @@ -12,7 +12,7 @@ } b.foo() - object B { + object B { fun foo() {} } B.foo() diff --git a/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassInitializer.kt b/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassInitializer.kt index e8e5c1d8be5..04f472246d7 100644 --- a/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassInitializer.kt +++ b/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassInitializer.kt @@ -17,4 +17,4 @@ class MyClass() { //public constructor MyClass() defined in test.MyClass //val a: test.MyClass.. defined in test.MyClass. //internal final class : test.A defined in test.MyClass. -//private constructor () defined in test.MyClass.. \ No newline at end of file +//internal constructor () defined in test.MyClass.. \ No newline at end of file diff --git a/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassParameterInitializer.kt b/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassParameterInitializer.kt index f69afc12c3e..549ae471b63 100644 --- a/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassParameterInitializer.kt +++ b/idea/testData/resolve/additionalLazyResolve/anonymousObjectInClassParameterInitializer.kt @@ -15,4 +15,4 @@ class MyClass( //public constructor MyClass(a: test.A = ...) defined in test.MyClass //value-parameter val a: test.A = ... defined in test.MyClass. //internal final class : test.A defined in test.MyClass. -//private constructor () defined in test.MyClass.. \ No newline at end of file +//internal constructor () defined in test.MyClass.. \ No newline at end of file diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java index 4ea808732a4..7dc8f4ca5b0 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java @@ -25,6 +25,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.impl.AnonymousFunctionDescriptor; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.OverrideResolver; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -37,6 +38,7 @@ import java.util.*; import static com.google.dart.compiler.backend.js.ast.JsBinaryOperator.*; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFqName; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isAnonymousObject; import static org.jetbrains.k2js.translate.context.Namer.getKotlinBackingFieldName; import static org.jetbrains.k2js.translate.utils.BindingUtils.getCallableDescriptorForOperationExpression; import static org.jetbrains.k2js.translate.utils.JsAstUtils.*; @@ -418,9 +420,11 @@ public final class TranslationUtils { public static String getSuggestedNameForInnerDeclaration(TranslationContext context, DeclarationDescriptor descriptor) { String suggestedName = ""; DeclarationDescriptor containingDeclaration = descriptor.getContainingDeclaration(); + //noinspection ConstantConditions if (containingDeclaration != null && !(containingDeclaration instanceof ClassOrPackageFragmentDescriptor) && - !(containingDeclaration instanceof AnonymousFunctionDescriptor)) { + !(containingDeclaration instanceof AnonymousFunctionDescriptor) && + !(containingDeclaration instanceof ConstructorDescriptor && isAnonymousObject(containingDeclaration.getContainingDeclaration()))) { suggestedName = context.getNameForDescriptor(containingDeclaration).getIdent(); } diff --git a/js/js.translator/testData/closure/cases/closureLocalInNestedObject.kt b/js/js.translator/testData/closure/cases/closureLocalInNestedObject.kt index 7ad0004e8e6..75fdcd8a6fc 100644 --- a/js/js.translator/testData/closure/cases/closureLocalInNestedObject.kt +++ b/js/js.translator/testData/closure/cases/closureLocalInNestedObject.kt @@ -3,7 +3,7 @@ package foo fun box(): String { var boo = "OK" var foo = object { - object bar { + val bar = object { val baz = boo } } diff --git a/js/js.translator/testData/object/cases/objectInMethod.kt b/js/js.translator/testData/object/cases/objectInMethod.kt index 61d26aa3910..b87be60051a 100644 --- a/js/js.translator/testData/object/cases/objectInMethod.kt +++ b/js/js.translator/testData/object/cases/objectInMethod.kt @@ -2,13 +2,10 @@ package foo class A() { fun f(): Boolean { - object t { - val c = true; - } val z = object { val c = true } - return t.c && z.c + return z.c } } diff --git a/js/js.translator/testData/object/cases/objectInObjectWithClosure.kt b/js/js.translator/testData/object/cases/objectInObjectWithClosure.kt index dfd3d65d374..6e91b5c701a 100644 --- a/js/js.translator/testData/object/cases/objectInObjectWithClosure.kt +++ b/js/js.translator/testData/object/cases/objectInObjectWithClosure.kt @@ -4,7 +4,7 @@ class Foo { fun bar(param: String): String { val local = "world!" var a = object { - object b { + val b = object { val bar = param + local } }