Merge branch 'master' of git@git.labs.intellij.net:idea/community
authorKirill Kalishev <kirill.kalishev@jetbrains.com>
Thu, 2 Sep 2010 09:28:04 +0000 (13:28 +0400)
committerKirill Kalishev <kirill.kalishev@jetbrains.com>
Thu, 2 Sep 2010 09:28:04 +0000 (13:28 +0400)
371 files changed:
images/src/META-INF/ImagesPlugin.xml
images/src/org/intellij/images/options/impl/OptionsConfigurabe.java
java/compiler/impl/src/com/intellij/compiler/impl/CompilerErrorTreeView.java
java/compiler/impl/src/com/intellij/compiler/options/CompilerConfigurable.java
java/debugger/impl/src/com/intellij/debugger/engine/evaluation/expression/EvaluatorBuilderImpl.java
java/idea-ui/src/com/intellij/ide/actions/ShowStructureSettingsAction.java
java/idea-ui/src/com/intellij/ide/actions/TemplateProjectStructureAction.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ModuleLevelConfigurablesEditorProvider.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectJdksConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/ProjectStructureConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/BaseStructureConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/FacetStructureConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/GlobalLibrariesConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/JdkListConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ModuleStructureConfigurable.java
java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectLibrariesConfigurable.java
java/java-impl/src/com/intellij/application/options/editor/JavaCodeFoldingOptionsProvider.java
java/java-impl/src/com/intellij/codeEditor/printing/HyperlinksToClassesOption.java
java/java-impl/src/com/intellij/codeInsight/CodeInsightUtil.java
java/java-impl/src/com/intellij/codeInsight/completion/ConstructorInsertHandler.java
java/java-impl/src/com/intellij/codeInsight/completion/DefaultInsertHandler.java
java/java-impl/src/com/intellij/codeInsight/completion/ImportStaticLookupActionProvider.java
java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java
java/java-impl/src/com/intellij/codeInsight/completion/JavaDocCompletionContributor.java
java/java-impl/src/com/intellij/codeInsight/completion/JavaGlobalMemberLookupElement.java
java/java-impl/src/com/intellij/codeInsight/completion/JavaGlobalMemberNameCompletionContributor.java
java/java-impl/src/com/intellij/codeInsight/completion/JavaMethodCallElement.java
java/java-impl/src/com/intellij/codeInsight/completion/SmartCompletionDecorator.java
java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java [new file with mode: 0644]
java/java-impl/src/com/intellij/codeInsight/completion/StaticallyImportable.java [new file with mode: 0644]
java/java-impl/src/com/intellij/codeInsight/completion/scope/JavaCompletionProcessor.java
java/java-impl/src/com/intellij/codeInsight/completion/simple/PsiMethodInsertHandler.java [deleted file]
java/java-impl/src/com/intellij/codeInsight/daemon/impl/actions/AddImportAction.java
java/java-impl/src/com/intellij/codeInsight/intention/impl/CreateFieldFromParameterAction.java
java/java-impl/src/com/intellij/codeInsight/lookup/impl/JavaElementLookupRenderer.java
java/java-impl/src/com/intellij/lang/java/parser/DeclarationParser.java
java/java-impl/src/com/intellij/lang/java/parser/ExpressionParser.java
java/java-impl/src/com/intellij/lang/java/parser/FileParser.java
java/java-impl/src/com/intellij/lang/java/parser/JavaParser.java
java/java-impl/src/com/intellij/lang/java/parser/JavaParserUtil.java
java/java-impl/src/com/intellij/lang/java/parser/ReferenceParser.java
java/java-impl/src/com/intellij/lang/java/parser/StatementParser.java
java/java-impl/src/com/intellij/psi/impl/source/PsiJavaFileBaseImpl.java
java/java-impl/src/com/intellij/psi/impl/source/PsiMethodReceiverImpl.java
java/java-impl/src/com/intellij/psi/impl/source/parsing/ParseUtil.java
java/java-impl/src/com/intellij/psi/impl/source/resolve/PsiResolveHelperImpl.java
java/java-impl/src/com/intellij/psi/impl/source/tree/ElementType.java
java/java-impl/src/com/intellij/psi/impl/source/tree/JavaElementType.java
java/java-impl/src/com/intellij/psi/impl/source/tree/java/ClassElement.java
java/java-impl/src/com/intellij/psi/impl/source/tree/java/PsiTypeParameterImpl.java
java/java-impl/src/com/intellij/psi/impl/source/tree/java/ReplaceExpressionUtil.java
java/java-impl/src/com/intellij/refactoring/move/moveClassesOrPackages/MoveClassesOrPackagesHandlerBase.java
java/java-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/JavaMoveFilesOrDirectoriesHandler.java
java/java-impl/src/com/intellij/refactoring/rename/JavaUnresolvableLocalCollisionDetector.java
java/java-impl/src/com/intellij/refactoring/util/FieldConflictsResolver.java
java/java-impl/src/com/intellij/refactoring/util/RefactoringUtil.java
java/java-impl/src/com/intellij/usages/impl/rules/ClassGroupingRule.java
java/java-impl/src/com/intellij/usages/impl/rules/MethodGroupingRule.java
java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass-out.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField-out.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField-out.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedMagicMethod.java
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterArrayType.java [new file with mode: 0644]
java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeArrayType.java [new file with mode: 0644]
java/java-tests/testData/psi/parser-full/expressionParsing/New15.java [new file with mode: 0644]
java/java-tests/testData/psi/parser-full/expressionParsing/New15.txt [new file with mode: 0644]
java/java-tests/testData/psi/parser-partial/references/Type7.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/dndMove/publicJavaClass/d/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/dndMove/secondJavaClass/d/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.after.java [new file with mode: 0644]
java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/s/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/txt2move.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/txt2move.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/t/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/MyLocal.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/txt2move.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/txt2move.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/t/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/MyLocal.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/t/txt2move.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/MyClass.java [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/empty.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/s/txt2move.txt [new file with mode: 0644]
java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/before/t/empty.txt [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/JavaTestUtil.java
java/java-tests/testSrc/com/intellij/codeInsight/completion/GlobalMemberNameCompletionTest.groovy
java/java-tests/testSrc/com/intellij/codeInsight/completion/LightFixtureCompletionTestCase.java [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy [moved from java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.java with 56% similarity]
java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionOrderingTest.java
java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java
java/java-tests/testSrc/com/intellij/lang/java/parser/ExpressionParsingTest.java
java/java-tests/testSrc/com/intellij/lang/java/parser/JavaParsingTestCase.java
java/java-tests/testSrc/com/intellij/lang/java/parser/partial/ReferenceParserTest.java
java/java-tests/testSrc/com/intellij/refactoring/DndMoveTest.java [new file with mode: 0644]
java/java-tests/testSrc/com/intellij/refactoring/IntroduceVariableTest.java
java/java-tests/testSrc/com/intellij/refactoring/MoveClassAndFileTest.java [new file with mode: 0644]
java/jsp-spi/src/com/intellij/psi/impl/source/jsp/JspManager.java
java/openapi/src/com/intellij/psi/PsiResolveHelper.java
java/openapi/src/com/intellij/psi/util/PsiUtil.java
java/testFramework/src/com/intellij/codeInsight/CodeInsightTestCase.java
java/testFramework/src/com/intellij/codeInsight/daemon/quickFix/LightQuickFixTestCase.java
lib/automaton.jar [new file with mode: 0644]
platform/extensions/src/com/intellij/openapi/extensions/AbstractExtensionPointBean.java
platform/lang-api/src/com/intellij/codeInsight/completion/CompletionResultSet.java
platform/lang-api/src/com/intellij/codeInsight/completion/InsertionContext.java
platform/lang-api/src/com/intellij/execution/configurations/RunConfigurationBase.java
platform/lang-api/src/com/intellij/ide/actions/CreateElementActionBase.java
platform/lang-api/src/com/intellij/lang/ASTNode.java
platform/lang-api/src/com/intellij/lang/WhitespacesAndCommentsProcessor.java
platform/lang-api/src/com/intellij/lang/injection/InjectedLanguageManager.java
platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java
platform/lang-api/src/com/intellij/psi/PsiFileFactory.java
platform/lang-api/src/com/intellij/psi/codeStyle/CodeStyleSettings.java
platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettings.java
platform/lang-api/src/com/intellij/psi/codeStyle/CommonCodeStyleSettingsManager.java
platform/lang-api/src/com/intellij/psi/codeStyle/LanguageCodeStyleSettingsProvider.java
platform/lang-api/src/com/intellij/semantic/SemContributor.java
platform/lang-api/src/com/intellij/semantic/SemContributorEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/application/options/CodeStyleSchemesConfigurable.java
platform/lang-impl/src/com/intellij/application/options/CodeStyleSettingsUtilImpl.java
platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleBlankLinesPanel.java
platform/lang-impl/src/com/intellij/application/options/codeStyle/CodeStyleSpacesPanel.java
platform/lang-impl/src/com/intellij/application/options/codeStyle/MultilanguageCodeStyleAbstractPanel.java
platform/lang-impl/src/com/intellij/application/options/codeStyle/OptionTreeWithPreviewPanel.java
platform/lang-impl/src/com/intellij/application/options/codeStyle/WrappingAndBracesPanel.java
platform/lang-impl/src/com/intellij/application/options/colors/ColorAndFontOptions.java
platform/lang-impl/src/com/intellij/application/options/colors/ScopeColorsPageFactory.java
platform/lang-impl/src/com/intellij/application/options/editor/AutoImportOptionsConfigurable.java
platform/lang-impl/src/com/intellij/application/options/editor/AutoImportOptionsProvider.java
platform/lang-impl/src/com/intellij/application/options/editor/AutoImportOptionsProviderEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/application/options/editor/BaseCodeFoldingOptionsProvider.java
platform/lang-impl/src/com/intellij/application/options/editor/CodeFoldingConfigurable.java
platform/lang-impl/src/com/intellij/application/options/editor/CodeFoldingOptionsProvider.java
platform/lang-impl/src/com/intellij/application/options/editor/CodeFoldingOptionsProviderEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurable.java
platform/lang-impl/src/com/intellij/application/options/editor/EditorAppearanceConfigurableEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/application/options/editor/EditorOptions.java
platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsProvider.java
platform/lang-impl/src/com/intellij/application/options/editor/EditorOptionsProviderEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/application/options/editor/EditorSmartKeysConfigurable.java
platform/lang-impl/src/com/intellij/application/options/editor/EditorSmartKeysConfigurableEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/application/options/editor/ErrorHighlightingPanel.java
platform/lang-impl/src/com/intellij/codeEditor/printing/ExportToHTMLDialog.java
platform/lang-impl/src/com/intellij/codeEditor/printing/PrintOption.java
platform/lang-impl/src/com/intellij/codeInsight/actions/ReformatCodeAction.java
platform/lang-impl/src/com/intellij/codeInsight/completion/CodeCompletionHandlerBase.java
platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionProgressIndicator.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/DaemonListeners.java
platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HectorComponent.java
platform/lang-impl/src/com/intellij/codeInsight/intention/impl/EditFoldingOptionsAction.java
platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionDescriptionPanel.java
platform/lang-impl/src/com/intellij/codeInsight/lookup/impl/LookupImpl.java
platform/lang-impl/src/com/intellij/codeInspection/ex/EditInspectionToolsSettingsAction.java
platform/lang-impl/src/com/intellij/codeInspection/ex/SeverityEditorDialog.java
platform/lang-impl/src/com/intellij/execution/actions/RunConfigurationAction.java
platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleImpl.java
platform/lang-impl/src/com/intellij/execution/console/LanguageConsoleViewImpl.java
platform/lang-impl/src/com/intellij/execution/runners/AbstractConsoleRunnerWithHistory.java
platform/lang-impl/src/com/intellij/ide/actions/CreateFileAction.java
platform/lang-impl/src/com/intellij/ide/projectView/impl/MoveDropTargetListener.java
platform/lang-impl/src/com/intellij/ide/todo/TodoPanel.java
platform/lang-impl/src/com/intellij/ide/todo/configurable/TodoConfigurable.java
platform/lang-impl/src/com/intellij/internal/DumpExtensionsAction.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/lang/impl/PsiBuilderImpl.java
platform/lang-impl/src/com/intellij/openapi/options/ModuleConfigurableEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/openapi/vfs/encoding/ConfigureFileDefaultEncodingAction.java
platform/lang-impl/src/com/intellij/openapi/vfs/encoding/FileEncodingConfigurable.java
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/ErrorOptionsProvider.java
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/ErrorOptionsProviderEP.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/ErrorsConfigurable.java
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/ErrorsConfigurableProvider.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/PlatformInspectionsConfigurableProvider.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/ProjectInspectionToolsConfigurable.java
platform/lang-impl/src/com/intellij/profile/codeInspection/ui/ProjectInspectionToolsConfigurableProvider.java [new file with mode: 0644]
platform/lang-impl/src/com/intellij/psi/SingleRootFileViewProvider.java
platform/lang-impl/src/com/intellij/psi/impl/PsiFileFactoryImpl.java
platform/lang-impl/src/com/intellij/psi/impl/cache/impl/BaseFilterLexer.java
platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/ReferenceProvidersRegistry.java
platform/lang-impl/src/com/intellij/psi/impl/source/tree/CompositeElement.java
platform/lang-impl/src/com/intellij/psi/impl/source/tree/LazyParseableElement.java
platform/lang-impl/src/com/intellij/psi/impl/source/tree/LeafElement.java
platform/lang-impl/src/com/intellij/psi/impl/source/tree/LeafPsiElement.java
platform/lang-impl/src/com/intellij/psi/impl/source/tree/OwnBufferLeafPsiElement.java
platform/lang-impl/src/com/intellij/psi/templateLanguages/ChangeTemplateDataLanguageAction.java
platform/lang-impl/src/com/intellij/psi/templateLanguages/TemplateDataLanguageConfigurable.java
platform/lang-impl/src/com/intellij/psi/templateLanguages/TemplateLanguageErrorQuickFixProvider.java
platform/lang-impl/src/com/intellij/refactoring/actions/BasePlatformRefactoringAction.java
platform/lang-impl/src/com/intellij/refactoring/move/MoveHandler.java
platform/lang-impl/src/com/intellij/refactoring/move/MoveHandlerDelegate.java
platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesUtil.java
platform/lang-impl/src/com/intellij/semantic/SemServiceImpl.java
platform/lang-impl/src/com/intellij/util/indexing/FileContent.java
platform/lang-impl/testSrc/com/intellij/lang/LightPsiBuilderTest.java
platform/platform-api/platform-api.iml
platform/platform-api/src/com/intellij/execution/process/OSProcessHandler.java
platform/platform-api/src/com/intellij/ide/BrowserSettingsProvider.java
platform/platform-api/src/com/intellij/lexer/DelegateLexer.java
platform/platform-api/src/com/intellij/openapi/actionSystem/ex/ComboBoxAction.java
platform/platform-api/src/com/intellij/openapi/application/ex/PathManagerEx.java
platform/platform-api/src/com/intellij/openapi/editor/DocumentRunnable.java
platform/platform-api/src/com/intellij/openapi/options/Configurable.java
platform/platform-api/src/com/intellij/openapi/options/ConfigurableProvider.java [new file with mode: 0644]
platform/platform-api/src/com/intellij/openapi/options/ShowSettingsUtil.java
platform/platform-api/src/com/intellij/patterns/StringPattern.java
platform/platform-api/src/com/intellij/util/net/HTTPProxySettingsDialog.java
platform/platform-api/src/com/intellij/util/net/HTTPProxySettingsPanel.java
platform/platform-api/src/com/intellij/util/net/HttpConfigurable.java
platform/platform-impl/src/com/intellij/ide/BrowserSettings.java
platform/platform-impl/src/com/intellij/ide/BrowserSettingsPanel.java
platform/platform-impl/src/com/intellij/ide/BrowserSettingsProviderEP.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/ide/GeneralSettingsConfigurable.java
platform/platform-impl/src/com/intellij/ide/GeneralSettingsConfigurableEP.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/ide/MacOSApplicationProvider.java
platform/platform-impl/src/com/intellij/ide/SaveAndSyncHandler.java
platform/platform-impl/src/com/intellij/ide/actions/AboutAction.java
platform/platform-impl/src/com/intellij/ide/actions/CustomizeUIAction.java
platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsAction.java
platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java
platform/platform-impl/src/com/intellij/ide/actions/TemplateProjectPropertiesAction.java
platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerConfigurable.java
platform/platform-impl/src/com/intellij/ide/plugins/PluginManagerUISettings.java
platform/platform-impl/src/com/intellij/ide/ui/customization/CustomizationConfigurable.java
platform/platform-impl/src/com/intellij/ide/ui/search/SearchUtil.java
platform/platform-impl/src/com/intellij/idea/IdeaApplication.java
platform/platform-impl/src/com/intellij/notification/impl/NotificationsConfigurable.java
platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java
platform/platform-impl/src/com/intellij/openapi/components/impl/stores/StorageUtil.java
platform/platform-impl/src/com/intellij/openapi/options/AbstractConfigurableEP.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/options/ConfigurableEP.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/options/SchemesManagerImpl.java
platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurableExtensionPointUtil.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/options/ex/ConfigurablesGroupBase.java [new file with mode: 0644]
platform/platform-impl/src/com/intellij/openapi/options/ex/IdeConfigurablesGroup.java
platform/platform-impl/src/com/intellij/openapi/options/ex/ProjectConfigurablesGroup.java
platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java
platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsTree.java
platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/AbstractUpdateDialog.java
platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/CheckForUpdateAction.java
platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateChecker.java
platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/UpdateSettingsConfigurable.java
platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemImpl.java
platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/RefreshSessionImpl.java
platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/WelcomeScreen.java
platform/platform-impl/src/com/intellij/ui/plaf/beg/BegButtonUI.java
platform/platform-impl/src/com/intellij/ui/plaf/beg/BegMenuItemUI.java
platform/platform-impl/src/com/intellij/ui/plaf/beg/IdeaMenuUI.java
platform/platform-impl/src/com/intellij/ui/popup/WizardPopup.java
platform/platform-resources-en/src/messages/ApplicationBundle.properties
platform/platform-resources/src/META-INF/LangExtensionPoints.xml
platform/platform-resources/src/META-INF/LangExtensions.xml
platform/platform-resources/src/META-INF/PlatformExtensionPoints.xml
platform/platform-resources/src/META-INF/PlatformExtensions.xml
platform/platform-resources/src/META-INF/PlatformLangPlugin.xml
platform/platform-resources/src/META-INF/VcsExtensions.xml
platform/platform-resources/src/META-INF/XmlActions.xml
platform/platform-resources/src/META-INF/XmlPlugin.xml
platform/platform-resources/src/META-INF/xdebugger.xml
platform/platform-resources/src/idea/Keymap_Default.xml
platform/platform-resources/src/idea/VcsActions.xml
platform/smRunner/testSrc/com/intellij/execution/testframework/sm/runner/ui/MockPrinter.java
platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java
platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightFixtureTestCase.java
platform/testFramework/src/com/intellij/testFramework/fixtures/CodeInsightTestFixture.java
platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java
platform/testFramework/src/com/intellij/testFramework/fixtures/impl/HeavyIdeaTestFixtureImpl.java
platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java
platform/testRunner/src/com/intellij/execution/testframework/CompositePrintable.java
platform/testRunner/src/com/intellij/execution/testframework/DeferingPrinter.java
platform/testRunner/src/com/intellij/execution/testframework/Printer.java
platform/testRunner/src/com/intellij/execution/testframework/export/TestResultsXmlFormatter.java
platform/testRunner/src/com/intellij/execution/testframework/ui/TestsOutputConsolePrinter.java
platform/util/src/com/intellij/openapi/util/text/StringUtil.java
platform/util/src/com/intellij/util/containers/PrimitiveConvertor.java [new file with mode: 0644]
platform/util/src/com/intellij/util/containers/ReadonlyList.java [new file with mode: 0644]
platform/util/src/com/intellij/util/lang/ClassPath.java
platform/util/src/com/intellij/util/lang/UrlClassLoader.java
platform/vcs-api/src/com/intellij/openapi/vcs/CompoundNumber.java [new file with mode: 0644]
platform/vcs-api/src/com/intellij/openapi/vcs/ReadonlyListsMerger.java [new file with mode: 0644]
platform/vcs-api/src/com/intellij/openapi/vcs/Ring.java [new file with mode: 0644]
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/Waiter.java
platform/vcs-impl/src/com/intellij/openapi/vcs/changes/actions/CommitAction.java [deleted file]
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurable.java
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerConfigurableProvider.java [new file with mode: 0644]
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/DebuggerSettingsPanelProvider.java
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/settings/XDebuggerSettingsPanelProviderImpl.java
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/DebuggerSessionTabBase.java
plugins/IntelliLang/src/META-INF/plugin.xml
plugins/ant/src/com/intellij/lang/ant/config/impl/AntConfigurationImpl.java
plugins/ant/src/com/intellij/lang/ant/dom/CustomAntElementsRegistry.java
plugins/ant/src/com/intellij/lang/ant/psi/impl/AntTypeDefImpl.java
plugins/copyright/src/META-INF/plugin.xml
plugins/copyright/src/com/maddyhome/idea/copyright/actions/GenerateCopyrightAction.java
plugins/copyright/src/com/maddyhome/idea/copyright/ui/ProjectSettingsPanel.java
plugins/git4idea/src/git4idea/history/GitHistoryUtils.java
plugins/git4idea/src/git4idea/history/GitUsersComponent.java
plugins/git4idea/src/git4idea/history/browser/LowLevelAccessImpl.java
plugins/git4idea/src/git4idea/history/wholeTree/CommitHashPlusParents.java [new file with mode: 0644]
plugins/git4idea/src/git4idea/history/wholeTree/SkeletonBuilder.java [new file with mode: 0644]
plugins/git4idea/src/git4idea/history/wholeTree/TreeSkeleton.java [new file with mode: 0644]
plugins/git4idea/src/git4idea/history/wholeTree/TreeSkeletonImpl.java [new file with mode: 0644]
plugins/git4idea/tests/git4idea/tests/SkeletonBuilderTest.java [new file with mode: 0644]
plugins/groovy/src/META-INF/plugin.xml
plugins/groovy/src/org/jetbrains/plugins/groovy/gant/GantRunner.java
plugins/groovy/src/org/jetbrains/plugins/groovy/gradle/GradleScriptType.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyClassNameInsertHandler.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionContributor.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/GroovyFileImpl.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/expressions/GrReferenceExpressionImpl.java
plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/util/PsiUtil.java
plugins/groovy/src/org/jetbrains/plugins/groovy/refactoring/introduceParameter/java2groovy/FieldConflictsResolver.java
plugins/groovy/test/org/jetbrains/plugins/groovy/GroovyClassNameCompletionTest.groovy
plugins/groovy/test/org/jetbrains/plugins/groovy/GroovyCompletionTest.groovy [moved from plugins/groovy/test/org/jetbrains/plugins/groovy/GroovyCompletionTest.java with 94% similarity]
plugins/groovy/test/org/jetbrains/plugins/groovy/lang/completion/CompletionTestBase.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgUtil.java
plugins/hg4idea/src/org/zmlx/hg4idea/HgVFSListener.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgAddCommand.java
plugins/hg4idea/src/org/zmlx/hg4idea/command/HgRemoveCommand.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgAbstractTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgCollaborativeTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgDeleteTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgMockVcsHelper.java [new file with mode: 0644]
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgSingleUserTestCase.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/HgTestChangeListManager.java
plugins/hg4idea/testSrc/org/zmlx/hg4idea/test/VcsHelperListener.java [new file with mode: 0644]
plugins/maven/src/main/java/org/jetbrains/idea/maven/project/actions/EditSettingsAction.java
plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java
plugins/maven/src/main/resources/META-INF/plugin.xml
plugins/properties/src/com/intellij/lang/properties/projectView/ResourceBundleMoveProvider.java
plugins/spellchecker/src/META-INF/plugin.xml
plugins/spellchecker/src/com/intellij/spellchecker/compress/Encoder.java
plugins/spellchecker/src/com/intellij/spellchecker/settings/SpellCheckerSettingsManager.java
plugins/spellchecker/src/com/intellij/spellchecker/settings/SpellCheckerSettingsPane.java
plugins/spellchecker/src/com/intellij/spellchecker/util/SpellCheckerBundle.properties
plugins/svn4idea/src/org/jetbrains/idea/svn/SvnUtil.java
plugins/svn4idea/src/org/jetbrains/idea/svn/actions/ShareProjectAction.java
plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java
plugins/ui-designer/src/META-INF/plugin.xml
plugins/ui-designer/src/com/intellij/uiDesigner/projectView/FormMoveProvider.java
plugins/xpath/xpath-lang/src/org/intellij/lang/xpath/xslt/associations/impl/FileAssociationsConfigurable.java
plugins/xpath/xpath-view/src/META-INF/plugin.xml
resources/src/META-INF/IdeaPlugin.xml
resources/src/idea/IdeaActions.xml
samples/textEditor/src/META-INF/plugin.xml [new file with mode: 0644]
samples/textEditor/src/myDocumentFiles/MyActionClass.java [new file with mode: 0644]
samples/textEditor/src/myDocumentFiles/MyVisualPanel.java [new file with mode: 0644]
samples/textEditor/src/myDocumentFiles/OpenFileForm.form [new file with mode: 0644]
samples/textEditor/textEditor.iml [new file with mode: 0644]
samples/textEditor/textEditor.ipr [new file with mode: 0644]
samples/toolWindow/src/META-INF/plugin.xml
samples/vfs/src/com/intellij/openapi/samples/VfsSamplePlugin.java
samples/vfs/vfs.iml
samples/vfs/vfs.ipr
xml/impl/src/com/intellij/application/options/editor/WebEditorAppearanceConfigurable.java
xml/impl/src/com/intellij/codeInsight/daemon/impl/quickfix/ManuallySetupExtResourceAction.java
xml/impl/src/com/intellij/codeInsight/template/zencoding/nodes/UnaryMulOperationNode.java

index 601e1883316aed4a9ffaa4779f43c22b427ef8c8..b6b12669da7faa586ab9c04e3d295f6f8680fb2e 100644 (file)
@@ -6,7 +6,7 @@
 
   <extensions defaultExtensionNs="com.intellij">
     <errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
-    <applicationConfigurable implementation="org.intellij.images.options.impl.OptionsConfigurabe"/>
+    <applicationConfigurable instance="org.intellij.images.options.impl.OptionsConfigurabe"/>
     <fileEditorProvider implementation="org.intellij.images.editor.impl.ImageFileEditorProvider"/>
     <selectInTarget implementation="org.intellij.images.thumbnail.impl.ThumbnailSelectInTarget"/>
     <applicationService serviceInterface="org.intellij.images.options.OptionsManager"
index 3467dae7a51fd12d44e0491074f92010e256691a..19bd30221f5b7f5c4d86a2c6b82024d7698f55cb 100644 (file)
@@ -95,9 +95,9 @@ public final class OptionsConfigurabe extends BaseConfigurableWithChangeSupport
         setModified(!options.equals(uiOptions));
     }
 
-  public static void show(Project project) {
-        OptionsConfigurabe component = ShowSettingsUtil.getInstance().findApplicationConfigurable(OptionsConfigurabe.class);
-        ShowSettingsUtil.getInstance().editConfigurable(project, component);
+    public static void show(Project project) {
+        final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
+      util.editConfigurable(project, new OptionsConfigurabe());
     }
 
   @NonNls
index 3b0d8e70a0a9f6965932dc3b2443dcba516f0d27..aaa3061bb4fcdba95387d605d63de9971c0c3260 100644 (file)
@@ -88,7 +88,9 @@ public class CompilerErrorTreeView extends NewErrorTreeViewPanel {
 
     public void actionPerformed(AnActionEvent e) {
       Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());
-      ShowSettingsUtil.getInstance().editConfigurable(project, CompilerConfigurable.getInstance(project));
+      if (project == null) return;
+      final ShowSettingsUtil util = ShowSettingsUtil.getInstance();
+      util.editConfigurable(project, new CompilerConfigurable(project));
     }
   }
 
index 0c1174001a764caaf3ffef073b8b374e58623b16..99b0b10c27442aa7d64d2cf538d82d9c2232be8b 100644 (file)
@@ -46,10 +46,6 @@ public class CompilerConfigurable implements SearchableConfigurable.Parent {
   private final CompilerUIConfigurable myCompilerUIConfigurable;
   private Configurable[] myKids;
 
-  public static CompilerConfigurable getInstance(Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, CompilerConfigurable.class);
-  }
-
   public CompilerConfigurable(Project project) {
     myProject = project;
     myCompilerUIConfigurable = new CompilerUIConfigurable(myProject);
index 3e0b113c10e3315efdfa6fbf158f65260691e9b1..2a58c6d7bcff5cf6f9e3e20a474669ab7679a48e 100644 (file)
@@ -117,39 +117,32 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
 
     @Override
     public void visitErrorElement(PsiErrorElement element) {
-      throw new EvaluateRuntimeException(EvaluateExceptionUtil
-        .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", element.getText())));
+      throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", element.getText()));
     }
 
     @Override
     public void visitAssignmentExpression(PsiAssignmentExpression expression) {
       final PsiExpression rExpression = expression.getRExpression();
       if(rExpression == null) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())); return;
       }
 
       rExpression.accept(this);
       Evaluator rEvaluator = myResult;
 
       if(expression.getOperationSign().getTokenType() != JavaTokenType.EQ) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.operation.not.supported", expression.getOperationSign().getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.operation.not.supported", expression.getOperationSign().getText()));
       }
 
       final PsiExpression lExpression = expression.getLExpression();
 
       final PsiType lType = lExpression.getType();
       if(lType == null) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", lExpression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", lExpression.getText()));
       }
 
       if(!TypeConversionUtil.areTypesAssignmentCompatible(lType, rExpression)) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.incompatible.types", expression.getOperationSign().getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.incompatible.types", expression.getOperationSign().getText()));
       }
       lExpression.accept(this);
       Evaluator lEvaluator = myResult;
@@ -191,7 +184,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
 
     @Override
     public void visitStatement(PsiStatement statement) {
-      throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.statement.not.supported", statement.getText())));
+      throwEvaluateException(DebuggerBundle.message("evaluation.error.statement.not.supported", statement.getText()));
     }
 
     @Override
@@ -314,18 +307,14 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       Evaluator lResult = myResult;
       final PsiExpression rOperand = expression.getROperand();
       if(rOperand == null) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())); return;
       }
       rOperand.accept(this);
       Evaluator rResult = myResult;
       IElementType opType = expression.getOperationSign().getTokenType();
       PsiType expressionExpectedType = expression.getType();
       if (expressionExpectedType == null) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()));
       }
       myResult = createBinaryEvaluator(lResult, lOperand.getType(), rResult, rOperand.getType(), opType, expressionExpectedType);
     }
@@ -441,8 +430,8 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       }
       // handle '==' and '!=' separately
       if (opCode == JavaTokenType.EQEQ || opCode == JavaTokenType.NE) {
-        return (lType instanceof PsiPrimitiveType && rType instanceof PsiClassType) ||
-               (lType instanceof PsiClassType     && rType instanceof PsiPrimitiveType);
+        return lType instanceof PsiPrimitiveType && rType instanceof PsiClassType ||
+               lType instanceof PsiClassType     && rType instanceof PsiPrimitiveType;
       }
       // all other operations at least one should be of class type
       return lType instanceof PsiClassType || rType instanceof PsiClassType;
@@ -468,7 +457,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       for (PsiElement declaredElement : declaredElements) {
         if (declaredElement instanceof PsiLocalVariable) {
           if (myCurrentFragmentEvaluator != null) {
-            final PsiLocalVariable localVariable = ((PsiLocalVariable)declaredElement);
+            final PsiLocalVariable localVariable = (PsiLocalVariable)declaredElement;
 
             final PsiType lType = localVariable.getType();
 
@@ -488,9 +477,9 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
             PsiExpression initializer = localVariable.getInitializer();
             if (initializer != null) {
               try {
-                if (!TypeConversionUtil.areTypesAssignmentCompatible(localVariable.getType(), initializer)) {
-                  throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-                    DebuggerBundle.message("evaluation.error.incompatible.variable.initializer.type", localVariable.getName())));
+                if (!TypeConversionUtil.areTypesAssignmentCompatible(lType, initializer)) {
+                  throwEvaluateException(
+                    DebuggerBundle.message("evaluation.error.incompatible.variable.initializer.type", localVariable.getName()));
                 }
                 final PsiType rType = initializer.getType();
                 initializer.accept(this);
@@ -521,9 +510,9 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
         }
       }
 
-      if(evaluators.size() > 0) {
+      if(!evaluators.isEmpty()) {
         CodeFragmentEvaluator codeFragmentEvaluator = new CodeFragmentEvaluator(myCurrentFragmentEvaluator);
-        codeFragmentEvaluator.setStatements(evaluators.toArray(new Evaluator[0]));
+        codeFragmentEvaluator.setStatements(evaluators.toArray(new Evaluator[evaluators.size()]));
         myResult = codeFragmentEvaluator;
       } else {
         myResult = null;
@@ -538,26 +527,22 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       final PsiExpression thenExpression = expression.getThenExpression();
       final PsiExpression elseExpression = expression.getElseExpression();
       if (thenExpression == null || elseExpression == null){
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil
-          .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())); return;
       }
       PsiExpression condition = expression.getCondition();
       condition.accept(this);
       if (myResult == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil
-          .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", condition.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", condition.getText())); return;
       }
       Evaluator conditionEvaluator = myResult;
       thenExpression.accept(this);
       if (myResult == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil
-          .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", thenExpression.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", thenExpression.getText())); return;
       }
       Evaluator thenEvaluator = myResult;
       elseExpression.accept(this);
       if (myResult == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil
-          .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", elseExpression.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", elseExpression.getText())); return;
       }
       Evaluator elseEvaluator = myResult;
       myResult = new ConditionalExpressionEvaluator(conditionEvaluator, thenEvaluator, elseEvaluator);
@@ -569,7 +554,8 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
         LOG.debug("visitReferenceExpression " + expression);
       }
       PsiExpression qualifier = expression.getQualifierExpression();
-      PsiElement element = expression.resolve();
+      JavaResolveResult resolveResult = expression.advancedResolve(true);
+      PsiElement element = resolveResult.getElement();
 
       if (element instanceof PsiLocalVariable || element instanceof PsiParameter) {
         final Value labeledValue = element.getUserData(CodeFragmentFactoryContextWrapper.LABEL_VARIABLE_VALUE_KEY);
@@ -579,7 +565,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
         }
         //synthetic variable
         final PsiFile containingFile = element.getContainingFile();
-        if(containingFile instanceof PsiCodeFragment && myCurrentFragmentEvaluator != null && myVisitedFragments.contains(((PsiCodeFragment)containingFile))) {
+        if(containingFile instanceof PsiCodeFragment && myCurrentFragmentEvaluator != null && myVisitedFragments.contains(containingFile)) {
           // psiVariable may live in PsiCodeFragment not only in debugger editors, for example Fabrique has such variables.
           // So treat it as synthetic var only when this code fragment is located in DebuggerEditor,
           // that's why we need to check that containing code fragment is the one we visited
@@ -610,10 +596,12 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           aClass = getOuterClass(aClass);
         }
         if (aClass != null) {
-          if(psiVar.getInitializer() != null) {
-            Object value = JavaPsiFacade.getInstance(psiVar.getProject()).getConstantEvaluationHelper().computeConstantExpression(psiVar.getInitializer());
+          PsiExpression initializer = psiVar.getInitializer();
+          if(initializer != null) {
+            Object value = JavaPsiFacade.getInstance(psiVar.getProject()).getConstantEvaluationHelper().computeConstantExpression(initializer);
             if(value != null) {
-              myResult = new LiteralEvaluator(value, psiVar.getType().getCanonicalText());
+              PsiType type = resolveResult.getSubstitutor().substitute(psiVar.getType());
+              myResult = new LiteralEvaluator(value, type.getCanonicalText());
               return;
             }
           }
@@ -624,16 +612,13 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           myResult = new FieldEvaluator(objectEvaluator, filter, "val$" + localName);
           return;
         }
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-          DebuggerBundle.message("evaluation.error.local.variable.missing.from.class.closure", localName))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.local.variable.missing.from.class.closure", localName));
       }
       else if (element instanceof PsiField) {
         final PsiField psiField = (PsiField)element;
         final PsiClass fieldClass = psiField.getContainingClass();
         if(fieldClass == null) {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-            DebuggerBundle.message("evaluation.error.cannot.resolve.field.class", psiField.getName())));
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.cannot.resolve.field.class", psiField.getName())); return;
         }
         Evaluator objectEvaluator;
         if (psiField.hasModifierProperty(PsiModifier.STATIC)) {
@@ -654,8 +639,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
             aClass = getOuterClass(aClass);
           }
           if (aClass == null) {
-            throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-              DebuggerBundle.message("evaluation.error.cannot.sources.for.field.class", psiField.getName())));
+            throwEvaluateException(DebuggerBundle.message("evaluation.error.cannot.sources.for.field.class", psiField.getName()));
           }
           objectEvaluator = new ThisEvaluator(iterationCount);
         }
@@ -670,13 +654,14 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
         }
         else {
           //noinspection HardCodedStringLiteral
-          final String elementDisplayString = (nameElement != null ? nameElement.getText() : "(null)");
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-            DebuggerBundle.message("evaluation.error.identifier.expected", elementDisplayString)));
+          final String elementDisplayString = nameElement != null ? nameElement.getText() : "(null)";
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.identifier.expected", elementDisplayString));
+          return;
         }
 
         if(qualifier != null) {
-          final PsiElement qualifierTarget = (qualifier instanceof PsiReferenceExpression) ? ((PsiReferenceExpression)qualifier).resolve() : null;
+          final PsiElement qualifierTarget = qualifier instanceof PsiReferenceExpression
+                                             ? ((PsiReferenceExpression)qualifier).resolve() : null;
           if (qualifierTarget instanceof PsiClass) {
             // this is a call to a 'static' field
             PsiClass psiClass = (PsiClass)qualifierTarget;
@@ -686,16 +671,12 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           else {
             PsiType type = qualifier.getType();
             if(type == null) {
-              throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-                DebuggerBundle.message("evaluation.error.qualifier.type.unknown", qualifier.getText()))
-              );
+              throwEvaluateException(DebuggerBundle.message("evaluation.error.qualifier.type.unknown", qualifier.getText()));
             }
 
             qualifier.accept(this);
             if (myResult == null) {
-              throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-                DebuggerBundle.message("evaluation.error.cannot.evaluate.qualifier", qualifier.getText()))
-              );
+              throwEvaluateException(DebuggerBundle.message("evaluation.error.cannot.evaluate.qualifier", qualifier.getText()));
             }
 
             myResult = new FieldEvaluator(myResult, FieldEvaluator.createClassFilter(type), name);
@@ -707,6 +688,11 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       }
     }
 
+    private static void throwEvaluateException(String message) throws EvaluateRuntimeException {
+      //noinspection ThrowableResultOfMethodCallIgnored
+      throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(message));
+    }
+
     @Override
     public void visitSuperExpression(PsiSuperExpression expression) {
       if (LOG.isDebugEnabled()) {
@@ -730,8 +716,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       if (qualifier != null) {
         PsiElement targetClass = qualifier.resolve();
         if (targetClass == null || getContextPsiClass() == null) {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil
-            .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", qualifier.getText())));
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", qualifier.getText()));
         }
         try {
           PsiClass aClass = getContextPsiClass();
@@ -741,6 +726,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           }
         }
         catch (Exception e) {
+          //noinspection ThrowableResultOfMethodCallIgnored
           throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(e));
         }
       }
@@ -754,7 +740,8 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       }
       PsiTypeElement checkType = expression.getCheckType();
       if(checkType == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText()));
+        return;
       }
       PsiType type = checkType.getType();
       expression.getOperand().accept(this);
@@ -777,9 +764,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
     @Override
     public void visitPostfixExpression(PsiPostfixExpression expression) {
       if(expression.getType() == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-          DebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()));
       }
 
       final PsiExpression operandExpression = expression.getOperand();
@@ -789,7 +774,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
 
       final IElementType operation = expression.getOperationSign().getTokenType();
       final PsiType operandType = operandExpression.getType();
-      final @Nullable PsiType unboxedOperandType = PsiPrimitiveType.getUnboxedType(operandType);
+      @Nullable final PsiType unboxedOperandType = PsiPrimitiveType.getUnboxedType(operandType);
 
       Evaluator incrementImpl = createBinaryEvaluator(
         operandEvaluator, operandType,
@@ -807,16 +792,12 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
     public void visitPrefixExpression(final PsiPrefixExpression expression) {
       final PsiType expressionType = expression.getType();
       if(expressionType == null) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.type", expression.getText()));
       }
 
       final PsiExpression operandExpression = expression.getOperand();
       if (operandExpression == null) {
-        throw new EvaluateRuntimeException(
-          EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.operand", expression.getText()))
-        );
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.unknown.expression.operand", expression.getText()));
       }
       
       operandExpression.accept(this);
@@ -869,9 +850,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
         psiExpression.accept(this);
         if (myResult == null) {
           // cannot build evaluator
-          throw new EvaluateRuntimeException(
-            EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", psiExpression.getText()))
-          );
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", psiExpression.getText()));
         }
         argumentEvaluators.add(myResult);
       }
@@ -919,9 +898,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           if (qualifier instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifier).resolve() instanceof PsiClass) {
             // this is a call to a 'static' method
             if (contextClass == null && type == null) {
-              throw new EvaluateRuntimeException(
-                EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.qualifier.type.unknown", qualifier.getText()))
-              );
+              throwEvaluateException(DebuggerBundle.message("evaluation.error.qualifier.type.unknown", qualifier.getText()));
             }
             assert contextClass != null;
             objectEvaluator = new TypeEvaluator(contextClass);
@@ -946,12 +923,12 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
       }
 
       if (objectEvaluator == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText()));
       }
 
       if (psiMethod != null && !psiMethod.isConstructor()) {
         if (psiMethod.getReturnType() == null) {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(DebuggerBundle.message("evaluation.error.unknown.method.return.type", psiMethod.getText())));
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.unknown.method.return.type", psiMethod.getText()));
         }
       }
 
@@ -963,10 +940,12 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
             break; // actual arguments count is less than number of declared params 
           }
           final PsiType declaredParamType = declaredParams[i].getType();
+          PsiType substituted = resolveResult.getSubstitutor().substitute(declaredParamType);
           final PsiType actualArgType = argExpressions[i].getType();
-          if (TypeConversionUtil.boxingConversionApplicable(declaredParamType, actualArgType)) {
+          if (TypeConversionUtil.boxingConversionApplicable(substituted, actualArgType)) {
             final Evaluator argEval = argumentEvaluators.get(i);
-            argumentEvaluators.set(i, (declaredParamType instanceof PsiPrimitiveType)? new UnBoxingEvaluator(argEval) : new BoxingEvaluator(argEval));
+            argumentEvaluators.set(i, substituted instanceof PsiPrimitiveType
+                                      ? new UnBoxingEvaluator(argEval) : new BoxingEvaluator(argEval));
           }
         }
       }
@@ -978,7 +957,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
     public void visitLiteralExpression(PsiLiteralExpression expression) {
       Object value = expression.getValue();
       if(expression.getParsingError() != null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(expression.getParsingError()));
+        throwEvaluateException(expression.getParsingError());
       }
       myResult = new LiteralEvaluator(value, expression.getType().getCanonicalText());
     }
@@ -987,8 +966,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
     public void visitArrayAccessExpression(PsiArrayAccessExpression expression) {
       final PsiExpression indexExpression = expression.getIndexExpression();
       if(indexExpression == null) {
-        throw new EvaluateRuntimeException(EvaluateExceptionUtil
-          .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+        throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())); return;
       }
       indexExpression.accept(this);
       final Evaluator indexEvaluator = handleUnaryNumericPromotion(indexExpression.getType(), myResult); 
@@ -1089,30 +1067,26 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
             dimensionEvaluator = handleUnaryNumericPromotion(dimensionExpression.getType(), myResult);
           }
           else {
-            throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-              DebuggerBundle.message("evaluation.error.invalid.array.dimension.expression", dimensionExpression.getText())));
+            throwEvaluateException(
+              DebuggerBundle.message("evaluation.error.invalid.array.dimension.expression", dimensionExpression.getText()));
           }
         }
         else if (dimensions.length > 1){
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-            DebuggerBundle.message("evaluation.error.multi.dimensional.arrays.creation.not.supported"))
-          );
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.multi.dimensional.arrays.creation.not.supported"));
         }
 
         Evaluator initializerEvaluator = null;
         PsiArrayInitializerExpression arrayInitializer = expression.getArrayInitializer();
         if (arrayInitializer != null) {
           if (dimensionEvaluator != null) { // initializer already exists
-            throw new EvaluateRuntimeException(EvaluateExceptionUtil
-              .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+            throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText()));
           }
           arrayInitializer.accept(this);
           if (myResult != null) {
             initializerEvaluator = handleUnaryNumericPromotion(arrayInitializer.getType(), myResult);
           }
           else {
-            throw new EvaluateRuntimeException(EvaluateExceptionUtil
-              .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", arrayInitializer.getText())));
+            throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", arrayInitializer.getText()));
           }
           /*
           PsiExpression[] initializers = arrayInitializer.getInitializers();
@@ -1130,8 +1104,7 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           */
         }
         if (dimensionEvaluator == null && initializerEvaluator == null) {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil
-            .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText()));
         }
         myResult = new NewArrayInstanceEvaluator(
           new TypeEvaluator(JVMNameUtil.getJVMQualifiedName(expressionPsiType)),
@@ -1143,14 +1116,11 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
         LOG.assertTrue(expressionPsiType instanceof PsiClassType);
         PsiClass aClass = ((PsiClassType)expressionPsiType).resolve();
         if(aClass instanceof PsiAnonymousClass) {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil.createEvaluateException(
-            DebuggerBundle.message("evaluation.error.anonymous.class.evaluation.not.supported"))
-          );
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.anonymous.class.evaluation.not.supported"));
         }
         PsiExpressionList argumentList = expression.getArgumentList();
         if (argumentList == null) {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil
-            .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())));
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", expression.getText())); return;
         }
         PsiExpression[] argExpressions = argumentList.getExpressions();
         PsiMethod constructor = expression.resolveConstructor();
@@ -1167,12 +1137,11 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
             argumentEvaluators[idx] = myResult;
           }
           else {
-            throw new EvaluateRuntimeException(EvaluateExceptionUtil
-              .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", argExpression.getText())));
+            throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", argExpression.getText()));
           }
         }
         //noinspection HardCodedStringLiteral
-        JVMName signature = (constructor != null)? JVMNameUtil.getJVMSignature(constructor) : JVMNameUtil.getJVMRawText("()V");
+        JVMName signature = constructor != null ? JVMNameUtil.getJVMSignature(constructor) : JVMNameUtil.getJVMRawText("()V");
         myResult = new NewClassInstanceEvaluator(
           new TypeEvaluator(JVMNameUtil.getJVMQualifiedName(expressionPsiType)),
           signature,
@@ -1192,14 +1161,13 @@ public class EvaluatorBuilderImpl implements EvaluatorBuilder {
           evaluators[idx] = handleUnaryNumericPromotion(initializer.getType(), myResult);
         }
         else {
-          throw new EvaluateRuntimeException(EvaluateExceptionUtil
-            .createEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", initializer.getText())));
+          throwEvaluateException(DebuggerBundle.message("evaluation.error.invalid.expression", initializer.getText()));
         }
       }
       myResult = new ArrayInitializerEvaluator(evaluators);
     }
 
-    private PsiClass getOuterClass(PsiClass aClass) {
+    private static PsiClass getOuterClass(PsiClass aClass) {
       if(aClass == null) return null;
       return PsiTreeUtil.getContextOfType(aClass, PsiClass.class, true);
     }
index 6f4e0fa08cc7def04d20b4f785209ad314307811..777105f840bacfbc0544c9b3c7a1c7a85791fcb4 100644 (file)
@@ -32,6 +32,6 @@ public class ShowStructureSettingsAction extends AnAction implements DumbAware {
       project = ProjectManager.getInstance().getDefaultProject();
     }
 
-    ShowSettingsUtil.getInstance().editProjectConfigurable(project, ProjectStructureConfigurable.class, OptionsEditorDialog.DIMENSION_KEY);
+    ShowSettingsUtil.getInstance().editConfigurable(project, OptionsEditorDialog.DIMENSION_KEY, ProjectStructureConfigurable.getInstance(project));
   }
 }
\ No newline at end of file
index 8386a91d80370ece19aa92fb3267373ffad30aa1..0255cb005ee72ad45d64cc6e9c0c4b83c84159a6 100644 (file)
@@ -27,6 +27,6 @@ import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
 public class TemplateProjectStructureAction extends AnAction implements DumbAware {
   public void actionPerformed(final AnActionEvent e) {
     Project defaultProject = ProjectManagerEx.getInstanceEx().getDefaultProject();
-    ShowSettingsUtil.getInstance().editProjectConfigurable(defaultProject, ProjectStructureConfigurable.class, OptionsEditorDialog.DIMENSION_KEY);
+    ShowSettingsUtil.getInstance().editConfigurable(defaultProject, OptionsEditorDialog.DIMENSION_KEY, ProjectStructureConfigurable.getInstance(defaultProject));
   }
 }
\ No newline at end of file
index 701d067d10f82bc5ca5dce4826f491684fd0f831..3573f612bacbe7328054d562de19d843a80b7435 100644 (file)
  */
 package com.intellij.openapi.roots.ui.configuration;
 
+import com.intellij.openapi.extensions.ExtensionPointName;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleComponent;
 import com.intellij.openapi.module.ModuleConfigurationEditor;
 import com.intellij.openapi.options.Configurable;
 import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.extensions.ExtensionPointName;
-import com.intellij.openapi.extensions.Extensions;
+import com.intellij.openapi.options.ModuleConfigurableEP;
 
 import javax.swing.*;
 import java.util.ArrayList;
 
 public class ModuleLevelConfigurablesEditorProvider implements ModuleConfigurationEditorProvider, ModuleComponent {
-  public static final ExtensionPointName<Configurable> MODULE_CONFIGURABLES = ExtensionPointName.create("com.intellij.moduleConfigurable");
+  private static final ExtensionPointName<ModuleConfigurableEP> MODULE_CONFIGURABLES = ExtensionPointName.create("com.intellij.moduleConfigurable");
 
   private final Module myModule;
 
@@ -41,8 +41,9 @@ public class ModuleLevelConfigurablesEditorProvider implements ModuleConfigurati
     for (final Configurable moduleConfigurable : moduleConfigurables) {
       result.add(new ConfigurableWrapper(moduleConfigurable));
     }
-    for(Configurable configurable: Extensions.getExtensions(MODULE_CONFIGURABLES, myModule)) {
-      result.add(new ConfigurableWrapper(configurable));
+    final ModuleConfigurableEP[] extensions = myModule.getExtensions(MODULE_CONFIGURABLES);
+    for(ModuleConfigurableEP extension : extensions) {
+      result.add(new ConfigurableWrapper(extension.createConfigurable()));
     }
 
     return result.toArray(new ModuleConfigurationEditor[result.size()]);
index 3edad868db794b3e534b10edcb45f127ddd72d70..01c93a435756ee435d33bf2ab581c52a0ab4fd92 100644 (file)
@@ -25,7 +25,6 @@ package com.intellij.openapi.roots.ui.configuration;
 import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.DefaultActionGroup;
-import com.intellij.openapi.options.Configurable;
 import com.intellij.openapi.options.ConfigurationException;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
@@ -54,7 +53,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Set;
 
-public class ProjectJdksConfigurable extends MasterDetailsComponent implements Configurable.Assistant {
+public class ProjectJdksConfigurable extends MasterDetailsComponent {
 
   private final ProjectSdksModel myProjectJdksModel;
   private final Project myProject;
index 89b6c5db4681090251b3ed685e8717620e2bc640..7adcb4b39c34bd4f7adc74c77537dcc4a65af695 100644 (file)
@@ -18,6 +18,7 @@ package com.intellij.openapi.roots.ui.configuration;
 import com.intellij.facet.Facet;
 import com.intellij.ide.util.PropertiesComponent;
 import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleManager;
 import com.intellij.openapi.options.*;
@@ -470,7 +471,7 @@ public class ProjectStructureConfigurable extends BaseConfigurable implements Se
   }
 
   public static ProjectStructureConfigurable getInstance(final Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, ProjectStructureConfigurable.class);
+    return ServiceManager.getService(project, ProjectStructureConfigurable.class);
   }
 
   public ProjectSdksModel getProjectJdksModel() {
index 778f2d2829ea62c51da49808833f0c22be223778..c533f91f00f74522139f67209ba98667de1a30ed 100644 (file)
@@ -23,7 +23,6 @@ import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.keymap.Keymap;
 import com.intellij.openapi.keymap.KeymapManager;
 import com.intellij.openapi.module.Module;
-import com.intellij.openapi.options.Configurable;
 import com.intellij.openapi.options.SearchableConfigurable;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
@@ -55,7 +54,7 @@ import java.awt.*;
 import java.util.*;
 import java.util.List;
 
-public abstract class BaseStructureConfigurable extends MasterDetailsComponent implements SearchableConfigurable, Disposable, Configurable.Assistant, Place.Navigator {
+public abstract class BaseStructureConfigurable extends MasterDetailsComponent implements SearchableConfigurable, Disposable, Place.Navigator {
 
   protected StructureConfigurableContext myContext;
 
index 625b217f64582f1e5d63bcd312cfafc9e9dfae8c..4e24082dfcecd5c3450dde675cd05c8e09cfbad9 100644 (file)
@@ -26,12 +26,12 @@ import com.intellij.facet.ui.FacetEditor;
 import com.intellij.facet.ui.MultipleFacetSettingsEditor;
 import com.intellij.ide.DataManager;
 import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.module.ModuleManager;
 import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.options.ShowSettingsUtil;
 import com.intellij.openapi.project.DumbAware;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
@@ -71,7 +71,7 @@ public class FacetStructureConfigurable extends BaseStructureConfigurable {
   }
 
   public static FacetStructureConfigurable getInstance(final @NotNull Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, FacetStructureConfigurable.class);
+    return ServiceManager.getService(project, FacetStructureConfigurable.class);
   }
 
   public static boolean isEnabled() {
index 0a0bde05b67e5c2450ae8d47fad820fb0175a3fd..7730b1eb78fca45ffd07d609a6aeb3e207fa0ec4 100644 (file)
@@ -15,9 +15,9 @@
  */
 package com.intellij.openapi.roots.ui.configuration.projectRoot;
 
+import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
-import com.intellij.openapi.options.ShowSettingsUtil;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
 import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
@@ -60,7 +60,7 @@ public class GlobalLibrariesConfigurable extends BaseLibrariesConfigurable {
 
 
   public static GlobalLibrariesConfigurable getInstance(final Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, GlobalLibrariesConfigurable.class);
+    return ServiceManager.getService(project, GlobalLibrariesConfigurable.class);
   }
 
   public LibraryTableModifiableModelProvider getModelProvider(final boolean editable) {
index 5e50739e90812bc7fa20fb2bbd51b608101b9afa..cf8c4387e55fb4d91955559ec08f4fd71299f261 100644 (file)
@@ -18,10 +18,10 @@ package com.intellij.openapi.roots.ui.configuration.projectRoot;
 import com.intellij.openapi.actionSystem.AnAction;
 import com.intellij.openapi.actionSystem.AnActionEvent;
 import com.intellij.openapi.actionSystem.DefaultActionGroup;
+import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
 import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.options.ShowSettingsUtil;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
 import com.intellij.openapi.projectRoots.Sdk;
@@ -187,7 +187,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable {
   }
 
   public static JdkListConfigurable getInstance(Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, JdkListConfigurable.class);
+    return ServiceManager.getService(project, JdkListConfigurable.class);
   }
 
   public AbstractAddGroup createAddAction() {
index 26a493cfb2e592f8138f75ddbf6260b8ac2b9f7c..424544067bfddb80731ba9444b90f9ca5ea24c0c 100644 (file)
@@ -29,11 +29,11 @@ import com.intellij.ide.util.projectWizard.NamePathComponent;
 import com.intellij.ide.util.projectWizard.ProjectWizardUtil;
 import com.intellij.openapi.actionSystem.*;
 import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
 import com.intellij.openapi.module.*;
 import com.intellij.openapi.options.ConfigurationException;
-import com.intellij.openapi.options.ShowSettingsUtil;
 import com.intellij.openapi.project.DumbAware;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
@@ -385,7 +385,7 @@ public class ModuleStructureConfigurable extends BaseStructureConfigurable imple
 
 
   public static ModuleStructureConfigurable getInstance(final Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, ModuleStructureConfigurable.class);
+    return ServiceManager.getService(project, ModuleStructureConfigurable.class);
   }
 
   public void setStartModuleWizard(final boolean show) {
index bf79437fdb854acdc29c8e5110153081ebdb6508..74ae6a3d778fd6876da446a270c8b38f8258def7 100644 (file)
@@ -15,9 +15,9 @@
  */
 package com.intellij.openapi.roots.ui.configuration.projectRoot;
 
+import com.intellij.openapi.components.ServiceManager;
 import com.intellij.openapi.components.State;
 import com.intellij.openapi.components.Storage;
-import com.intellij.openapi.options.ShowSettingsUtil;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.project.ProjectBundle;
 import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar;
@@ -68,7 +68,7 @@ public class ProjectLibrariesConfigurable extends BaseLibrariesConfigurable {
   }
 
   public static ProjectLibrariesConfigurable getInstance(final Project project) {
-    return ShowSettingsUtil.getInstance().findProjectConfigurable(project, ProjectLibrariesConfigurable.class);
+    return ServiceManager.getService(project, ProjectLibrariesConfigurable.class);
   }
 
   protected String getAddText() {
index f5b255a6a40fd58865a0b852f6a5800be74bc949..d4d072a0c0c026602b976b16522dd4b58371cb4c 100644 (file)
@@ -25,7 +25,7 @@ import com.intellij.openapi.application.ApplicationBundle;
 import com.intellij.openapi.options.BeanConfigurable;
 
 public class JavaCodeFoldingOptionsProvider extends BeanConfigurable<JavaCodeFoldingSettings> implements CodeFoldingOptionsProvider {
-  protected JavaCodeFoldingOptionsProvider() {
+  public JavaCodeFoldingOptionsProvider() {
     super(JavaCodeFoldingSettings.getInstance());
     checkBox("COLLAPSE_ACCESSORS", ApplicationBundle.message("checkbox.collapse.simple.property.accessors"));
     checkBox("COLLAPSE_INNER_CLASSES", ApplicationBundle.message("checkbox.collapse.inner.classes"));
index 0bd16a677339e88f5b9aec90d48c411cf130746a..1c9e484498d3ae7f3dc5b29a4b5497792ac9f844 100644 (file)
@@ -23,14 +23,16 @@ package com.intellij.codeEditor.printing;
 import com.intellij.openapi.fileTypes.FileType;
 import com.intellij.openapi.fileTypes.StdFileTypes;
 import com.intellij.openapi.options.ConfigurationException;
+import com.intellij.openapi.options.UnnamedConfigurable;
 import com.intellij.psi.*;
+import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.util.Map;
 import java.util.TreeMap;
 
-public class HyperlinksToClassesOption implements PrintOption {
+public class HyperlinksToClassesOption extends PrintOption {
   private JCheckBox myCbGenerateHyperlinksToClasses;
   private boolean isGenerateHyperlinksToClasses = false;
 
@@ -42,27 +44,6 @@ public class HyperlinksToClassesOption implements PrintOption {
     isGenerateHyperlinksToClasses = generateHyperlinksToClasses;
   }
 
-  public JComponent createComponent() {
-    myCbGenerateHyperlinksToClasses = new JCheckBox(CodeEditorBundle.message("export.to.html.generate.hyperlinks.checkbox"), isGenerateHyperlinksToClasses);
-    return myCbGenerateHyperlinksToClasses;
-  }
-
-  public boolean isModified() {
-    return myCbGenerateHyperlinksToClasses.isSelected() != isGenerateHyperlinksToClasses;
-  }
-
-  public void apply() throws ConfigurationException {
-    isGenerateHyperlinksToClasses = myCbGenerateHyperlinksToClasses.isSelected();
-  }
-
-  public void reset() {
-    myCbGenerateHyperlinksToClasses.setSelected(isGenerateHyperlinksToClasses);
-  }
-
-  public void disposeUIResources() {
-    myCbGenerateHyperlinksToClasses = null;
-  }
-
   @Nullable
   public TreeMap<Integer, PsiReference> collectReferences(PsiFile psiFile, Map<PsiFile, PsiFile> filesMap) {
     if (isGenerateHyperlinksToClasses()) {
@@ -76,6 +57,12 @@ public class HyperlinksToClassesOption implements PrintOption {
     return null;
   }
 
+  @NotNull
+  @Override
+  public UnnamedConfigurable createConfigurable() {
+    return new HyperlinksToClassesConfigurable();
+  }
+
 
   private static void findClassReferences(PsiElement psiElement, TreeMap<Integer, PsiReference> refMap, Map<PsiFile, PsiFile> filesMap, PsiFile psiFile) {
     PsiReference ref = psiElement.getReference();
@@ -95,4 +82,25 @@ public class HyperlinksToClassesOption implements PrintOption {
     }
   }
 
+  private class HyperlinksToClassesConfigurable implements UnnamedConfigurable {
+    public JComponent createComponent() {
+      myCbGenerateHyperlinksToClasses = new JCheckBox(CodeEditorBundle.message("export.to.html.generate.hyperlinks.checkbox"), isGenerateHyperlinksToClasses);
+      return myCbGenerateHyperlinksToClasses;
+    }
+
+    public boolean isModified() {
+      return myCbGenerateHyperlinksToClasses.isSelected() != isGenerateHyperlinksToClasses;
+    }
+
+    public void apply() throws ConfigurationException {
+      isGenerateHyperlinksToClasses = myCbGenerateHyperlinksToClasses.isSelected();
+    }
+
+    public void reset() {
+      myCbGenerateHyperlinksToClasses.setSelected(isGenerateHyperlinksToClasses);
+    }
+
+    public void disposeUIResources() {
+    }
+  }
 }
\ No newline at end of file
index 992de1cdb61be6a9a1e1f61acbdfe5db12e451a1..b57f3897bdba1b83f1ace1828c2266f5f2d27ee2 100644 (file)
@@ -171,14 +171,16 @@ public class CodeInsightUtil {
   public static PsiExpression[] findExpressionOccurrences(PsiElement scope, PsiExpression expr) {
     List<PsiExpression> array = new ArrayList<PsiExpression>();
     addExpressionOccurrences(RefactoringUtil.unparenthesizeExpression(expr), array, scope);
-    boolean found = false;
-    for (PsiExpression psiExpression : array) {
-      if (PsiTreeUtil.isAncestor(expr, psiExpression, false) || PsiTreeUtil.isAncestor(psiExpression, expr, false)) {
-        found = true;
-        break;
+    if (expr.isPhysical()) {
+      boolean found = false;
+      for (PsiExpression psiExpression : array) {
+        if (PsiTreeUtil.isAncestor(expr, psiExpression, false) || PsiTreeUtil.isAncestor(psiExpression, expr, false)) {
+          found = true;
+          break;
+        }
       }
+      if (!found) array.add(expr);
     }
-    if (!found) array.add(expr);
     return array.toArray(new PsiExpression[array.size()]);
   }
 
index aa82cc1db9ef42cc05f532c75f0e2e79df2761e8..0842ac45f63b16dbc2b73c5de35761620429d39c 100644 (file)
@@ -1,6 +1,5 @@
 package com.intellij.codeInsight.completion;
 
-import com.intellij.codeInsight.completion.simple.PsiMethodInsertHandler;
 import com.intellij.codeInsight.generation.GenerateMembersUtil;
 import com.intellij.codeInsight.generation.OverrideImplementUtil;
 import com.intellij.codeInsight.generation.PsiGenerationInfo;
@@ -79,7 +78,7 @@ class ConstructorInsertHandler implements InsertHandler<LookupElementDecorator<L
       }
     }
 
-    PsiMethodInsertHandler.insertParentheses(context, delegate, false, hasParams);
+    JavaCompletionUtil.insertParentheses(context, delegate, false, hasParams);
   }
 
   private static Runnable generateAnonymousBody(final Editor editor, PsiFile file) {
index b5c15029b7769440da76f0e0f2282c72df824e3c..9804e43c8429beb700286b0ef5ef768f76f80094 100644 (file)
@@ -32,7 +32,6 @@ import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.psi.*;
 import com.intellij.psi.codeStyle.CodeStyleSettings;
 import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.NotNull;
@@ -357,7 +356,7 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
       final int i = lookupString.indexOf('<');
       if (i >= 0) length = i;
       final int newOffset = addImportForClass(file, startOffset, startOffset + length, aClass);
-      shortenReference(file, newOffset);
+      JavaCompletionUtil.shortenReference(file, newOffset);
     }
     else if (o instanceof PsiType){
       PsiType type = ((PsiType)o).getDeepComponentType();
@@ -381,18 +380,6 @@ public class DefaultInsertHandler extends TemplateInsertHandler implements Clone
     }
   }
 
-  //need to shorten references in type argument list
-  private static void shortenReference(final PsiFile file, final int offset) throws IncorrectOperationException {
-    final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject());
-    final Document document = manager.getDocument(file);
-    assert document != null;
-    manager.commitDocument(document);
-    final PsiReference ref = file.findReferenceAt(offset);
-    if (ref instanceof PsiJavaCodeReferenceElement) {
-      JavaCodeStyleManager.getInstance(file.getProject()).shortenClassReferences((PsiJavaCodeReferenceElement)ref);
-    }
-  }
-
   private static int addImportForClass(PsiFile file, int startOffset, int endOffset, PsiClass aClass) throws IncorrectOperationException {
     return JavaCompletionUtil.insertClassReference(aClass, file, startOffset, endOffset);
   }
index 4fe765adbe0e96f57e386763713967d4c0ceb028..4c8e8b878b4add2340e6599d44cfdaed91f0c5cb 100644 (file)
@@ -14,19 +14,23 @@ import javax.swing.*;
 public class ImportStaticLookupActionProvider implements LookupActionProvider {
   @Override
   public void fillActions(final LookupElement element, Lookup lookup, Consumer<LookupElementAction> consumer) {
-    if (!(element instanceof JavaGlobalMemberLookupElement)) {
+    if (!(element instanceof StaticallyImportable)) {
+      return;
+    }
+
+    final StaticallyImportable item = (StaticallyImportable)element;
+    if (!item.canBeImported()) {
       return;
     }
 
-    final JavaGlobalMemberLookupElement item = (JavaGlobalMemberLookupElement)element;
     final Icon checkIcon = Icons.CHECK_ICON;
-    final Icon icon = item.isShouldImport() ? checkIcon : new EmptyIcon(checkIcon.getIconWidth(), checkIcon.getIconHeight());
+    final Icon icon = item.willBeImported() ? checkIcon : new EmptyIcon(checkIcon.getIconWidth(), checkIcon.getIconHeight());
     consumer.consume(new LookupElementAction(icon, "Import statically") {
       @Override
       public Result performLookupAction() {
         FeatureUsageTracker.getInstance().triggerFeatureUsed(JavaCompletionFeatures.IMPORT_STATIC);
 
-        item.setShouldImport(!item.isShouldImport());
+        item.setShouldBeImported(!item.willBeImported());
         return Result.REFRESH_ITEM;
       }
     });
index 3ddd53cdc621ed948462d47bc9444d4ec769c566..0de7a293d26c0674b94f761fb7a962983c01b252 100644 (file)
  */
 package com.intellij.codeInsight.completion;
 
-import com.intellij.codeInsight.CodeInsightSettings;
-import com.intellij.codeInsight.CodeInsightUtilBase;
-import com.intellij.codeInsight.ExpectedTypeInfo;
-import com.intellij.codeInsight.ExpectedTypeInfoImpl;
+import com.intellij.codeInsight.*;
 import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
 import com.intellij.codeInsight.completion.scope.CompletionElement;
 import com.intellij.codeInsight.completion.scope.JavaCompletionProcessor;
+import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler;
 import com.intellij.codeInsight.generation.OverrideImplementUtil;
 import com.intellij.codeInsight.guess.GuessManager;
 import com.intellij.codeInsight.lookup.*;
@@ -30,6 +28,7 @@ import com.intellij.openapi.application.ApplicationManager;
 import com.intellij.openapi.command.CommandProcessor;
 import com.intellij.openapi.diagnostic.Logger;
 import com.intellij.openapi.editor.Document;
+import com.intellij.openapi.editor.Editor;
 import com.intellij.openapi.editor.RangeMarker;
 import com.intellij.openapi.fileEditor.FileDocumentManager;
 import com.intellij.openapi.project.Project;
@@ -58,9 +57,7 @@ import com.intellij.psi.tree.IElementType;
 import com.intellij.psi.util.*;
 import com.intellij.psi.xml.XmlToken;
 import com.intellij.psi.xml.XmlTokenType;
-import com.intellij.util.ArrayUtil;
-import com.intellij.util.NullableFunction;
-import com.intellij.util.PairFunction;
+import com.intellij.util.*;
 import com.intellij.util.containers.ContainerUtil;
 import com.intellij.util.containers.HashMap;
 import gnu.trove.THashSet;
@@ -886,6 +883,13 @@ public class JavaCompletionUtil {
       }
     }
 
+    JavaGlobalMemberNameCompletionContributor.completeStaticMembers(element).processMembersOfRegisteredClasses(matcher, new Consumer<LookupElement>() {
+      @Override
+      public void consume(LookupElement element) {
+        set.add(element);
+      }
+    });
+
     return set;
   }
 
@@ -1035,11 +1039,13 @@ public class JavaCompletionUtil {
   }
 
   public static LookupItem qualify(final LookupItem ret) {
-    final PsiMember completionElement = (PsiMember)ret.getObject();
-    final PsiClass containingClass = completionElement.getContainingClass();
-    if (containingClass != null) {
-      final String className = containingClass.getName();
-      ret.setLookupString(className + "." + ret.getLookupString());
+    if (!(ret instanceof JavaMethodCallElement)) {
+      final PsiMember completionElement = (PsiMember)ret.getObject();
+      final PsiClass containingClass = completionElement.getContainingClass();
+      if (containingClass != null) {
+        final String className = containingClass.getName();
+        ret.setLookupString(className + "." + ret.getLookupString());
+      }
     }
     return ret.forceQualify();
   }
@@ -1176,4 +1182,86 @@ public class JavaCompletionUtil {
     toDelete.setGreedyToRight(true);
     return toDelete;
   }
+
+  public static void insertParentheses(final InsertionContext context, final LookupElement item, boolean overloadsMatter, boolean hasParams) {
+    final Editor editor = context.getEditor();
+    final TailType tailType = getTailType(item, context);
+    final PsiFile file = context.getFile();
+
+    context.setAddCompletionChar(false);
+
+
+    final boolean needLeftParenth = isToInsertParenth(file.findElementAt(context.getStartOffset()));
+    final boolean needRightParenth = shouldInsertRParenth(context.getCompletionChar(), tailType, hasParams);
+
+    if (needLeftParenth) {
+      final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(context.getProject());
+      ParenthesesInsertHandler.getInstance(hasParams,
+                                           styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES,
+                                           styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES && hasParams,
+                                           needRightParenth,
+                                           styleSettings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE
+      ).handleInsert(context, item);
+    }
+
+    if (needLeftParenth && hasParams) {
+      // Invoke parameters popup
+      AutoPopupController.getInstance(file.getProject()).autoPopupParameterInfo(editor, overloadsMatter ? null : (PsiElement)item.getObject());
+    }
+    if (tailType == TailType.SMART_COMPLETION || needLeftParenth && needRightParenth) {
+      tailType.processTail(editor, context.getTailOffset());
+    }
+  }
+
+  public static boolean shouldInsertRParenth(char completionChar, TailType tailType, boolean hasParams) {
+    if (tailType == TailType.SMART_COMPLETION) {
+      return false;
+    }
+
+    if (completionChar == '(' && !hasParams) {
+      //it's highly probable that the user will type ')' next and it may not be overwritten if the flag is off
+      return CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET;
+    }
+
+    return true;
+  }
+
+  @NotNull
+  public static TailType getTailType(final LookupElement item, InsertionContext context) {
+    final char completionChar = context.getCompletionChar();
+    if (completionChar == '!') return item instanceof LookupItem ? ((LookupItem)item).getTailType() : TailType.NONE;
+    if (completionChar == '(') {
+      final Object o = item.getObject();
+      if (o instanceof PsiMethod) {
+        final PsiMethod psiMethod = (PsiMethod)o;
+        return psiMethod.getParameterList().getParameters().length > 0 || psiMethod.getReturnType() != PsiType.VOID
+               ? TailType.NONE : TailType.SEMICOLON;
+      } else if (o instanceof PsiClass) { // it may be a constructor
+        return TailType.NONE;
+      }
+    }
+    if (completionChar == Lookup.COMPLETE_STATEMENT_SELECT_CHAR) return TailType.SMART_COMPLETION;
+    if (!context.shouldAddCompletionChar()) {
+      return TailType.NONE;
+    }
+
+    return LookupItem.handleCompletionChar(context.getEditor(), item, completionChar);
+  }
+
+  public static boolean isToInsertParenth(PsiElement place){
+    if (place == null) return true;
+    return !(place.getParent() instanceof PsiImportStaticReferenceElement);
+  }
+
+  //need to shorten references in type argument list
+  public static void shortenReference(final PsiFile file, final int offset) throws IncorrectOperationException {
+    final PsiDocumentManager manager = PsiDocumentManager.getInstance(file.getProject());
+    final Document document = manager.getDocument(file);
+    assert document != null;
+    manager.commitDocument(document);
+    final PsiReference ref = file.findReferenceAt(offset);
+    if (ref instanceof PsiJavaCodeReferenceElement) {
+      JavaCodeStyleManager.getInstance(file.getProject()).shortenClassReferences((PsiJavaCodeReferenceElement)ref);
+    }
+  }
 }
index 1a58f978c4969c7c0683159a64a2cdbc64796a78..aee7bfbbaa17e1bd145643f13ed2fb8543402f5c 100644 (file)
@@ -82,7 +82,13 @@ public class JavaDocCompletionContributor extends CompletionContributor {
           ((PsiJavaReference) ref).processVariants(processor);
 
           for (final CompletionElement _item : processor.getResults()) {
-            LookupItem item = (LookupItem)LookupItemUtil.objectToLookupItem(_item.getElement());
+            final Object element = _item.getElement();
+            LookupItem item = element instanceof PsiMethod ? new JavaMethodCallElement((PsiMethod)element) {
+              @Override
+              public void handleInsert(InsertionContext context) {
+                new MethodSignatureInsertHandler().handleInsert(context, this);
+              }
+            } : (LookupItem)LookupItemUtil.objectToLookupItem(element);
             if (onlyConstants) {
               Object o = item.getObject();
               if (!(o instanceof PsiField)) continue;
@@ -95,7 +101,6 @@ public class JavaDocCompletionContributor extends CompletionContributor {
             if (isArg) {
               item.setAutoCompletionPolicy(AutoCompletionPolicy.NEVER_AUTOCOMPLETE);
             }
-            item.setInsertHandler(new MethodSignatureInsertHandler());
             result.addElement(item);
           }
         }
index ee0672b34bbfc1ce3d09b86aa1a94c6d3b84e465..57340cae05e45cb5823037fde8bdc3a183293b15 100644 (file)
@@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull;
 /**
  * @author peter
  */
-public class JavaGlobalMemberLookupElement extends LookupElement {
+public class JavaGlobalMemberLookupElement extends LookupElement implements StaticallyImportable {
   private final PsiMethod myMethod;
   private final PsiClass myContainingClass;
   private final InsertHandler<JavaGlobalMemberLookupElement> myQualifiedInsertion;
@@ -24,11 +24,12 @@ public class JavaGlobalMemberLookupElement extends LookupElement {
   public JavaGlobalMemberLookupElement(PsiMethod method,
                                        PsiClass containingClass,
                                        InsertHandler<JavaGlobalMemberLookupElement> qualifiedInsertion,
-                                       InsertHandler<JavaGlobalMemberLookupElement> importInsertion) {
+                                       InsertHandler<JavaGlobalMemberLookupElement> importInsertion, boolean shouldImport) {
     myMethod = method;
     myContainingClass = containingClass;
     myQualifiedInsertion = qualifiedInsertion;
     myImportInsertion = importInsertion;
+    myShouldImport = shouldImport;
   }
 
   @NotNull
@@ -76,12 +77,19 @@ public class JavaGlobalMemberLookupElement extends LookupElement {
     }
   }
 
-  public boolean isShouldImport() {
-    return myShouldImport;
+  @Override
+  public void setShouldBeImported(boolean shouldImportStatic) {
+    myShouldImport = shouldImportStatic;
   }
 
-  public void setShouldImport(boolean shouldImport) {
-    myShouldImport = shouldImport;
+  @Override
+  public boolean canBeImported() {
+    return true;
+  }
+
+  @Override
+  public boolean willBeImported() {
+    return myShouldImport;
   }
 
   @Override
index 17cae62e2d8befb7ec9667aa293ea473a4432e3b..c0a2e66f5dab9f2f1bd0e7c2898745f41e64b24c 100644 (file)
@@ -1,43 +1,17 @@
 package com.intellij.codeInsight.completion;
 
-import com.intellij.codeInsight.completion.simple.PsiMethodInsertHandler;
-import com.intellij.codeInsight.daemon.impl.quickfix.StaticImportMethodFix;
-import com.intellij.featureStatistics.FeatureUsageTracker;
+import com.intellij.codeInsight.lookup.LookupElement;
+import com.intellij.codeInsight.lookup.VariableLookupItem;
 import com.intellij.openapi.application.ApplicationManager;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Computable;
 import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.psi.search.PsiShortNamesCache;
 import com.intellij.psi.util.PsiTreeUtil;
+import org.jetbrains.annotations.NotNull;
 
 /**
  * @author peter
  */
 public class JavaGlobalMemberNameCompletionContributor extends CompletionContributor {
 
-  private static final InsertHandler<JavaGlobalMemberLookupElement> STATIC_METHOD_INSERT_HANDLER = new InsertHandler<JavaGlobalMemberLookupElement>() {
-    @Override
-    public void handleInsert(InsertionContext context, JavaGlobalMemberLookupElement item) {
-      PsiMethodInsertHandler.INSTANCE.handleInsert(context, item);
-      final PsiClass containingClass = item.getContainingClass();
-      PsiDocumentManager.getInstance(containingClass.getProject()).commitDocument(context.getDocument());
-      final PsiReferenceExpression ref = PsiTreeUtil
-        .findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiReferenceExpression.class, false);
-      if (ref != null) {
-        ref.bindToElementViaStaticImport(containingClass);
-      }
-    }
-  };
-  private static final InsertHandler<JavaGlobalMemberLookupElement> QUALIFIED_METHOD_INSERT_HANDLER = new InsertHandler<JavaGlobalMemberLookupElement>() {
-    @Override
-    public void handleInsert(InsertionContext context, JavaGlobalMemberLookupElement item) {
-      PsiMethodInsertHandler.INSTANCE.handleInsert(context, item);
-      context.getDocument().insertString(context.getStartOffset(), ".");
-      JavaCompletionUtil.insertClassReference(item.getContainingClass(), context.getFile(), context.getStartOffset());
-    }
-  };
-
   @Override
   public void fillCompletionVariants(CompletionParameters parameters, final CompletionResultSet result) {
     if (parameters.getCompletionType() != CompletionType.CLASS_NAME) {
@@ -60,58 +34,48 @@ public class JavaGlobalMemberNameCompletionContributor extends CompletionContrib
       return;
     }
 
-    processStaticMethods(result, position, QUALIFIED_METHOD_INSERT_HANDLER, STATIC_METHOD_INSERT_HANDLER);
+    completeStaticMembers(position).processStaticMethodsGlobally(result);
   }
 
-  public static void processStaticMethods(final CompletionResultSet result,
-                                          final PsiElement position,
-                                          final InsertHandler<JavaGlobalMemberLookupElement> qualifiedInsert, 
-                                          final InsertHandler<JavaGlobalMemberLookupElement> importInsert) {
-    PrefixMatcher matcher = result.getPrefixMatcher();
-    final Project project = position.getProject();
-    final GlobalSearchScope scope = GlobalSearchScope.allScope(project);
-    final PsiShortNamesCache namesCache = JavaPsiFacade.getInstance(project).getShortNamesCache();
-    final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(project).getResolveHelper();
-    final String[] methodNames = ApplicationManager.getApplication().runReadAction(new Computable<String[]>() {
-      public String[] compute() {
-        return namesCache.getAllMethodNames();
-      }
-    });
-    final boolean[] hintShown = {false};
-    for (final String methodName : methodNames) {
-      if (matcher.prefixMatches(methodName)) {
-        final PsiMethod[] methods = ApplicationManager.getApplication().runReadAction(new Computable<PsiMethod[]>() {
-          public PsiMethod[] compute() {
-            return namesCache.getMethodsByName(methodName, scope);
+  public static StaticMemberProcessor completeStaticMembers(final PsiElement position) {
+    final StaticMemberProcessor processor = new StaticMemberProcessor(position) {
+      @NotNull
+      @Override
+      protected LookupElement createLookupElement(@NotNull PsiMember member, @NotNull final PsiClass containingClass, boolean shouldImport) {
+        if (member instanceof PsiMethod) {
+          final JavaMethodCallElement element = new JavaMethodCallElement((PsiMethod)member, true);
+          element.setShouldBeImported(shouldImport);
+          return element;
+        }
+        return new VariableLookupItem((PsiVariable)member) {
+          @Override
+          public void handleInsert(InsertionContext context) {
+            context.commitDocument();
+            final PsiReferenceExpression ref = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getStartOffset(), PsiReferenceExpression.class, false);
+            if (ref != null) {
+              ref.bindToElementViaStaticImport(containingClass);
+            }
+            super.handleInsert(context);
           }
-        });
-        for (final PsiMethod method : methods) {
-          ApplicationManager.getApplication().runReadAction(new Runnable() {
-            public void run() {
-              if (method.hasModifierProperty(PsiModifier.STATIC) && resolveHelper.isAccessible(method, position, null)) {
-                final PsiClass containingClass = method.getContainingClass();
-                if (containingClass != null) {
-                  if (!JavaCompletionUtil.isInExcludedPackage(containingClass) && !StaticImportMethodFix.isExcluded(method)) {
-                    if (!hintShown[0] &&
-                        FeatureUsageTracker.getInstance().isToBeShown(JavaCompletionFeatures.IMPORT_STATIC, project) &&
-                        CompletionService.getCompletionService().getAdvertisementText() == null) {
-                      final String shortcut = getActionShortcut("EditorRight");
-                      if (shortcut != null) {
-                        CompletionService.getCompletionService().setAdvertisementText("To import the method statically, press " + shortcut);
-                      }
-                      hintShown[0] = true;
-                    }
-
-                    result.addElement(new JavaGlobalMemberLookupElement(method, containingClass, qualifiedInsert, importInsert));
-                  }
+        };
+      }
 
-                }
-              }
+    };
+    ApplicationManager.getApplication().runReadAction(new Runnable() {
+      public void run() {
+        final PsiFile file = position.getContainingFile();
+        if (file instanceof PsiJavaFile) {
+          final PsiImportList importList = ((PsiJavaFile)file).getImportList();
+          if (importList != null) {
+            for (PsiImportStaticStatement statement : importList.getImportStaticStatements()) {
+              processor.importMembersOf(statement.resolveTargetClass());
             }
-          });
-
+          }
         }
       }
-    }
+    });
+
+    return processor;
   }
+
 }
index ad2d0e1e9628a606560bca5830e66e72724eb1ba..fa9b27fb0569c131e2aad2536266e54a028f6bb5 100644 (file)
  */
 package com.intellij.codeInsight.completion;
 
+import com.intellij.codeInsight.ExpectedTypeInfo;
+import com.intellij.codeInsight.ExpectedTypesProvider;
 import com.intellij.codeInsight.TailType;
-import com.intellij.codeInsight.completion.simple.PsiMethodInsertHandler;
-import com.intellij.codeInsight.lookup.LookupItem;
-import com.intellij.codeInsight.lookup.TypedLookupItem;
+import com.intellij.codeInsight.completion.util.MethodParenthesesHandler;
+import com.intellij.codeInsight.lookup.*;
+import com.intellij.codeInsight.lookup.impl.JavaElementLookupRenderer;
+import com.intellij.featureStatistics.FeatureUsageTracker;
+import com.intellij.openapi.editor.Document;
 import com.intellij.openapi.util.Key;
-import com.intellij.psi.PsiMethod;
-import com.intellij.psi.PsiSubstitutor;
-import com.intellij.psi.PsiType;
+import com.intellij.openapi.util.text.StringUtil;
+import com.intellij.psi.*;
+import com.intellij.psi.util.PsiFormatUtil;
+import com.intellij.psi.util.PsiTreeUtil;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
 /**
  * @author peter
  */
-public class JavaMethodCallElement extends LookupItem<PsiMethod> implements TypedLookupItem {
+public class JavaMethodCallElement extends LookupItem<PsiMethod> implements TypedLookupItem, StaticallyImportable {
   private static final Key<PsiSubstitutor> INFERENCE_SUBSTITUTOR = Key.create("INFERENCE_SUBSTITUTOR");
+  private final PsiClass myContainingClass;
+  private final PsiMethod myMethod;
+  private final boolean myCanImportStatic;
+  private boolean myShouldImportStatic;
 
-  public JavaMethodCallElement(PsiMethod method) {
+  public JavaMethodCallElement(@NotNull PsiMethod method) {
+    this(method, false);
+  }
+
+  public JavaMethodCallElement(PsiMethod method, boolean canImportStatic) {
     super(method, method.getName());
+    myMethod = method;
+    myContainingClass = method.getContainingClass();
+    myCanImportStatic = canImportStatic;
     PsiType type = method.getReturnType();
     setTailType(PsiType.VOID.equals(type) ? TailType.SEMICOLON : TailType.NONE);
-    setInsertHandler(PsiMethodInsertHandler.INSTANCE);
   }
 
   public PsiType getType() {
     return getSubstitutor().substitute(getInferenceSubstitutor().substitute(getObject().getReturnType()));
-
   }
 
   public void setInferenceSubstitutor(@NotNull final PsiSubstitutor substitutor) {
@@ -49,17 +64,186 @@ public class JavaMethodCallElement extends LookupItem<PsiMethod> implements Type
 
   @NotNull
   public PsiSubstitutor getSubstitutor() {
-    final PsiSubstitutor substitutor = (PsiSubstitutor)getAttribute(LookupItem.SUBSTITUTOR);
+    final PsiSubstitutor substitutor = (PsiSubstitutor)getAttribute(SUBSTITUTOR);
     return substitutor == null ? PsiSubstitutor.EMPTY : substitutor;
   }
 
-  public void setSubstitutor(@NotNull PsiSubstitutor substitutor) {
-    setAttribute(SUBSTITUTOR, substitutor);
-  }
-
   @NotNull
   public PsiSubstitutor getInferenceSubstitutor() {
     final PsiSubstitutor substitutor = getAttribute(INFERENCE_SUBSTITUTOR);
     return substitutor == null ? PsiSubstitutor.EMPTY : substitutor;
   }
+
+  @Override
+  public void setShouldBeImported(boolean shouldImportStatic) {
+    assert myCanImportStatic;
+    myShouldImportStatic = shouldImportStatic;
+  }
+
+  @Override
+  public boolean canBeImported() {
+    return myCanImportStatic;
+  }
+
+  @Override
+  public boolean willBeImported() {
+    return myShouldImportStatic;
+  }
+
+  @Override
+  public void handleInsert(InsertionContext context) {
+    final Document document = context.getDocument();
+    final PsiFile file = context.getFile();
+    final PsiMethod method = getObject();
+
+    final LookupElement[] allItems = context.getElements();
+    final boolean overloadsMatter = allItems.length == 1 && getUserData(FORCE_SHOW_SIGNATURE_ATTR) == null;
+    final boolean hasParams = MethodParenthesesHandler.hasParams(this, allItems, overloadsMatter, method);
+    JavaCompletionUtil.insertParentheses(context, this, overloadsMatter, hasParams);
+
+    final int startOffset = context.getStartOffset();
+    final OffsetKey refStart = context.trackOffset(startOffset, true);
+    if (shouldInsertTypeParameters(context)) {
+      qualifyMethodCall(file, startOffset, document);
+      insertExplicitTypeParameters(context, refStart);
+    }
+    else if (myCanImportStatic || getAttribute(FORCE_QUALIFY) != null) {
+      context.commitDocument();
+      if (myCanImportStatic && myShouldImportStatic) {
+        final PsiReferenceExpression ref = PsiTreeUtil.findElementOfClassAtOffset(file, startOffset, PsiReferenceExpression.class, false);
+        if (ref != null) {
+          ref.bindToElementViaStaticImport(myContainingClass);
+        }
+        return;
+      }
+
+      qualifyMethodCall(file, startOffset, document);
+    }
+
+    final PsiType type = method.getReturnType();
+    if (context.getCompletionChar() == '!' && type != null && PsiType.BOOLEAN.isAssignableFrom(type)) {
+      context.commitDocument();
+      final int offset = context.getOffset(refStart);
+      final PsiMethodCallExpression methodCall = PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiMethodCallExpression.class, false);
+      if (methodCall != null) {
+        FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH);
+        document.insertString(methodCall.getTextRange().getStartOffset(), "!");
+      }
+    }
+
+  }
+
+  private boolean shouldInsertTypeParameters(InsertionContext context) {
+    final PsiElement leaf = context.getFile().findElementAt(context.getStartOffset());
+    if (PsiTreeUtil.getParentOfType(leaf, PsiExpressionList.class, true, PsiCodeBlock.class, PsiModifierListOwner.class) == null) {
+      if (PsiTreeUtil.getParentOfType(leaf, PsiConditionalExpression.class, true, PsiCodeBlock.class, PsiModifierListOwner.class) == null) {
+        return false;
+      }
+    }
+
+    return SmartCompletionDecorator.hasUnboundTypeParams(getObject());
+  }
+
+  private boolean insertExplicitTypeParameters(InsertionContext context, OffsetKey refStart) {
+    context.commitDocument();
+
+    PsiExpression expression = PsiTreeUtil.findElementOfClassAtOffset(context.getFile(), context.getOffset(refStart), PsiExpression.class, false);
+    if (expression == null) return true;
+
+    final ExpectedTypeInfo[] expectedTypes = ExpectedTypesProvider.getExpectedTypes(expression, true);
+    if (expectedTypes == null) return true;
+
+    for (final ExpectedTypeInfo type : expectedTypes) {
+      if (type.isInsertExplicitTypeParams()) {
+        final String typeParams = getTypeParamsText(type.getType());
+        if (typeParams == null) {
+          return true;
+        }
+
+        context.getDocument().insertString(context.getOffset(refStart), typeParams);
+
+        JavaCompletionUtil.shortenReference(context.getFile(), context.getOffset(refStart));
+
+        break;
+      }
+    }
+
+    return true;
+  }
+
+  private void qualifyMethodCall(PsiFile file, final int startOffset, final Document document) {
+    final PsiReference reference = file.findReferenceAt(startOffset);
+    if (reference instanceof PsiReferenceExpression && ((PsiReferenceExpression)reference).isQualified()) {
+      return;
+    }
+
+    final PsiMethod method = getObject();
+    if (!method.hasModifierProperty(PsiModifier.STATIC)) {
+      document.insertString(startOffset, "this.");
+      return;
+    }
+
+    document.insertString(startOffset, ".");
+    JavaCompletionUtil.insertClassReference(myContainingClass, file, startOffset);
+  }
+
+  @Nullable
+  private String getTypeParamsText(PsiType expectedType) {
+    final PsiMethod method = getObject();
+    final PsiSubstitutor substitutor = SmartCompletionDecorator.calculateMethodReturnTypeSubstitutor(method, expectedType);
+    assert substitutor != null;
+    final PsiTypeParameter[] parameters = method.getTypeParameters();
+    assert parameters.length > 0;
+    final StringBuilder builder = new StringBuilder("<");
+    boolean first = true;
+    for (final PsiTypeParameter parameter : parameters) {
+      if (!first) builder.append(", ");
+      first = false;
+      PsiType type = substitutor.substitute(parameter);
+      if (type instanceof PsiWildcardType) {
+        type = ((PsiWildcardType)type).getExtendsBound();
+      }
+
+      if (type == null || type instanceof PsiCapturedWildcardType) return null;
+
+      final String text = type.getCanonicalText();
+      if (text.indexOf('?') >= 0) return null;
+
+      builder.append(text);
+    }
+    return builder.append(">").toString();
+  }
+
+  @Override
+  public void renderElement(LookupElementPresentation presentation) {
+    final String className = myContainingClass.getName();
+
+    presentation.setIcon(DefaultLookupItemRenderer.getRawIcon(this, presentation.isReal()));
+
+    final String methodName = myMethod.getName();
+    final boolean qualify = myCanImportStatic && !myShouldImportStatic || getAttribute(FORCE_QUALIFY) != null;
+    if (qualify && StringUtil.isNotEmpty(className)) {
+      presentation.setItemText(className + "." + methodName);
+    } else {
+      presentation.setItemText(methodName);
+    }
+
+    presentation.setStrikeout(JavaElementLookupRenderer.isToStrikeout(this));
+    presentation.setItemTextBold(getAttribute(HIGHLIGHTED_ATTR) != null);
+
+
+    final String params = PsiFormatUtil.formatMethod(myMethod, PsiSubstitutor.EMPTY,
+                                                     PsiFormatUtil.SHOW_PARAMETERS,
+                                                     PsiFormatUtil.SHOW_NAME | PsiFormatUtil.SHOW_TYPE);
+    if (myShouldImportStatic && StringUtil.isNotEmpty(className)) {
+      presentation.setTailText(params + " in " + className);
+    } else {
+      presentation.setTailText(params);
+    }
+
+    final PsiType type = myMethod.getReturnType();
+    if (type != null) {
+      presentation.setTypeText(getSubstitutor().substitute(type).getPresentableText());
+    }
+  }
 }
index 7c6c2a18bc0cd61db48a59821ba11e2688d433e4..f2b56f94f0f0bff44bf7420724b6d747c032d6ba 100644 (file)
@@ -125,7 +125,7 @@ public class SmartCompletionDecorator extends TailTypeDecorator<LookupElement> {
     PsiReference ref = position.getContainingFile().findReferenceAt(startOffset);
 
     if (ref!=null && completion instanceof PsiNamedElement) {
-      if (completion instanceof PsiMethod || completion instanceof PsiField) {
+      if (completion instanceof PsiField) {
         final PsiMember member = (PsiMember)completion;
         if (item.getAttribute(LookupItem.FORCE_QUALIFY) != null
             && member.hasModifierProperty(PsiModifier.STATIC)
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java b/java/java-impl/src/com/intellij/codeInsight/completion/StaticMemberProcessor.java
new file mode 100644 (file)
index 0000000..baeb6a2
--- /dev/null
@@ -0,0 +1,137 @@
+package com.intellij.codeInsight.completion;
+
+import com.intellij.codeInsight.daemon.impl.quickfix.StaticImportMethodFix;
+import com.intellij.codeInsight.lookup.LookupElement;
+import com.intellij.featureStatistics.FeatureUsageTracker;
+import com.intellij.openapi.application.ApplicationManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Computable;
+import com.intellij.psi.*;
+import com.intellij.psi.search.GlobalSearchScope;
+import com.intellij.psi.search.PsiShortNamesCache;
+import com.intellij.util.Consumer;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Set;
+
+import static com.intellij.util.containers.CollectionFactory.hashSet;
+import static com.intellij.util.containers.ContainerUtil.addIfNotNull;
+
+/**
+* @author peter
+*/
+public abstract class StaticMemberProcessor {
+  private final Set<PsiClass> myStaticImportedClasses = hashSet();
+  private final PsiElement myPosition;
+  private final Project myProject;
+  private final PsiResolveHelper myResolveHelper;
+  private boolean myHintShown = false;
+
+  public StaticMemberProcessor(final PsiElement position) {
+    myPosition = position;
+    myProject = myPosition.getProject();
+    myResolveHelper = JavaPsiFacade.getInstance(myProject).getResolveHelper();
+  }
+
+  public void importMembersOf(@Nullable PsiClass psiClass) {
+    addIfNotNull(myStaticImportedClasses, psiClass);
+  }
+
+  public void processStaticMethodsGlobally(final CompletionResultSet resultSet) {
+    final Consumer<LookupElement> consumer = new Consumer<LookupElement>() {
+      @Override
+      public void consume(LookupElement element) {
+        resultSet.addElement(element);
+      }
+    };
+
+    final PrefixMatcher matcher = resultSet.getPrefixMatcher();
+    final GlobalSearchScope scope = GlobalSearchScope.allScope(myProject);
+    final PsiShortNamesCache namesCache = JavaPsiFacade.getInstance(myProject).getShortNamesCache();
+    final String[] methodNames = ApplicationManager.getApplication().runReadAction(new Computable<String[]>() {
+      public String[] compute() {
+        return namesCache.getAllMethodNames();
+      }
+    });
+    for (final String methodName : methodNames) {
+      if (matcher.prefixMatches(methodName)) {
+        final PsiMethod[] methods = ApplicationManager.getApplication().runReadAction(new Computable<PsiMethod[]>() {
+          public PsiMethod[] compute() {
+            return namesCache.getMethodsByName(methodName, scope);
+          }
+        });
+        for (final PsiMethod method : methods) {
+          ApplicationManager.getApplication().runReadAction(new Runnable() {
+            public void run() {
+              processMember(method, consumer);
+            }
+          });
+
+        }
+      }
+    }
+  }
+
+  public void processMembersOfRegisteredClasses(@Nullable final PrefixMatcher matcher, final Consumer<LookupElement> consumer) {
+    for (final PsiClass psiClass : myStaticImportedClasses) {
+      final PsiMethod[] classMethods = ApplicationManager.getApplication().runReadAction(new Computable<PsiMethod[]>() {
+        public PsiMethod[] compute() {
+          return psiClass.getAllMethods();
+        }
+      });
+      for (final PsiMethod method : classMethods) {
+        ApplicationManager.getApplication().runReadAction(new Runnable() {
+          public void run() {
+            if (matcher == null || matcher.prefixMatches(method.getName())) {
+              processMember(method, consumer);
+            }
+          }
+        });
+      }
+      final PsiField[] fields = ApplicationManager.getApplication().runReadAction(new Computable<PsiField[]>() {
+        public PsiField[] compute() {
+          return psiClass.getAllFields();
+        }
+      });
+      for (final PsiField field : fields) {
+        ApplicationManager.getApplication().runReadAction(new Runnable() {
+          public void run() {
+            if (matcher == null || matcher.prefixMatches(field.getName())) {
+              processMember(field, consumer);
+            }
+          }
+        });
+      }
+    }
+  }
+
+
+  private void processMember(final PsiMember member, final Consumer<LookupElement> consumer) {
+    if (member.hasModifierProperty(PsiModifier.STATIC) && myResolveHelper.isAccessible(member, myPosition, null)) {
+      final PsiClass containingClass = member.getContainingClass();
+      if (containingClass != null) {
+        if (!JavaCompletionUtil.isInExcludedPackage(containingClass) &&
+            (!(member instanceof PsiMethod) || !StaticImportMethodFix.isExcluded((PsiMethod)member))) {
+          final boolean shouldImport = myStaticImportedClasses.contains(containingClass);
+          if (!myHintShown &&
+              !shouldImport &&
+              FeatureUsageTracker.getInstance().isToBeShown(JavaCompletionFeatures.IMPORT_STATIC, myProject) &&
+              CompletionService.getCompletionService().getAdvertisementText() == null) {
+            final String shortcut = CompletionContributor.getActionShortcut("EditorRight");
+            if (shortcut != null) {
+              CompletionService.getCompletionService().setAdvertisementText("To import a method statically, press " + shortcut);
+            }
+            myHintShown = true;
+          }
+
+          consumer.consume(createLookupElement(member, containingClass, shouldImport));
+        }
+
+      }
+    }
+  }
+
+  @NotNull
+  protected abstract LookupElement createLookupElement(@NotNull PsiMember member, @NotNull PsiClass containingClass, boolean shouldImport);
+}
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/StaticallyImportable.java b/java/java-impl/src/com/intellij/codeInsight/completion/StaticallyImportable.java
new file mode 100644 (file)
index 0000000..801edc4
--- /dev/null
@@ -0,0 +1,12 @@
+package com.intellij.codeInsight.completion;
+
+/**
+ * @author peter
+ */
+public interface StaticallyImportable {
+  void setShouldBeImported(boolean shouldImportStatic);
+
+  boolean canBeImported();
+
+  boolean willBeImported();
+}
index 0e3b0e1941ee75479d56d0007532a7e4182ca82f..c90b2197703a7565eb587d607675b65d3a2a2858 100644 (file)
@@ -44,6 +44,7 @@ import java.util.Set;
  */
 public class JavaCompletionProcessor extends BaseScopeProcessor implements ElementClassHint {
   public static final Key<Condition<String>> NAME_FILTER = Key.create("NAME_FILTER");
+  public static final Key<Boolean> JAVA_COMPLETION = Key.create("JAVA_COMPLETION");
 
   private boolean myStatic = false;
   private final Set<Object> myResultNames = new THashSet<Object>();
@@ -207,6 +208,9 @@ public class JavaCompletionProcessor extends BaseScopeProcessor implements Eleme
     if (hintKey == NAME_FILTER) {
       return (T)myMatcher;
     }
+    if (hintKey == JAVA_COMPLETION) {
+      return (T)Boolean.TRUE;
+    }
 
     return super.getHint(hintKey);
   }
diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/simple/PsiMethodInsertHandler.java b/java/java-impl/src/com/intellij/codeInsight/completion/simple/PsiMethodInsertHandler.java
deleted file mode 100644 (file)
index fb6cad1..0000000
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright 2000-2009 JetBrains s.r.o.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.intellij.codeInsight.completion.simple;
-
-import com.intellij.codeInsight.*;
-import com.intellij.codeInsight.completion.*;
-import com.intellij.codeInsight.completion.util.MethodParenthesesHandler;
-import com.intellij.codeInsight.completion.util.ParenthesesInsertHandler;
-import com.intellij.codeInsight.lookup.Lookup;
-import com.intellij.codeInsight.lookup.LookupElement;
-import com.intellij.codeInsight.lookup.LookupItem;
-import com.intellij.featureStatistics.FeatureUsageTracker;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleSettings;
-import com.intellij.psi.codeStyle.CodeStyleSettingsManager;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.util.PsiTreeUtil;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @author peter
-*/
-public class PsiMethodInsertHandler implements InsertHandler<LookupElement> {
-  private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.completion.simple.PsiMethodInsertHandler");
-  public static final PsiMethodInsertHandler INSTANCE = new PsiMethodInsertHandler();
-
-  public static void insertParentheses(final InsertionContext context, final LookupElement item, boolean overloadsMatter, boolean hasParams) {
-    final Editor editor = context.getEditor();
-    final TailType tailType = getTailType(item, context);
-    final PsiFile file = context.getFile();
-
-    context.setAddCompletionChar(false);
-
-
-    final boolean needLeftParenth = isToInsertParenth(file.findElementAt(context.getStartOffset()));
-    final boolean needRightParenth = shouldInsertRParenth(context.getCompletionChar(), tailType, hasParams);
-
-    if (needLeftParenth) {
-      final CodeStyleSettings styleSettings = CodeStyleSettingsManager.getSettings(context.getProject());
-      ParenthesesInsertHandler.getInstance(hasParams,
-                                           styleSettings.SPACE_BEFORE_METHOD_CALL_PARENTHESES,
-                                           styleSettings.SPACE_WITHIN_METHOD_CALL_PARENTHESES && hasParams,
-                                           needRightParenth,
-                                           styleSettings.METHOD_PARAMETERS_LPAREN_ON_NEXT_LINE
-      ).handleInsert(context, item);
-    }
-
-    if (needLeftParenth && hasParams) {
-      // Invoke parameters popup
-      AutoPopupController.getInstance(file.getProject()).autoPopupParameterInfo(editor, overloadsMatter ? null : (PsiElement)item.getObject());
-    }
-    if (tailType == TailType.SMART_COMPLETION || needLeftParenth && needRightParenth) {
-      tailType.processTail(editor, context.getTailOffset());
-    }
-  }
-
-  public void handleInsert(final InsertionContext context, final LookupElement item) {
-    final Editor editor = context.getEditor();
-    final Document document = editor.getDocument();
-    final PsiFile file = context.getFile();
-    final int offset = editor.getCaretModel().getOffset();
-    final PsiMethod method = (PsiMethod)item.getObject();
-
-    final LookupElement[] allItems = context.getElements();
-    final boolean overloadsMatter = allItems.length == 1 && item.getUserData(LookupItem.FORCE_SHOW_SIGNATURE_ATTR) == null;
-
-    final boolean hasParams = MethodParenthesesHandler.hasParams(item, allItems, overloadsMatter, method);
-
-    insertParentheses(context, item, overloadsMatter, hasParams);
-
-    insertExplicitTypeParams(item, document, offset, file);
-
-    final PsiType type = method.getReturnType();
-    if (context.getCompletionChar() == '!' && type != null && PsiType.BOOLEAN.isAssignableFrom(type)) {
-      PsiDocumentManager.getInstance(method.getProject()).commitDocument(document);
-      final PsiMethodCallExpression methodCall = PsiTreeUtil.findElementOfClassAtOffset(file, offset, PsiMethodCallExpression.class, false);
-      if (methodCall != null) {
-        FeatureUsageTracker.getInstance().triggerFeatureUsed(CodeCompletionFeatures.EXCLAMATION_FINISH);
-        document.insertString(methodCall.getTextRange().getStartOffset(), "!");
-      }
-    }
-
-  }
-
-  private static boolean shouldInsertRParenth(char completionChar, TailType tailType, boolean hasParams) {
-    if (tailType == TailType.SMART_COMPLETION) {
-      return false;
-    }
-
-    if (completionChar == '(' && !hasParams) {
-      //it's highly probable that the user will type ')' next and it may not be overwritten if the flag is off
-      return CodeInsightSettings.getInstance().AUTOINSERT_PAIR_BRACKET;
-    }
-
-    return true;
-  }
-
-  @NotNull
-  private static TailType getTailType(final LookupElement item, InsertionContext context) {
-    final char completionChar = context.getCompletionChar();
-    if (completionChar == '!') return item instanceof LookupItem ? ((LookupItem)item).getTailType() : TailType.NONE;
-    if (completionChar == '(') {
-      final Object o = item.getObject();
-      if (o instanceof PsiMethod) {
-        final PsiMethod psiMethod = (PsiMethod)o;
-        return psiMethod.getParameterList().getParameters().length > 0 || psiMethod.getReturnType() != PsiType.VOID
-               ? TailType.NONE : TailType.SEMICOLON;
-      } else if (o instanceof PsiClass) { // it may be a constructor
-        return TailType.NONE;
-      }
-    }
-    if (completionChar == Lookup.COMPLETE_STATEMENT_SELECT_CHAR) return TailType.SMART_COMPLETION;
-    if (!context.shouldAddCompletionChar()) {
-      return TailType.NONE;
-    }
-
-    return LookupItem.handleCompletionChar(context.getEditor(), item, completionChar);
-  }
-
-  public static boolean isToInsertParenth(PsiElement place){
-    if (place == null) return true;
-    return !(place.getParent() instanceof PsiImportStaticReferenceElement);
-  }
-
-  private static void insertExplicitTypeParams(final LookupElement item, final Document document, final int offset, PsiFile file) {
-    final PsiMethod method = (PsiMethod)item.getObject();
-    if (!SmartCompletionDecorator.hasUnboundTypeParams(method)) {
-      return;
-    }
-
-    PsiDocumentManager.getInstance(file.getProject()).commitAllDocuments();
-
-    PsiExpression expression = PsiTreeUtil.findElementOfClassAtOffset(file, offset - 1, PsiExpression.class, false);
-    if (expression == null) return;
-
-    final Project project = file.getProject();
-    final ExpectedTypeInfo[] expectedTypes = ExpectedTypesProvider.getExpectedTypes(expression, true);
-    if (expectedTypes == null) return;
-
-    for (final ExpectedTypeInfo type : expectedTypes) {
-      if (type.isInsertExplicitTypeParams()) {
-        final OffsetMap map = new OffsetMap(document);
-        final OffsetKey refOffsetKey = OffsetKey.create("refOffset");
-        map.addOffset(refOffsetKey, offset - 1);
-
-        final String typeParams = getTypeParamsText(method, type.getType());
-        if (typeParams == null) {
-          return;
-        }
-        final String qualifierText = getQualifierText(file, method, offset - 1);
-
-        document.insertString(offset - method.getName().length(), qualifierText + typeParams);
-        PsiDocumentManager.getInstance(project).commitDocument(document);
-
-        final PsiReference reference = file.findReferenceAt(map.getOffset(refOffsetKey));
-        if (reference instanceof PsiJavaCodeReferenceElement) {
-          try {
-            CodeInsightUtilBase.forcePsiPostprocessAndRestoreElement(
-              JavaCodeStyleManager.getInstance(project).shortenClassReferences((PsiElement)reference));
-          }
-          catch (IncorrectOperationException e) {
-            LOG.error(e);
-          }
-        }
-        return;
-      }
-    }
-    
-
-  }
-
-  private static String getQualifierText(PsiFile file, PsiMethod method, final int refOffset) {
-    final PsiReference reference = file.findReferenceAt(refOffset);
-    if (reference instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)reference).isQualified()) {
-      return "";
-    }
-
-    final PsiClass containingClass = method.getContainingClass();
-    if (containingClass == null) {
-      return "";
-    }
-
-    if (method.hasModifierProperty(PsiModifier.STATIC)) {
-      return containingClass.getQualifiedName() + ".";
-    }
-
-    if (containingClass.getManager().areElementsEquivalent(containingClass, PsiTreeUtil.findElementOfClassAtOffset(file, refOffset, PsiClass.class, false))) {
-      return "this.";
-    }
-
-    return containingClass.getQualifiedName() + ".this.";
-  }
-
-  @Nullable
-  private static String getTypeParamsText(final PsiMethod method, PsiType expectedType) {
-    final PsiSubstitutor substitutor = SmartCompletionDecorator.calculateMethodReturnTypeSubstitutor(method, expectedType);
-    assert substitutor != null;
-    final PsiTypeParameter[] parameters = method.getTypeParameters();
-    assert parameters.length > 0;
-    final StringBuilder builder = new StringBuilder("<");
-    boolean first = true;
-    for (final PsiTypeParameter parameter : parameters) {
-      if (!first) builder.append(", ");
-      first = false;
-      final PsiType type = substitutor.substitute(parameter);
-      if (type == null || type instanceof PsiWildcardType || type instanceof PsiCapturedWildcardType) return null;
-
-      final String text = type.getCanonicalText();
-      if (text.indexOf('?') >= 0) return null;
-
-      builder.append(text);
-    }
-    return builder.append(">").toString();
-  }
-}
index afee224443e9d9871ce49295d391ee62b4b355f2..c50a9b5f9a7b6e38eef55e56c310517f27ef0ae6 100644 (file)
@@ -17,7 +17,6 @@
 package com.intellij.codeInsight.daemon.impl.actions;
 
 import com.intellij.application.options.editor.AutoImportOptionsConfigurable;
-import com.intellij.application.options.editor.EditorOptionsProvider;
 import com.intellij.application.options.editor.JavaAutoImportOptions;
 import com.intellij.codeInsight.CodeInsightSettings;
 import com.intellij.codeInsight.CodeInsightUtilBase;
@@ -34,7 +33,6 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.ui.popup.JBPopupFactory;
 import com.intellij.openapi.ui.popup.PopupStep;
 import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
-import com.intellij.openapi.wm.IdeFocusManager;
 import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiDocumentManager;
 import com.intellij.psi.PsiFile;
@@ -157,7 +155,7 @@ public class AddImportAction implements QuestionAction {
       public void run() {
         if (project.isDisposed()) return;
 
-        final AutoImportOptionsConfigurable configurable = EditorOptionsProvider.EP_NAME.findExtension(AutoImportOptionsConfigurable.class);
+        final AutoImportOptionsConfigurable configurable = new AutoImportOptionsConfigurable();
         ShowSettingsUtil.getInstance().editConfigurable(project, configurable, new Runnable() {
           public void run() {                 
             final JavaAutoImportOptions options = ContainerUtil.findInstance(configurable.getConfigurables(), JavaAutoImportOptions.class);
index f11ff20b9bd900032b837259b3dc0fcd5df17e92..4efd07e3333d8c7e2f74ac60f3832b8ce06184aa 100644 (file)
@@ -56,6 +56,7 @@ public class CreateFieldFromParameterAction implements IntentionAction {
     if (parameter == null) return null;
     PsiType type = parameter.getType();
     if (type instanceof PsiEllipsisType) type = ((PsiEllipsisType)type).toArrayType();
+    if (type instanceof PsiArrayType) return new PsiType[]{type};
     final PsiClassType.ClassResolveResult result = PsiUtil.resolveGenericsClassInType(type);
     final PsiClass psiClass = result.getElement();
     if (psiClass == null) return new PsiType[] {type};
index 048986abc4b0c345461b65435ecceab3111e7d77..38a6a844c22c1a51cefe6da64f9d99edda77edc1 100644 (file)
@@ -218,7 +218,7 @@ public class JavaElementLookupRenderer implements ElementLookupRenderer {
     return CodeStyleSettingsManager.getSettings(element.getProject()).SPACE_AFTER_COMMA;
   }
 
-  private static boolean isToStrikeout(LookupItem<?> item) {
+  public static boolean isToStrikeout(LookupItem<?> item) {
     final List<PsiMethod> allMethods = item.getUserData(JavaCompletionUtil.ALL_METHODS_ATTRIBUTE);
     if (allMethods != null){
       for (PsiMethod method : allMethods) {
index 0bd4cf719fd76b33920a16a27124dd3b72cb7a90..f8451c92835be8bf36e0a4413078fd9e6b8ea5b0 100644 (file)
@@ -116,7 +116,7 @@ public class DeclarationParser {
       }
     }
 
-    declaration.done(JavaElementType.CLASS);
+    done(declaration, JavaElementType.CLASS);
     return declaration;
   }
 
@@ -162,10 +162,10 @@ public class DeclarationParser {
       if (builder.getTokenType() == JavaTokenType.LBRACE) {
         final PsiBuilder.Marker constantInit = builder.mark();
         parseClassBodyWithBraces(builder, false, false);
-        constantInit.done(JavaElementType.ENUM_CONSTANT_INITIALIZER);
+        done(constantInit, JavaElementType.ENUM_CONSTANT_INITIALIZER);
       }
 
-      constant.done(JavaElementType.ENUM_CONSTANT);
+      done(constant, JavaElementType.ENUM_CONSTANT);
       return constant;
     }
     else {
@@ -205,7 +205,7 @@ public class DeclarationParser {
       }
 
       // adding a reference, not simple tokens allows "Browse ..." to work well
-      final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, true, true, false);
+      final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, true, true, false, false);
       if (ref == null) {
         builder.advanceLexer();
       }
@@ -309,7 +309,7 @@ public class DeclarationParser {
         final PsiBuilder.Marker error = typeParams.precede();
         error.errorBefore(JavaErrorMessages.message("unexpected.token"), codeBlock);
       }
-      declaration.done(JavaElementType.CLASS_INITIALIZER);
+      done(declaration, JavaElementType.CLASS_INITIALIZER);
       return declaration;
     }
     else {
@@ -391,7 +391,7 @@ public class DeclarationParser {
       }
     }
 
-    modList.done(JavaElementType.MODIFIER_LIST);
+    done(modList, JavaElementType.MODIFIER_LIST);
     return Pair.create(modList, isEmpty);
   }
 
@@ -405,7 +405,7 @@ public class DeclarationParser {
       final PsiBuilder.Marker receiver = builder.mark();
       final PsiBuilder.Marker annotations = parseAnnotations(builder);
       if (annotations != null) {
-        receiver.done(JavaElementType.METHOD_RECEIVER);
+        done(receiver, JavaElementType.METHOD_RECEIVER);
       }
       else {
         receiver.drop();
@@ -441,7 +441,7 @@ public class DeclarationParser {
       }
     }
 
-    declaration.done(anno ? JavaElementType.ANNOTATION_METHOD : JavaElementType.METHOD);
+    done(declaration, anno ? JavaElementType.ANNOTATION_METHOD : JavaElementType.METHOD);
     return declaration;
   }
 
@@ -518,7 +518,7 @@ public class DeclarationParser {
       }
 
       // adding a reference, not simple tokens allows "Browse .." to work well
-      final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, true, true, false);
+      final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, true, true, false, false);
       if (ref == null && builder.getTokenType() != null) {
         builder.advanceLexer();
       }
@@ -528,7 +528,7 @@ public class DeclarationParser {
       invalidElements.error(errorMessage);
     }
 
-    paramList.done(JavaElementType.PARAMETER_LIST);
+    done(paramList, JavaElementType.PARAMETER_LIST);
     return paramList;
   }
 
@@ -538,7 +538,7 @@ public class DeclarationParser {
 
     final Pair<PsiBuilder.Marker, Boolean> modListInfo = parseModifierList(builder);
     final PsiBuilder.Marker type = ellipsis ? ReferenceParser.parseTypeWithEllipsis(builder, true, true) :
-                                              ReferenceParser.parseType(builder, true, true);
+                                              ReferenceParser.parseType(builder, true, true, false);
 
     if (type == null && modListInfo.second) {
       param.rollbackTo();
@@ -552,7 +552,7 @@ public class DeclarationParser {
 
     if (expect(builder, JavaTokenType.IDENTIFIER)) {
       eatBrackets(builder);
-      param.done(JavaElementType.PARAMETER);
+      done(param, JavaElementType.PARAMETER);
       return param;
     }
     else {
@@ -603,7 +603,7 @@ public class DeclarationParser {
       }
 
       if (builder.getTokenType() != JavaTokenType.COMMA) break;
-      variable.done(varType);
+      done(variable, varType);
       builder.advanceLexer();
 
       if (builder.getTokenType() != JavaTokenType.IDENTIFIER) {
@@ -642,7 +642,7 @@ public class DeclarationParser {
     }
 
     if (openMarker) {
-      variable.done(varType);
+      done(variable, varType);
     }
 
     return declaration;
@@ -676,14 +676,14 @@ public class DeclarationParser {
     final PsiBuilder.Marker anno = builder.mark();
     builder.advanceLexer();
 
-    final PsiBuilder.Marker classRef = ReferenceParser.parseJavaCodeReference(builder, true, false, false);
+    final PsiBuilder.Marker classRef = ReferenceParser.parseJavaCodeReference(builder, true, false, false, false);
     if (classRef == null) {
       error(builder, JavaErrorMessages.message("expected.class.reference"));
     }
 
     parseAnnotationParameterList(builder);
 
-    anno.done(JavaElementType.ANNOTATION);
+    done(anno, JavaElementType.ANNOTATION);
     return anno;
   }
 
@@ -692,12 +692,12 @@ public class DeclarationParser {
     PsiBuilder.Marker list = builder.mark();
 
     if (!expect(builder, JavaTokenType.LPARENTH)) {
-      list.done(JavaElementType.ANNOTATION_PARAMETER_LIST);
+      done(list, JavaElementType.ANNOTATION_PARAMETER_LIST);
       return list;
     }
 
     if (expect(builder, JavaTokenType.RPARENTH)) {
-      list.done(JavaElementType.ANNOTATION_PARAMETER_LIST);
+      done(list, JavaElementType.ANNOTATION_PARAMETER_LIST);
       return list;
     }
 
@@ -739,7 +739,7 @@ public class DeclarationParser {
       }
     }
 
-    list.done(JavaElementType.ANNOTATION_PARAMETER_LIST);
+    done(list, JavaElementType.ANNOTATION_PARAMETER_LIST);
     return list;
   }
 
@@ -749,7 +749,7 @@ public class DeclarationParser {
     if (mayBeSimple) {
       parseAnnotationValue(builder);
       if (builder.getTokenType() != JavaTokenType.EQ) {
-        pair.done(JavaElementType.NAME_VALUE_PAIR);
+        done(pair, JavaElementType.NAME_VALUE_PAIR);
         return false;
       }
 
@@ -763,7 +763,7 @@ public class DeclarationParser {
 
     parseAnnotationValue(builder);
 
-    pair.done(JavaElementType.NAME_VALUE_PAIR);
+    done(pair, JavaElementType.NAME_VALUE_PAIR);
 
     return hasName;
   }
@@ -798,7 +798,7 @@ public class DeclarationParser {
     builder.advanceLexer();
 
     if (expect(builder, JavaTokenType.RBRACE)) {
-      annoArray.done(JavaElementType.ANNOTATION_ARRAY_INITIALIZER);
+      done(annoArray, JavaElementType.ANNOTATION_ARRAY_INITIALIZER);
       return annoArray;
     }
 
@@ -819,7 +819,7 @@ public class DeclarationParser {
       }
     }
 
-    annoArray.done(JavaElementType.ANNOTATION_ARRAY_INITIALIZER);
+    done(annoArray, JavaElementType.ANNOTATION_ARRAY_INITIALIZER);
     if (unclosed) {
       annoArray.setCustomEdgeProcessors(null, GREEDY_RIGHT_EDGE_PROCESSOR);
     }
index 33464f6664c9741b456d186352f530693481166d..ab0a85586bb1f5176322b635f203903d19527c2d 100644 (file)
@@ -356,7 +356,7 @@ public class ExpressionParser {
           final PsiBuilder.Marker copy = startMarker.precede();
           startMarker.rollbackTo();
 
-          final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, false, true, false);
+          final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, false, true, false, false);
           if (ref == null || builder.getTokenType() != JavaTokenType.DOT) {
             copy.rollbackTo();
             return parsePrimary(builder, BreakPoint.P2);
@@ -383,7 +383,7 @@ public class ExpressionParser {
         else {
           dotPos.drop();
           final PsiBuilder.Marker refExpr = expr.precede();
-          ReferenceParser.parseReferenceParameterList(builder, false);
+          ReferenceParser.parseReferenceParameterList(builder, false, false);
 
           if (!JavaParserUtil.expectOrError(builder, JavaTokenType.IDENTIFIER, JavaErrorMessages.message("expected.identifier"))) {
             refExpr.done(JavaElementType.REFERENCE_EXPRESSION);
@@ -637,14 +637,15 @@ public class ExpressionParser {
     final PsiBuilder.Marker newExpr = (start != null ? start.precede() : builder.mark());
     builder.advanceLexer();
 
-    ReferenceParser.parseReferenceParameterList(builder, false);
+    final boolean parseDiamonds = areDiamondsSupported(builder);
+    ReferenceParser.parseReferenceParameterList(builder, false, parseDiamonds);
 
     final PsiBuilder.Marker refOrType;
     final boolean parseAnnotations = areTypeAnnotationsSupported(builder) && builder.getTokenType() == JavaTokenType.AT;
 
     final IElementType tokenType = builder.getTokenType();
     if (tokenType == JavaTokenType.IDENTIFIER || parseAnnotations) {
-      refOrType = ReferenceParser.parseJavaCodeReference(builder, true, true, parseAnnotations);
+      refOrType = ReferenceParser.parseJavaCodeReference(builder, true, true, parseAnnotations, parseDiamonds);
       if (refOrType == null) {
         error(builder, JavaErrorMessages.message("expected.identifier"));
         newExpr.done(JavaElementType.NEW_EXPRESSION);
@@ -715,7 +716,7 @@ public class ExpressionParser {
   private static PsiBuilder.Marker parseClassObjectAccess(final PsiBuilder builder) {
     final PsiBuilder.Marker expr = builder.mark();
 
-    final PsiBuilder.Marker type = ReferenceParser.parseType(builder, false, false);
+    final PsiBuilder.Marker type = ReferenceParser.parseType(builder, false, false, false);
     if (type == null) {
       expr.drop();
       return null;
index f55fde673840b145816fe4e3f73cba33c84bc2fe..b1612648e154ce53ead636a5021b25dcbe62166e 100644 (file)
@@ -27,38 +27,64 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import static com.intellij.lang.PsiBuilderUtil.expect;
+import static com.intellij.lang.java.parser.JavaParserUtil.done;
+import static com.intellij.lang.java.parser.JavaParserUtil.exprType;
 import static com.intellij.lang.java.parser.JavaParserUtil.semicolon;
 
 
 public class FileParser {
+  public interface TopLevelDeclarationParser {
+    @Nullable PsiBuilder.Marker parse(PsiBuilder builder);
+  }
+
   private static final TokenSet IMPORT_LIST_STOPPER_SET = TokenSet.orSet(
     ElementType.MODIFIER_BIT_SET,
     TokenSet.create(JavaTokenType.CLASS_KEYWORD, JavaTokenType.INTERFACE_KEYWORD, JavaTokenType.ENUM_KEYWORD, JavaTokenType.AT));
 
+  private static final TopLevelDeclarationParser TOP_LEVEL_DECLARATION_PARSER = new TopLevelDeclarationParser() {
+    public PsiBuilder.Marker parse(final PsiBuilder builder) {
+      return DeclarationParser.parse(builder, DeclarationParser.Context.FILE);
+    }
+  };
+
   private FileParser() { }
 
   public static void parse(final PsiBuilder builder) {
+    parseFile(builder, IMPORT_LIST_STOPPER_SET, TOP_LEVEL_DECLARATION_PARSER, JavaErrorMessages.message("expected.class.or.interface"));
+  }
+
+  public static void parseFile(final PsiBuilder builder, final TokenSet importListStoppers,
+                               final TopLevelDeclarationParser declarationParser, final String errorMessage) {
     parsePackageStatement(builder);
 
-    parseImportList(builder);
+    final Pair<PsiBuilder.Marker, Boolean> impListInfo = parseImportList(builder, importListStoppers);
 
+    Boolean firstDeclarationOk = null;
+    PsiBuilder.Marker firstDeclaration = null;
     PsiBuilder.Marker invalidElements = null;
     while (!builder.eof()) {
       if (builder.getTokenType() == JavaTokenType.SEMICOLON) {
         if (invalidElements != null) {
-          invalidElements.error(JavaErrorMessages.message("expected.class.or.interface"));
+          invalidElements.error(errorMessage);
           invalidElements = null;
         }
         builder.advanceLexer();
+        if (firstDeclarationOk == null) firstDeclarationOk = false;
         continue;
       }
 
-      final PsiBuilder.Marker declaration = DeclarationParser.parse(builder, DeclarationParser.Context.FILE);
+      final PsiBuilder.Marker declaration = declarationParser.parse(builder);
       if (declaration != null) {
         if (invalidElements != null) {
-          invalidElements.errorBefore(JavaErrorMessages.message("expected.class.or.interface"), declaration);
+          invalidElements.errorBefore(errorMessage, declaration);
           invalidElements = null;
         }
+        if (firstDeclarationOk == null) {
+          firstDeclarationOk = exprType(declaration) != JavaElementType.MODIFIER_LIST;
+          if (firstDeclarationOk) {
+            firstDeclaration = declaration;
+          }
+        }
         continue;
       }
 
@@ -66,10 +92,16 @@ public class FileParser {
         invalidElements = builder.mark();
       }
       builder.advanceLexer();
+      if (firstDeclarationOk == null) firstDeclarationOk = false;
     }
 
     if (invalidElements != null) {
-      invalidElements.error(JavaErrorMessages.message("expected.class.or.interface"));
+      invalidElements.error(errorMessage);
+    }
+
+    if (impListInfo.second && firstDeclarationOk == Boolean.TRUE) {
+      impListInfo.first.setCustomEdgeProcessors(JavaParserUtil.PRECEDING_COMMENT_BINDER, null);  // pass comments behind fake import list
+      firstDeclaration.setCustomEdgeProcessors(JavaParserUtil.SPECIAL_PRECEDING_COMMENT_BINDER, null);
     }
   }
 
@@ -80,14 +112,14 @@ public class FileParser {
     if (!expect(builder, JavaTokenType.PACKAGE_KEYWORD)) {
       final PsiBuilder.Marker modList = builder.mark();
       DeclarationParser.parseAnnotations(builder);
-      modList.done(JavaElementType.MODIFIER_LIST);
+      done(modList, JavaElementType.MODIFIER_LIST);
       if (!expect(builder, JavaTokenType.PACKAGE_KEYWORD)) {
         statement.rollbackTo();
         return null;
       }
     }
 
-    final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, true, false, false);
+    final PsiBuilder.Marker ref = ReferenceParser.parseJavaCodeReference(builder, true, false, false, false);
     if (ref == null) {
       statement.rollbackTo();
       return null;
@@ -95,15 +127,10 @@ public class FileParser {
 
     semicolon(builder);
 
-    statement.done(JavaElementType.PACKAGE_STATEMENT);
+    done(statement, JavaElementType.PACKAGE_STATEMENT);
     return statement;
   }
 
-  @NotNull
-  private static Pair<PsiBuilder.Marker, Boolean> parseImportList(final PsiBuilder builder) {
-    return parseImportList(builder, IMPORT_LIST_STOPPER_SET);
-  }
-
   @NotNull
   public static Pair<PsiBuilder.Marker, Boolean> parseImportList(final PsiBuilder builder, final TokenSet stoppers) {
     final PsiBuilder.Marker list = builder.mark();
@@ -134,7 +161,7 @@ public class FileParser {
       }
     }
 
-    list.done(JavaElementType.IMPORT_LIST);
+    done(list, JavaElementType.IMPORT_LIST);
     return Pair.create(list, isEmpty);
   }
 
@@ -153,7 +180,7 @@ public class FileParser {
       semicolon(builder);
     }
 
-    statement.done(type);
+    done(statement, type);
     return statement;
   }
 }
index 3bd61235b27d8a89536ce806364ee6ff5dd9a9b7..dbe1ab0f51217ba4eee05ba8a2aea97a847a932a 100644 (file)
@@ -19,7 +19,6 @@ import com.intellij.lang.ASTNode;
 import com.intellij.lang.PsiBuilder;
 import com.intellij.lang.PsiParser;
 import com.intellij.pom.java.LanguageLevel;
-import com.intellij.psi.impl.source.parsing.ParseUtil;
 import com.intellij.psi.tree.IElementType;
 import org.jetbrains.annotations.NotNull;
 
@@ -41,8 +40,6 @@ public class JavaParser implements PsiParser {
     FileParser.parse(builder);
     root.done(rootType);
 
-    final ASTNode rootNode = builder.getTreeBuilt();
-    ParseUtil.bindComments(rootNode);
-    return rootNode;
+    return builder.getTreeBuilt();
   }
 }
index e4120a033c5488c4392471a1b1c0abce6b066ae2..66d17262be6dc16d0e8af91c57f36bf379b786e6 100644 (file)
@@ -18,8 +18,12 @@ package com.intellij.lang.java.parser;
 import com.intellij.codeInsight.daemon.JavaErrorMessages;
 import com.intellij.lang.*;
 import com.intellij.openapi.util.Key;
+import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.pom.java.LanguageLevel;
 import com.intellij.psi.JavaTokenType;
+import com.intellij.psi.impl.source.tree.ElementType;
+import com.intellij.psi.impl.source.tree.JavaDocElementType;
+import com.intellij.psi.impl.source.tree.JavaElementType;
 import com.intellij.psi.tree.IElementType;
 import com.intellij.psi.tree.TokenSet;
 import com.intellij.util.diff.FlyweightCapableTreeStructure;
@@ -34,11 +38,77 @@ public class JavaParserUtil {
   private static final Key<LanguageLevel> LANG_LEVEL_KEY = Key.create("JavaParserUtil.LanguageLevel");
 
   public static final WhitespacesAndCommentsProcessor GREEDY_RIGHT_EDGE_PROCESSOR = new WhitespacesAndCommentsProcessor() {
-    public int process(final List<IElementType> tokens) {
+    public int process(final List<IElementType> tokens, final boolean atStreamEdge, final TokenTextGetter getter) {
       return tokens.size();
     }
   };
 
+  private static class PrecedingWhitespacesAndCommentsProcessor implements WhitespacesAndCommentsProcessor {
+    private final boolean myAfterEmptyImport;
+
+    public PrecedingWhitespacesAndCommentsProcessor(final boolean afterImport) {
+      this.myAfterEmptyImport = afterImport;
+    }
+
+    public int process(final List<IElementType> tokens, final boolean atStreamEdge, final TokenTextGetter
+      getter) {
+      if (tokens.size() == 0) return 0;
+
+      // 1. bind doc comment
+      for (int idx = tokens.size() - 1; idx >= 0; idx--) {
+        if (tokens.get(idx) == JavaDocElementType.DOC_COMMENT) return idx;
+      }
+
+      // 2. bind plain comments
+      int result = tokens.size();
+      for (int idx = tokens.size() - 1; idx >= 0; idx--) {
+        final IElementType tokenType = tokens.get(idx);
+        if (ElementType.JAVA_WHITESPACE_BIT_SET.contains(tokenType)) {
+          if (StringUtil.getLineBreakCount(getter.get(idx)) > 1) break;
+        }
+        else if (ElementType.JAVA_PLAIN_COMMENT_BIT_SET.contains(tokenType)) {
+          if (atStreamEdge ||
+              (idx == 0 && myAfterEmptyImport) ||
+              (idx > 0 && ElementType.JAVA_WHITESPACE_BIT_SET.contains(tokens.get(idx - 1)) && StringUtil.containsLineBreak(getter.get(idx - 1)))) {
+            result = idx;
+          }
+        }
+        else break;
+      }
+
+      return result;
+    }
+  }
+
+  private static class TrailingWhitespacesAndCommentsProcessor implements WhitespacesAndCommentsProcessor {
+    public int process(final List<IElementType> tokens, final boolean atStreamEdge, final TokenTextGetter getter) {
+      if (tokens.size() == 0) return 0;
+
+      int result = 0;
+      for (int idx = 0; idx < tokens.size(); idx++) {
+        final IElementType tokenType = tokens.get(idx);
+        if (ElementType.JAVA_WHITESPACE_BIT_SET.contains(tokenType)) {
+          if (StringUtil.containsLineBreak(getter.get(idx))) break;
+        }
+        else if (ElementType.JAVA_PLAIN_COMMENT_BIT_SET.contains(tokenType)) {
+          result = idx + 1;
+        }
+        else break;
+      }
+
+      return result;
+    }
+  }
+
+  private static final TokenSet PRECEDING_COMMENT_SET = ElementType.FULL_MEMBER_BIT_SET;
+  private static final TokenSet TRAILING_COMMENT_SET = TokenSet.orSet(
+    TokenSet.create(JavaElementType.PACKAGE_STATEMENT),
+    ElementType.IMPORT_STATEMENT_BASE_BIT_SET, ElementType.FULL_MEMBER_BIT_SET, ElementType.JAVA_STATEMENT_BIT_SET);
+
+  public static final WhitespacesAndCommentsProcessor PRECEDING_COMMENT_BINDER = new PrecedingWhitespacesAndCommentsProcessor(false);
+  public static final WhitespacesAndCommentsProcessor SPECIAL_PRECEDING_COMMENT_BINDER = new PrecedingWhitespacesAndCommentsProcessor(true);
+  public static final WhitespacesAndCommentsProcessor TRAILING_COMMENT_BINDER = new TrailingWhitespacesAndCommentsProcessor();
+
   private JavaParserUtil() { }
 
   public static void setLanguageLevel(final PsiBuilder builder, final LanguageLevel level) {
@@ -46,8 +116,11 @@ public class JavaParserUtil {
   }
 
   public static boolean areTypeAnnotationsSupported(final PsiBuilder builder) {
-    final LanguageLevel level = getLanguageLevel(builder);
-    return level.isAtLeast(LanguageLevel.JDK_1_7);
+    return getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_1_7);
+  }
+
+  public static boolean areDiamondsSupported(final PsiBuilder builder) {
+    return getLanguageLevel(builder).isAtLeast(LanguageLevel.JDK_1_7);
   }
 
   @NotNull
@@ -57,12 +130,19 @@ public class JavaParserUtil {
     return level;
   }
 
+  public static void done(final PsiBuilder.Marker marker, final IElementType type) {
+    marker.done(type);
+    final WhitespacesAndCommentsProcessor left = PRECEDING_COMMENT_SET.contains(type) ? PRECEDING_COMMENT_BINDER : null;
+    final WhitespacesAndCommentsProcessor right = TRAILING_COMMENT_SET.contains(type) ? TRAILING_COMMENT_BINDER : null;
+    marker.setCustomEdgeProcessors(left, right);
+  }
+
   @Nullable
   public static IElementType exprType(@Nullable final PsiBuilder.Marker marker) {
     return marker != null ? ((LighterASTNode)marker).getTokenType() : null;
   }
 
-  // used instead of PsiBuilder.error() as it drops all but first subsequent error messages
+  // used instead of PsiBuilder.error() as it keeps all subsequent error messages
   public static void error(final PsiBuilder builder, final String message) {
     builder.mark().error(message);
   }
index 8a5163f1cfa2c0e931d50911b494a074162506d5..02a1d95be73ff5b9e0c98506e6380f164c94ff47 100644 (file)
@@ -28,6 +28,7 @@ import org.jetbrains.annotations.Nullable;
 import static com.intellij.lang.PsiBuilderUtil.expect;
 import static com.intellij.lang.PsiBuilderUtil.nextTokenType;
 import static com.intellij.lang.java.parser.JavaParserUtil.*;
+import static com.intellij.lang.java.parser.JavaParserUtil.emptyElement;
 
 
 public class ReferenceParser {
@@ -45,18 +46,18 @@ public class ReferenceParser {
 
   @Nullable
   public static TypeInfo parseType(final PsiBuilder builder) {
-    return parseTypeWithInfo(builder, true, true);
+    return parseTypeWithInfo(builder, true, true, false);
   }
 
   @Nullable
-  public static PsiBuilder.Marker parseType(final PsiBuilder builder, final boolean eatLastDot, final boolean wildcard) {
-    final TypeInfo typeInfo = parseTypeWithInfo(builder, eatLastDot, wildcard);
+  public static PsiBuilder.Marker parseType(final PsiBuilder builder, final boolean eatLastDot, final boolean wildcard, final boolean diamonds) {
+    final TypeInfo typeInfo = parseTypeWithInfo(builder, eatLastDot, wildcard, diamonds);
     return typeInfo != null ? typeInfo.marker : null;
   }
 
   @Nullable
   public static PsiBuilder.Marker parseTypeWithEllipsis(final PsiBuilder builder, final boolean eatLastDot, final boolean wildcard) {
-    final TypeInfo typeInfo = parseTypeWithInfo(builder, eatLastDot, wildcard);
+    final TypeInfo typeInfo = parseTypeWithInfo(builder, eatLastDot, wildcard, false);
     if (typeInfo == null) return null;
 
     PsiBuilder.Marker type = typeInfo.marker;
@@ -70,7 +71,7 @@ public class ReferenceParser {
   }
 
   @Nullable
-  private static TypeInfo parseTypeWithInfo(final PsiBuilder builder, final boolean eatLastDot, final boolean wildcard) {
+  private static TypeInfo parseTypeWithInfo(final PsiBuilder builder, final boolean eatLastDot, final boolean wildcard, final boolean diamonds) {
     if (builder.getTokenType() == null) return null;
 
     final TypeInfo typeInfo = new TypeInfo();
@@ -86,13 +87,19 @@ public class ReferenceParser {
       typeInfo.isPrimitive = true;
     }
     else if (tokenType == JavaTokenType.IDENTIFIER) {
-      parseJavaCodeReference(builder, eatLastDot, true, annotationsSupported, false, false, typeInfo);
+      parseJavaCodeReference(builder, eatLastDot, true, annotationsSupported, false, false, diamonds, typeInfo);
     }
     else if (wildcard && tokenType == JavaTokenType.QUEST) {
       type.drop();
       typeInfo.marker = parseWildcardType(builder);
       return typeInfo.marker != null ? typeInfo : null;
     }
+    else if (diamonds && tokenType == JavaTokenType.GT) {
+      emptyElement(builder, JavaElementType.DIAMOND_TYPE);
+      type.done(JavaElementType.TYPE);
+      typeInfo.marker = type;
+      return typeInfo;
+    }
     else {
       type.drop();
       return null;
@@ -129,7 +136,7 @@ public class ReferenceParser {
     builder.advanceLexer();
 
     if (expect(builder, WILDCARD_KEYWORD_SET)) {
-      final PsiBuilder.Marker boundType = parseType(builder, true, false);
+      final PsiBuilder.Marker boundType = parseType(builder, true, false, false);
       if (boundType == null) {
         error(builder, JavaErrorMessages.message("expected.type"));
       }
@@ -141,13 +148,13 @@ public class ReferenceParser {
 
   @Nullable
   public static PsiBuilder.Marker parseJavaCodeReference(final PsiBuilder builder, final boolean eatLastDot,
-                                                         final boolean parameterList, final boolean annotations) {
-    return parseJavaCodeReference(builder, eatLastDot, parameterList, annotations, false, false, new TypeInfo());
+                                                         final boolean parameterList, final boolean annotations, final boolean diamonds) {
+    return parseJavaCodeReference(builder, eatLastDot, parameterList, annotations, false, false, diamonds, new TypeInfo());
   }
 
   public static boolean parseImportCodeReference(final PsiBuilder builder, final boolean isStatic) {
     final TypeInfo typeInfo = new TypeInfo();
-    parseJavaCodeReference(builder, true, false, false, true, isStatic, typeInfo);
+    parseJavaCodeReference(builder, true, false, false, true, isStatic, false, typeInfo);
     return !typeInfo.hasErrors;
   }
 
@@ -155,7 +162,7 @@ public class ReferenceParser {
   private static PsiBuilder.Marker parseJavaCodeReference(final PsiBuilder builder, final boolean eatLastDot,
                                                           final boolean parameterList, final boolean annotations,
                                                           final boolean isImport, final boolean isStaticImport,
-                                                          final TypeInfo typeInfo) {
+                                                          final boolean diamonds, final TypeInfo typeInfo) {
     PsiBuilder.Marker refElement = builder.mark();
 
     if (annotations) {
@@ -173,7 +180,7 @@ public class ReferenceParser {
 
     if (parameterList) {
       typeInfo.isParameterized = (builder.getTokenType() == JavaTokenType.LT);
-      parseReferenceParameterList(builder, true);
+      parseReferenceParameterList(builder, true, diamonds);
     }
     else {
       if (!isStaticImport || builder.getTokenType() == JavaTokenType.DOT) {
@@ -223,7 +230,7 @@ public class ReferenceParser {
 
       if (parameterList) {
         typeInfo.isParameterized = (builder.getTokenType() == JavaTokenType.LT);
-        parseReferenceParameterList(builder, true);
+        parseReferenceParameterList(builder, true, diamonds);
       }
       else if (!isStaticImport || builder.getTokenType() == JavaTokenType.DOT) {
         emptyElement(builder, JavaElementType.REFERENCE_PARAMETER_LIST);
@@ -235,7 +242,7 @@ public class ReferenceParser {
   }
 
   @NotNull
-  public static PsiBuilder.Marker parseReferenceParameterList(final PsiBuilder builder, final boolean wildcard) {
+  public static PsiBuilder.Marker parseReferenceParameterList(final PsiBuilder builder, final boolean wildcard, final boolean diamonds) {
     final PsiBuilder.Marker list = builder.mark();
     if (!expect(builder, JavaTokenType.LT)) {
       list.done(JavaElementType.REFERENCE_PARAMETER_LIST);
@@ -243,7 +250,7 @@ public class ReferenceParser {
     }
 
     while (true) {
-      final PsiBuilder.Marker type = parseType(builder, true, wildcard);
+      final PsiBuilder.Marker type = parseType(builder, true, wildcard, diamonds);
       if (type == null) {
         error(builder, JavaErrorMessages.message("expected.identifier"));
       }
@@ -323,7 +330,7 @@ public class ReferenceParser {
 
     if (expect(builder, start)) {
       while (true) {
-        final PsiBuilder.Marker classReference = parseJavaCodeReference(builder, true, true, true);
+        final PsiBuilder.Marker classReference = parseJavaCodeReference(builder, true, true, true, false);
         if (classReference == null) {
           error(builder, JavaErrorMessages.message("expected.identifier"));
         }
index 7d592df0e92e1f6124ae78083a5e03eb62815232..cba360904322e82f0c743d426fa756b91645ae2b 100644 (file)
@@ -118,7 +118,7 @@ public class StatementParser {
 
     final boolean greedyBlock = !expectOrError(builder, JavaTokenType.RBRACE, JavaErrorMessages.message("expected.rbrace"));
 
-    codeBlock.done(JavaElementType.CODE_BLOCK);
+    done(codeBlock, JavaElementType.CODE_BLOCK);
     if (greedyBlock) {
       codeBlock.setCustomEdgeProcessors(null, GREEDY_RIGHT_EDGE_PROCESSOR);
     }
@@ -214,7 +214,7 @@ public class StatementParser {
     else if (tokenType == JavaTokenType.SEMICOLON) {
       final PsiBuilder.Marker empty = builder.mark();
       builder.advanceLexer();
-      empty.done(JavaElementType.EMPTY_STATEMENT);
+      done(empty, JavaElementType.EMPTY_STATEMENT);
       return empty;
     }
     else if (tokenType == JavaTokenType.IDENTIFIER || tokenType == JavaTokenType.AT) {
@@ -227,10 +227,10 @@ public class StatementParser {
         final PsiBuilder.Marker declStatement = builder.mark();
         final PsiBuilder.Marker decl = DeclarationParser.parse(builder, DeclarationParser.Context.CODE_BLOCK);
         if (decl == null) {
-          ReferenceParser.parseType(builder, false, false);
+          ReferenceParser.parseType(builder, false, false, false);
           error(builder, JavaErrorMessages.message("expected.identifier"));
         }
-        declStatement.done(JavaElementType.DECLARATION_STATEMENT);
+        done(declStatement, JavaElementType.DECLARATION_STATEMENT);
         return declStatement;
       }
     }
@@ -255,15 +255,15 @@ public class StatementParser {
       }
       if (count > 1) {
         pos.drop();
-        list.done(JavaElementType.EXPRESSION_LIST);
+        done(list, JavaElementType.EXPRESSION_LIST);
         semicolon(builder);
-        statement.done(JavaElementType.EXPRESSION_LIST_STATEMENT);
+        done(statement, JavaElementType.EXPRESSION_LIST_STATEMENT);
         return statement;
       }
       if (exprType(expr) != JavaElementType.REFERENCE_EXPRESSION) {
         drop(list, pos);
         semicolon(builder);
-        statement.done(JavaElementType.EXPRESSION_STATEMENT);
+        done(statement, JavaElementType.EXPRESSION_STATEMENT);
         return statement;
       }
       pos.rollbackTo();
@@ -275,7 +275,7 @@ public class StatementParser {
     final PsiBuilder.Marker decl = DeclarationParser.parse(builder, DeclarationParser.Context.CODE_BLOCK);
     if (decl != null) {
       final PsiBuilder.Marker statement = decl.precede();
-      statement.done(JavaElementType.DECLARATION_STATEMENT);
+      done(statement, JavaElementType.DECLARATION_STATEMENT);
       return statement;
     }
 
@@ -283,7 +283,7 @@ public class StatementParser {
       final PsiBuilder.Marker statement = builder.mark();
       advance(builder, 2);
       parseStatement(builder);
-      statement.done(JavaElementType.LABELED_STATEMENT);
+      done(statement, JavaElementType.LABELED_STATEMENT);
       return statement;
     }
 
@@ -291,7 +291,7 @@ public class StatementParser {
       final PsiBuilder.Marker statement = builder.mark();
       ExpressionParser.parse(builder);
       semicolon(builder);
-      statement.done(JavaElementType.EXPRESSION_STATEMENT);
+      done(statement, JavaElementType.EXPRESSION_STATEMENT);
       return statement;
     }
 
@@ -311,19 +311,19 @@ public class StatementParser {
     builder.advanceLexer();
 
     if (!parseExpressionInParenth(builder)) {
-      statement.done(JavaElementType.IF_STATEMENT);
+      done(statement, JavaElementType.IF_STATEMENT);
       return statement;
     }
 
     final PsiBuilder.Marker thenStatement = parseStatement(builder);
     if (thenStatement == null) {
       error(builder, JavaErrorMessages.message("expected.statement"));
-      statement.done(JavaElementType.IF_STATEMENT);
+      done(statement, JavaElementType.IF_STATEMENT);
       return statement;
     }
 
     if (!expect(builder, JavaTokenType.ELSE_KEYWORD)) {
-      statement.done(JavaElementType.IF_STATEMENT);
+      done(statement, JavaElementType.IF_STATEMENT);
       return statement;
     }
 
@@ -332,7 +332,7 @@ public class StatementParser {
       error(builder, JavaErrorMessages.message("expected.statement"));
     }
 
-    statement.done(JavaElementType.IF_STATEMENT);
+    done(statement, JavaElementType.IF_STATEMENT);
     return statement;
   }
 
@@ -342,7 +342,7 @@ public class StatementParser {
     builder.advanceLexer();
 
     if (!parseExpressionInParenth(builder)) {
-      statement.done(JavaElementType.WHILE_STATEMENT);
+      done(statement, JavaElementType.WHILE_STATEMENT);
       return statement;
     }
 
@@ -351,7 +351,7 @@ public class StatementParser {
       error(builder, JavaErrorMessages.message("expected.statement"));
     }
 
-    statement.done(JavaElementType.WHILE_STATEMENT);
+    done(statement, JavaElementType.WHILE_STATEMENT);
     return statement;
   }
 
@@ -362,7 +362,7 @@ public class StatementParser {
 
     if (!expect(builder, JavaTokenType.LPARENTH)) {
       error(builder, JavaErrorMessages.message("expected.lparen"));
-      statement.done(JavaElementType.FOR_STATEMENT);
+      done(statement, JavaElementType.FOR_STATEMENT);
       return statement;
     }
 
@@ -384,7 +384,7 @@ public class StatementParser {
     if (init == null){
       error(builder, JavaErrorMessages.message("expected.statement"));
       if (!expect(builder, JavaTokenType.RPARENTH)) {
-        statement.done(JavaElementType.FOR_STATEMENT);
+        done(statement, JavaElementType.FOR_STATEMENT);
         return statement;
       }
     }
@@ -393,7 +393,7 @@ public class StatementParser {
       if (!expect(builder, JavaTokenType.SEMICOLON)) {
         error(builder, JavaErrorMessages.message("expected.semicolon"));
         if (!expect(builder, JavaTokenType.RPARENTH)) {
-          statement.done(JavaElementType.FOR_STATEMENT);
+          done(statement, JavaElementType.FOR_STATEMENT);
           return statement;
         }
       }
@@ -401,7 +401,7 @@ public class StatementParser {
         parseExpressionOrExpressionList(builder);
         if (!expect(builder, JavaTokenType.RPARENTH)) {
           error(builder, JavaErrorMessages.message("expected.rparen"));
-          statement.done(JavaElementType.FOR_STATEMENT);
+          done(statement, JavaElementType.FOR_STATEMENT);
           return statement;
         }
       }
@@ -412,7 +412,7 @@ public class StatementParser {
       error(builder, JavaErrorMessages.message("expected.statement"));
     }
 
-    statement.done(JavaElementType.FOR_STATEMENT);
+    done(statement, JavaElementType.FOR_STATEMENT);
     return statement;
   }
 
@@ -423,7 +423,7 @@ public class StatementParser {
     final PsiBuilder.Marker expressionStatement;
     if (builder.getTokenType() != JavaTokenType.COMMA) {
       expressionStatement = expr.precede();
-      expressionStatement.done(JavaElementType.EXPRESSION_STATEMENT);
+      done(expressionStatement, JavaElementType.EXPRESSION_STATEMENT);
     }
     else {
       final PsiBuilder.Marker expressionList = expr.precede();
@@ -438,8 +438,8 @@ public class StatementParser {
       }
       while (builder.getTokenType() == JavaTokenType.COMMA);
 
-      expressionList.done(JavaElementType.EXPRESSION_LIST);
-      expressionStatement.done(JavaElementType.EXPRESSION_LIST_STATEMENT);
+      done(expressionList, JavaElementType.EXPRESSION_LIST);
+      done(expressionStatement, JavaElementType.EXPRESSION_LIST_STATEMENT);
     }
   }
 
@@ -462,7 +462,7 @@ public class StatementParser {
       error(builder, JavaErrorMessages.message("expected.rparen"));
     }
 
-    statement.done(JavaElementType.FOREACH_STATEMENT);
+    done(statement, JavaElementType.FOREACH_STATEMENT);
     return statement;
   }
 
@@ -474,13 +474,13 @@ public class StatementParser {
     final PsiBuilder.Marker body = parseStatement(builder);
     if (body == null) {
       error(builder, JavaErrorMessages.message("expected.statement"));
-      statement.done(JavaElementType.DO_WHILE_STATEMENT);
+      done(statement, JavaElementType.DO_WHILE_STATEMENT);
       return statement;
     }
 
     if (!expect(builder, JavaTokenType.WHILE_KEYWORD)) {
       error(builder, JavaErrorMessages.message("expected.while"));
-      statement.done(JavaElementType.DO_WHILE_STATEMENT);
+      done(statement, JavaElementType.DO_WHILE_STATEMENT);
       return statement;
     }
 
@@ -488,7 +488,7 @@ public class StatementParser {
       semicolon(builder);
     }
 
-    statement.done(JavaElementType.DO_WHILE_STATEMENT);
+    done(statement, JavaElementType.DO_WHILE_STATEMENT);
     return statement;
   }
 
@@ -498,7 +498,7 @@ public class StatementParser {
     builder.advanceLexer();
 
     if (!parseExpressionInParenth(builder)) {
-      statement.done(JavaElementType.SWITCH_STATEMENT);
+      done(statement, JavaElementType.SWITCH_STATEMENT);
       return statement;
     }
 
@@ -507,7 +507,7 @@ public class StatementParser {
       error(builder, JavaErrorMessages.message("expected.lbrace"));
     }
 
-    statement.done(JavaElementType.SWITCH_STATEMENT);
+    done(statement, JavaElementType.SWITCH_STATEMENT);
     return statement;
   }
 
@@ -527,7 +527,7 @@ public class StatementParser {
 
     expectOrError(builder, JavaTokenType.COLON, JavaErrorMessages.message("expected.colon"));
 
-    statement.done(JavaElementType.SWITCH_LABEL_STATEMENT);
+    done(statement, JavaElementType.SWITCH_LABEL_STATEMENT);
     return statement;
   }
 
@@ -537,7 +537,7 @@ public class StatementParser {
     builder.advanceLexer();
     expect(builder, JavaTokenType.IDENTIFIER);
     semicolon(builder);
-    statement.done(JavaElementType.BREAK_STATEMENT);
+    done(statement, JavaElementType.BREAK_STATEMENT);
     return statement;
   }
 
@@ -547,7 +547,7 @@ public class StatementParser {
     builder.advanceLexer();
     expect(builder, JavaTokenType.IDENTIFIER);
     semicolon(builder);
-    statement.done(JavaElementType.CONTINUE_STATEMENT);
+    done(statement, JavaElementType.CONTINUE_STATEMENT);
     return statement;
   }
 
@@ -559,7 +559,7 @@ public class StatementParser {
     ExpressionParser.parse(builder);
 
     semicolon(builder);
-    statement.done(JavaElementType.RETURN_STATEMENT);
+    done(statement, JavaElementType.RETURN_STATEMENT);
     return statement;
   }
 
@@ -571,12 +571,12 @@ public class StatementParser {
     final PsiBuilder.Marker expr = ExpressionParser.parse(builder);
     if (expr == null) {
       error(builder, JavaErrorMessages.message("expected.expression"));
-      statement.done(JavaElementType.THROW_STATEMENT);
+      done(statement, JavaElementType.THROW_STATEMENT);
       return statement;
     }
 
     semicolon(builder);
-    statement.done(JavaElementType.THROW_STATEMENT);
+    done(statement, JavaElementType.THROW_STATEMENT);
     return statement;
   }
 
@@ -586,7 +586,7 @@ public class StatementParser {
     builder.advanceLexer();
 
     if (!parseExpressionInParenth(builder)) {
-      statement.done(JavaElementType.SYNCHRONIZED_STATEMENT);
+      done(statement, JavaElementType.SYNCHRONIZED_STATEMENT);
       return statement;
     }
 
@@ -595,7 +595,7 @@ public class StatementParser {
       error(builder, JavaErrorMessages.message("expected.lbrace"));
     }
 
-    statement.done(JavaElementType.SYNCHRONIZED_STATEMENT);
+    done(statement, JavaElementType.SYNCHRONIZED_STATEMENT);
     return statement;
   }
 
@@ -607,13 +607,13 @@ public class StatementParser {
     final PsiBuilder.Marker tryBlock = parseCodeBlock(builder);
     if (tryBlock == null) {
       error(builder, JavaErrorMessages.message("expected.lbrace"));
-      statement.done(JavaElementType.TRY_STATEMENT);
+      done(statement, JavaElementType.TRY_STATEMENT);
       return statement;
     }
 
     if (!TRY_CLOSERS_SET.contains(builder.getTokenType())) {
       error(builder, JavaErrorMessages.message("expected.catch.or.finally"));
-      statement.done(JavaElementType.TRY_STATEMENT);
+      done(statement, JavaElementType.TRY_STATEMENT);
       return statement;
     }
 
@@ -628,7 +628,7 @@ public class StatementParser {
       }
     }
 
-    statement.done(JavaElementType.TRY_STATEMENT);
+    done(statement, JavaElementType.TRY_STATEMENT);
     return statement;
   }
 
@@ -638,7 +638,7 @@ public class StatementParser {
 
     if (!expect(builder, JavaTokenType.LPARENTH)) {
       error(builder, JavaErrorMessages.message("expected.lparen"));
-      section.done(JavaElementType.CATCH_SECTION);
+      done(section, JavaElementType.CATCH_SECTION);
       return false;
     }
 
@@ -649,18 +649,18 @@ public class StatementParser {
 
     if (!expect(builder, JavaTokenType.RPARENTH)) {
       error(builder, JavaErrorMessages.message("expected.rparen"));
-      section.done(JavaElementType.CATCH_SECTION);
+      done(section, JavaElementType.CATCH_SECTION);
       return false;
     }
 
     final PsiBuilder.Marker body = parseCodeBlock(builder);
     if (body == null) {
       error(builder, JavaErrorMessages.message("expected.lbrace"));
-      section.done(JavaElementType.CATCH_SECTION);
+      done(section, JavaElementType.CATCH_SECTION);
       return false;
     }
 
-    section.done(JavaElementType.CATCH_SECTION);
+    done(section, JavaElementType.CATCH_SECTION);
     return true;
   }
 
@@ -672,7 +672,7 @@ public class StatementParser {
     final PsiBuilder.Marker expr = ExpressionParser.parse(builder);
     if (expr == null) {
       error(builder, JavaErrorMessages.message("expected.boolean.expression"));
-      statement.done(JavaElementType.ASSERT_STATEMENT);
+      done(statement, JavaElementType.ASSERT_STATEMENT);
       return statement;
     }
 
@@ -680,13 +680,13 @@ public class StatementParser {
       final PsiBuilder.Marker expr2 = ExpressionParser.parse(builder);
       if (expr2 == null) {
         error(builder, JavaErrorMessages.message("expected.expression"));
-        statement.done(JavaElementType.ASSERT_STATEMENT);
+        done(statement, JavaElementType.ASSERT_STATEMENT);
         return statement;
       }
     }
 
     semicolon(builder);
-    statement.done(JavaElementType.ASSERT_STATEMENT);
+    done(statement, JavaElementType.ASSERT_STATEMENT);
     return statement;
   }
 
@@ -694,7 +694,7 @@ public class StatementParser {
   private static PsiBuilder.Marker parseBlockStatement(final PsiBuilder builder) {
     final PsiBuilder.Marker statement = builder.mark();
     parseCodeBlock(builder);
-    statement.done(JavaElementType.BLOCK_STATEMENT);
+    done(statement, JavaElementType.BLOCK_STATEMENT);
     return statement;
   }
 
index 498473e25a0d328f6f40fcab90cb389d9507799d..1b1a5ba0efad5da7c544397373ebd444c4b04e99 100644 (file)
@@ -15,6 +15,7 @@
  */
 package com.intellij.psi.impl.source;
 
+import com.intellij.codeInsight.completion.scope.JavaCompletionProcessor;
 import com.intellij.lang.ASTNode;
 import com.intellij.lang.Language;
 import com.intellij.lang.StdLanguages;
@@ -309,15 +310,16 @@ public abstract class PsiJavaFileBaseImpl extends PsiFileImpl implements PsiJava
       if(rootPackage != null) rootPackage.processDeclarations(processor, state, null, place);
     }
 
-    // todo[dsl] class processing
     final PsiImportList importList = getImportList();
     final PsiImportStaticStatement[] importStaticStatements = importList.getImportStaticStatements();
     if (importStaticStatements.length > 0) {
       final StaticImportFilteringProcessor staticImportProcessor = new StaticImportFilteringProcessor(processor, null);
 
+      boolean forCompletion = Boolean.TRUE.equals(processor.getHint(JavaCompletionProcessor.JAVA_COMPLETION));
+
       // single member processing
       for (PsiImportStaticStatement importStaticStatement : importStaticStatements) {
-        if (!importStaticStatement.isOnDemand()) {
+        if (!importStaticStatement.isOnDemand() && !forCompletion) {
           final String referenceName = importStaticStatement.getReferenceName();
           final PsiClass targetElement = importStaticStatement.resolveTargetClass();
           if (targetElement != null) {
index a322538348b20ce35096603712c7b2cfe3fea7a9..8b50d8ee6ff0291c2e22c77d9869ad1c8b77e6bf 100644 (file)
@@ -17,6 +17,7 @@ package com.intellij.psi.impl.source;
 
 import com.intellij.psi.*;
 import com.intellij.psi.impl.source.tree.CompositePsiElement;
+import com.intellij.psi.impl.source.tree.ElementType;
 import com.intellij.psi.impl.source.tree.JavaElementType;
 import com.intellij.psi.impl.PsiImplUtil;
 import com.intellij.util.IncorrectOperationException;
@@ -42,7 +43,7 @@ public class PsiMethodReceiverImpl extends CompositePsiElement implements PsiMet
 
   @NotNull
   public PsiAnnotation[] getAnnotations() {
-    return getChildrenAsPsiElements(JavaElementType.ANNOTATIONS, PsiAnnotation.PSI_ANNOTATION_ARRAY_CONSTRUCTOR);
+    return getChildrenAsPsiElements(ElementType.ANNOTATIONS, PsiAnnotation.PSI_ANNOTATION_ARRAY_CONSTRUCTOR);
   }
 
   public PsiAnnotation findAnnotation(@NotNull @NonNls String qualifiedName) {
index 3809e11a824556d3543839882af9fc5fc67205e1..72d1a07d40104b5faa4aca9fda7f2d2951f00f4e 100644 (file)
@@ -52,10 +52,6 @@ public class ParseUtil extends ParseUtilBase {
     inserter.invoke();
   }
 
-  public static void bindComments(final ASTNode root) {
-    JavaMissingTokenInserter.bindComments(root);
-  }
-
   private static class JavaMissingTokenInserter extends MissingTokenInserter {
     public JavaMissingTokenInserter(final CompositeElement root,
                                     final Lexer lexer,
index 300a9472a3cb637b9e1b33fd2da132e5401fa789..15e09d1caa46d4c68a4d5ff4e7c0468d423b4bd3 100644 (file)
@@ -91,12 +91,24 @@ public class PsiResolveHelperImpl implements PsiResolveHelper {
   }
 
   public PsiVariable resolveReferencedVariable(@NotNull String referenceText, PsiElement context) {
+    return resolveVar(referenceText, context, null);
+  }
+
+  @Override
+  public PsiVariable resolveAccessibleReferencedVariable(@NotNull String referenceText, PsiElement context) {
+    final boolean[] problemWithAccess = new boolean[1];
+    PsiVariable variable = resolveVar(referenceText, context, problemWithAccess);
+    return problemWithAccess[0] ? null : variable;
+  }
+
+  @Nullable
+  private PsiVariable resolveVar(String referenceText, PsiElement context, boolean[] problemWithAccess) {
     final FileElement holderElement = DummyHolderFactory.createHolder(myManager, context).getTreeElement();
     TreeElement ref = Parsing.parseJavaCodeReferenceText(myManager, referenceText, holderElement.getCharTable());
     if (ref == null) return null;
     holderElement.rawAddChildren(ref);
     PsiJavaCodeReferenceElement psiRef = (PsiJavaCodeReferenceElement)SourceTreeToPsiMap.treeElementToPsi(ref);
-    return ResolveVariableUtil.resolveVariable(psiRef, null, null);
+    return ResolveVariableUtil.resolveVariable(psiRef, problemWithAccess, null);
   }
 
   public boolean isAccessible(@NotNull PsiMember member, @NotNull PsiElement place, @Nullable PsiClass accessObjectClass) {
index c48489eaf60fe994830b345fa13b8700de9c3501..2a6fd9d6af5ff3e37b44b1d38cdd3612644fb252 100644 (file)
@@ -90,4 +90,5 @@ public interface ElementType extends JavaTokenType, JavaDocTokenType,
   TokenSet MEMBER_BIT_SET = TokenSet.create(CLASS, FIELD, ENUM_CONSTANT, METHOD, ANNOTATION_METHOD);
   TokenSet FULL_MEMBER_BIT_SET = TokenSet.orSet(MEMBER_BIT_SET,
                                                 TokenSet.create(CLASS_INITIALIZER));
+  TokenSet ANNOTATIONS = TokenSet.create(ANNOTATION);
 }
index 0aa7f85b7b61915ef3030c4d666d939e0491fd44..5e640c2d1dcfca6139bea253cea32aff2c165054 100644 (file)
@@ -31,7 +31,6 @@ import com.intellij.psi.text.BlockSupport;
 import com.intellij.psi.tree.IElementType;
 import com.intellij.psi.tree.IErrorCounterReparseableElementType;
 import com.intellij.psi.tree.ILazyParseableElementType;
-import com.intellij.psi.tree.TokenSet;
 import com.intellij.psi.tree.java.IJavaElementType;
 import com.intellij.psi.util.PsiUtil;
 import com.intellij.util.CharTable;
@@ -51,7 +50,6 @@ public interface JavaElementType {
 
   IElementType MODIFIER_LIST = JavaStubElementTypes.MODIFIER_LIST;
   IElementType ANNOTATION = JavaStubElementTypes.ANNOTATION;
-  TokenSet ANNOTATIONS = TokenSet.create(ANNOTATION);
   IElementType EXTENDS_LIST = JavaStubElementTypes.EXTENDS_LIST;
   IElementType IMPLEMENTS_LIST = JavaStubElementTypes.IMPLEMENTS_LIST;
   IElementType FIELD = JavaStubElementTypes.FIELD;
index 6e1097c33747832037e88e3205094f097e2ae3c3..06f5fc16c56170dca18aac93880b433205e58765 100644 (file)
@@ -82,7 +82,14 @@ public class ClassElement extends CompositeElement implements Constants {
     if (isEnum()) {
       if (!ENUM_CONSTANT_LIST_ELEMENTS_BIT_SET.contains(first.getElementType())) {
         ASTNode semicolonPlace = findEnumConstantListDelimiterPlace();
-        if (semicolonPlace == null || semicolonPlace.getElementType() != SEMICOLON) {
+        boolean commentsOrWhiteSpaces = true;
+        for (ASTNode child = first; child != null; child = child.getTreeNext()) {
+          if (!StdTokenSets.WHITE_SPACE_OR_COMMENT_BIT_SET.contains(child.getElementType())) {
+            commentsOrWhiteSpaces = false;
+            break;
+          }
+        }
+        if (!commentsOrWhiteSpaces && (semicolonPlace == null || semicolonPlace.getElementType() != SEMICOLON)) {
             final LeafElement semicolon = Factory.createSingleLeafElement(SEMICOLON, ";", 0, 1,
                                                                           SharedImplUtil.findCharTableByTree(this), getManager());
             addInternal(semicolon, semicolon, semicolonPlace, Boolean.FALSE);
index c61a81c276cea0cc0048e050e0044b292cd583f3..3e4b13337c9146b9088da407fa6640f8f0c6096d 100644 (file)
@@ -30,7 +30,7 @@ import com.intellij.psi.impl.light.LightEmptyImplementsList;
 import com.intellij.psi.impl.meta.MetaRegistry;
 import com.intellij.psi.impl.source.JavaStubPsiElement;
 import com.intellij.psi.impl.source.tree.ChildRole;
-import com.intellij.psi.impl.source.tree.JavaElementType;
+import com.intellij.psi.impl.source.tree.ElementType;
 import com.intellij.psi.javadoc.PsiDocComment;
 import com.intellij.psi.meta.PsiMetaData;
 import com.intellij.psi.scope.PsiScopeProcessor;
@@ -334,7 +334,7 @@ public class PsiTypeParameterImpl extends JavaStubPsiElement<PsiTypeParameterStu
 
   @NotNull
   public PsiAnnotation[] getAnnotations() {
-    return getStubOrPsiChildren(JavaElementType.ANNOTATIONS, PsiAnnotation.ARRAY_FACTORY);
+    return getStubOrPsiChildren(ElementType.ANNOTATIONS, PsiAnnotation.ARRAY_FACTORY);
   }
 
   public PsiAnnotation findAnnotation(@NotNull @NonNls String qualifiedName) {
index 86bd01fc7b5409b3b1c1ab70b27ff508f7392a9f..a5b9be29cbd8e936d14db14f8dbdada2a2dd3ac9 100644 (file)
@@ -50,7 +50,8 @@ public class ReplaceExpressionUtil {
       return ((CompositeElement)oldParent).getChildRole(oldExpr) != ChildRole.LOPERAND &&
              opType != JavaTokenType.PLUS &&
              opType != JavaTokenType.ASTERISK &&
-             opType != JavaTokenType.ANDAND;
+             opType != JavaTokenType.ANDAND &&
+             opType != JavaTokenType.OROR;
     }
     else if (i == JavaElementType.INSTANCE_OF_EXPRESSION) {
       return priority < parentPriority;
index 15dded63dda6abaf67c85021ac09f4c2a46b2cb8..bec9ae48471c3380b5069565737a89ea509ddae9 100644 (file)
@@ -24,6 +24,7 @@ import com.intellij.openapi.roots.ProjectRootManager;
 import com.intellij.openapi.ui.DialogWrapper;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.*;
+import com.intellij.psi.impl.file.JavaDirectoryServiceImpl;
 import com.intellij.psi.impl.source.jsp.jspJava.JspClass;
 import com.intellij.refactoring.JavaRefactoringSettings;
 import com.intellij.refactoring.RefactoringBundle;
@@ -33,6 +34,7 @@ import com.intellij.refactoring.util.CommonRefactoringUtil;
 import com.intellij.openapi.project.Project;
 import com.intellij.refactoring.util.RadioUpDownListener;
 import com.intellij.refactoring.util.RefactoringUtil;
+import com.intellij.util.IncorrectOperationException;
 import com.intellij.util.containers.HashSet;
 import org.jetbrains.annotations.Nullable;
 
@@ -294,4 +296,17 @@ public class MoveClassesOrPackagesHandlerBase extends MoveHandlerDelegate {
     }
     return false;
   }
+
+  @Override
+  public boolean isMoveRedundant(PsiElement source, PsiElement target) {
+    if (target instanceof PsiDirectory && source instanceof PsiClass) {
+      try {
+        JavaDirectoryServiceImpl.checkCreateClassOrInterface((PsiDirectory)target, ((PsiClass)source).getName());
+      }
+      catch (IncorrectOperationException e) {
+        return true;
+      }
+    }
+    return super.isMoveRedundant(source, target);
+  }
 }
index f56925dfded31f73b330d48dadb2c872fe12db90..37ff8d3d3b5efddec9ffa1c01d8badc9395afebc 100644 (file)
  */
 package com.intellij.refactoring.move.moveFilesOrDirectories;
 
+import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil;
+import com.intellij.openapi.application.Result;
+import com.intellij.openapi.command.WriteCommandAction;
 import com.intellij.openapi.project.Project;
 import com.intellij.psi.*;
+import com.intellij.psi.impl.file.JavaDirectoryServiceImpl;
 import com.intellij.refactoring.copy.JavaCopyFilesOrDirectoriesHandler;
 import com.intellij.refactoring.move.MoveCallback;
-import com.intellij.codeInsight.daemon.impl.CollectHighlightsUtil;
+import com.intellij.util.ArrayUtil;
+import com.intellij.util.Function;
+import com.intellij.util.IncorrectOperationException;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.*;
 
 public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHandler {
   @Override
@@ -55,7 +64,70 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
   }
 
   @Override
-  public void doMove(Project project, PsiElement[] elements, PsiElement targetContainer, MoveCallback callback) {
-    super.doMove(project, elements, targetContainer, callback);
+  public void doMove(final Project project, PsiElement[] elements, PsiElement targetContainer, MoveCallback callback) {
+
+    MoveFilesOrDirectoriesUtil
+      .doMove(project, elements, new PsiElement[]{targetContainer}, callback, new Function<PsiElement[], PsiElement[]>() {
+        @Override
+        public PsiElement[] fun(final PsiElement[] elements) {
+          return new WriteCommandAction<PsiElement[]>(project, "Regrouping ...") {
+            @Override
+            protected void run(Result<PsiElement[]> result) throws Throwable {
+              final List<PsiElement> adjustedElements = new ArrayList<PsiElement>();
+              for (PsiElement element : elements) {
+                if (element instanceof PsiClass) {
+                  final PsiFile containingFile = obtainContainingFile(element, elements);
+                  if (containingFile != null && !adjustedElements.contains(containingFile)) {
+                    adjustedElements.add(containingFile);
+                  }
+                }
+                else {
+                  adjustedElements.add(element);
+                }
+              }
+              result.setResult(adjustedElements.toArray(new PsiElement[adjustedElements.size()]));
+            }
+          }.execute().getResultObject();
+        }
+      });
+  }
+
+  @Nullable
+  private static PsiFile obtainContainingFile(PsiElement element, PsiElement[] elements) {
+    final PsiClass[] classes = ((PsiClassOwner)element.getParent()).getClasses();
+    final Set<PsiClass> nonMovedClasses = new HashSet<PsiClass>();
+    for (PsiClass aClass : classes) {
+      if (ArrayUtil.find(elements, aClass) < 0) {
+        nonMovedClasses.add(aClass);
+      }
+    }
+    final PsiFile containingFile = element.getContainingFile();
+    if (nonMovedClasses.isEmpty()) {
+      return containingFile;
+    }
+    else {
+      final PsiDirectory containingDirectory = containingFile.getContainingDirectory();
+      if (containingDirectory != null) {
+        try {
+          JavaDirectoryServiceImpl.checkCreateClassOrInterface(containingDirectory, ((PsiClass)element).getName());
+          final PsiElement createdClass = containingDirectory.add(element);
+          element.delete();
+          return createdClass.getContainingFile();
+        }
+        catch (IncorrectOperationException e) {
+          final Iterator<PsiClass> iterator = nonMovedClasses.iterator();
+          final PsiClass nonMovedClass = iterator.next();
+          final PsiElement createdFile = containingDirectory.add(nonMovedClass).getContainingFile();
+          nonMovedClass.delete();
+          while (iterator.hasNext()) {
+            final PsiClass currentClass = iterator.next();
+            createdFile.add(currentClass);
+            currentClass.delete();
+          }
+          return containingFile;
+        }
+      }
+    }
+    return null;
   }
 }
index d4a47b303bf4863cb63954529d542bae45125e0a..2068ae96757d9a3df906ef420a66c4b651c47b1f 100644 (file)
@@ -104,7 +104,7 @@ public class JavaUnresolvableLocalCollisionDetector {
                                                   String newName,
                                                   final CollidingVariableVisitor collidingNameVisitor) {
     final PsiVariable collidingVariable =
-      JavaPsiFacade.getInstance(scope.getProject()).getResolveHelper().resolveReferencedVariable(newName, scope);
+      JavaPsiFacade.getInstance(scope.getProject()).getResolveHelper().resolveAccessibleReferencedVariable(newName, scope);
     if (collidingVariable instanceof PsiLocalVariable || collidingVariable instanceof PsiParameter) {
       final PsiElement commonParent = PsiTreeUtil.findCommonParent(element, collidingVariable);
       if (commonParent != null) {
index 974568a2a324c4cc271ac7f167a719ad628693a1..1d16b343cda71fe6f8994fe0963e2f635ebb013f 100644 (file)
@@ -49,7 +49,7 @@ public class FieldConflictsResolver {
       return;
     }
     JavaPsiFacade facade = JavaPsiFacade.getInstance(myScope.getProject());
-    final PsiVariable oldVariable = facade.getResolveHelper().resolveReferencedVariable(name, myScope);
+    final PsiVariable oldVariable = facade.getResolveHelper().resolveAccessibleReferencedVariable(name, myScope);
     myField = oldVariable instanceof PsiField ? (PsiField) oldVariable : null;
     if (!(oldVariable instanceof PsiField)) {
       myReferenceExpressions = null;
index 335a8339612646093aa9b50c3dded056645f4e10..ca14ee175c2c6c5271549736f2a286a619db8bf4 100644 (file)
@@ -117,7 +117,7 @@ public class RefactoringUtil {
     final String fieldName = newField.getName();
     final JavaPsiFacade facade = JavaPsiFacade.getInstance(manager.getProject());
     final PsiElement element = occurrence.getUserData(ElementToWorkOn.PARENT);
-    final PsiVariable psiVariable = facade.getResolveHelper().resolveReferencedVariable(fieldName, element != null ? element : occurrence);
+    final PsiVariable psiVariable = facade.getResolveHelper().resolveAccessibleReferencedVariable(fieldName, element != null ? element : occurrence);
     final PsiElementFactory factory = facade.getElementFactory();
     if (psiVariable != null && psiVariable.equals(newField)) {
       return IntroduceVariableBase.replace(occurrence, factory.createExpressionFromText(fieldName, null), manager.getProject());
@@ -143,7 +143,7 @@ public class RefactoringUtil {
       index++;
       final PsiManager manager = place.getManager();
       PsiResolveHelper helper = JavaPsiFacade.getInstance(manager.getProject()).getResolveHelper();
-      PsiVariable refVar = helper.resolveReferencedVariable(name, place);
+      PsiVariable refVar = helper.resolveAccessibleReferencedVariable(name, place);
       if (refVar != null && !manager.areElementsEquivalent(refVar, fieldToReplace)) continue;
       class CancelException extends RuntimeException {
       }
index 57920178523147e85463f759603a1988de691033..c8bc957c87c0f4e888ecd48fcbbcfadee42f7553 100644 (file)
@@ -23,6 +23,7 @@ import com.intellij.openapi.util.Iconable;
 import com.intellij.openapi.vcs.FileStatus;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.psi.*;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
 import com.intellij.psi.jsp.JspFile;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.usageView.UsageInfo;
@@ -45,11 +46,12 @@ public class ClassGroupingRule implements UsageGroupingRule {
     }
     final PsiElement psiElement = ((PsiElementUsage)usage).getElement();
     final PsiFile containingFile = psiElement.getContainingFile();
+    PsiFile topLevelFile = InjectedLanguageUtil.getTopLevelFile(containingFile);
 
-    if (!(containingFile instanceof PsiJavaFile) || containingFile instanceof JspFile) {
+    if (!(topLevelFile instanceof PsiJavaFile) || topLevelFile instanceof JspFile) {
       return null;
     }
-    PsiElement containingClass = psiElement;
+    PsiElement containingClass = topLevelFile == containingFile ? psiElement : containingFile.getContext();
     do {
       containingClass = PsiTreeUtil.getParentOfType(containingClass, PsiClass.class, true);
       if (containingClass == null || ((PsiClass)containingClass).getQualifiedName() != null) break;
@@ -60,8 +62,8 @@ public class ClassGroupingRule implements UsageGroupingRule {
       // check whether the element is in the import list
       PsiImportList importList = PsiTreeUtil.getParentOfType(psiElement, PsiImportList.class, true);
       if (importList != null) {
-        final String fileName = getFileNameWithoutExtension(containingFile);
-        final PsiClass[] classes = ((PsiJavaFile)containingFile).getClasses();
+        final String fileName = getFileNameWithoutExtension(topLevelFile);
+        final PsiClass[] classes = ((PsiJavaFile)topLevelFile).getClasses();
         for (final PsiClass aClass : classes) {
           if (fileName.equals(aClass.getName())) {
             containingClass = aClass;
@@ -81,9 +83,9 @@ public class ClassGroupingRule implements UsageGroupingRule {
       return new ClassUsageGroup((PsiClass)containingClass);
     }
 
-    final VirtualFile virtualFile = containingFile.getVirtualFile();
+    final VirtualFile virtualFile = topLevelFile.getVirtualFile();
     if (virtualFile != null) {
-      return new FileGroupingRule.FileUsageGroup(containingFile.getProject(), virtualFile);
+      return new FileGroupingRule.FileUsageGroup(topLevelFile.getProject(), virtualFile);
     }
     return null;
   }
index 8846de62d2fb566fc54b622099f50bd1b8ed4003..db76a3ee36f4fefdda4de782ee5100c668cd0059 100644 (file)
@@ -24,6 +24,7 @@ import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.Iconable;
 import com.intellij.openapi.vcs.FileStatus;
 import com.intellij.psi.*;
+import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil;
 import com.intellij.psi.util.PsiFormatUtil;
 import com.intellij.psi.util.PsiTreeUtil;
 import com.intellij.usageView.UsageInfo;
@@ -46,8 +47,10 @@ public class MethodGroupingRule implements UsageGroupingRule {
   public UsageGroup groupUsage(Usage usage) {
     if (!(usage instanceof PsiElementUsage)) return null;
     PsiElement psiElement = ((PsiElementUsage)usage).getElement();
-    if (psiElement.getContainingFile() instanceof PsiJavaFile) {
-      PsiElement containingMethod = psiElement;
+    PsiFile containingFile = psiElement.getContainingFile();
+    PsiFile topLevelFile = InjectedLanguageUtil.getTopLevelFile(containingFile);
+    if (topLevelFile instanceof PsiJavaFile) {
+      PsiElement containingMethod = topLevelFile == containingFile ? psiElement : containingFile.getContext();
       do {
         containingMethod = PsiTreeUtil.getParentOfType(containingMethod, PsiMethod.class, true);
         if (containingMethod == null || ((PsiMethod)containingMethod).getContainingClass().getQualifiedName() != null) break;
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass-out.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass-out.java
new file mode 100644 (file)
index 0000000..831ff2d
--- /dev/null
@@ -0,0 +1,13 @@
+import java.io.File;
+
+public class Super {
+  protected <T> T foo() {}
+}
+
+public class Foo extends Super {
+    {
+        bar(this.<File>foo());<caret>
+    }
+
+    void bar(java.io.File s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass.java b/java/java-tests/testData/codeInsight/completion/smartType/ExplicitMethodTypeParametersFromSuperClass.java
new file mode 100644 (file)
index 0000000..8d685e3
--- /dev/null
@@ -0,0 +1,11 @@
+public class Super {
+  protected <T> T foo() {}
+}
+
+public class Foo extends Super {
+    {
+        bar(fo<caret>)
+    }
+
+    void bar(java.io.File s) {}
+}
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField-out.java b/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField-out.java
new file mode 100644 (file)
index 0000000..84b336d
--- /dev/null
@@ -0,0 +1,15 @@
+import static Bar.BAR;
+import static Bar.FOO;
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String a = FOO;
+    String b = BAR;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField.java b/java/java-tests/testData/codeInsight/completion/smartType/SiblingOfAStaticallyImportedField.java
new file mode 100644 (file)
index 0000000..87041be
--- /dev/null
@@ -0,0 +1,14 @@
+import static Bar.FOO;
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String a = FOO;
+    String b = BA<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField-out.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField-out.java
new file mode 100644 (file)
index 0000000..883dfd4
--- /dev/null
@@ -0,0 +1,13 @@
+import static Bar.FOO
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String b = FOO;<caret>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField.java b/java/java-tests/testData/codeInsight/completion/smartType/StaticallyImportedField.java
new file mode 100644 (file)
index 0000000..301e1e0
--- /dev/null
@@ -0,0 +1,13 @@
+import static Bar.FOO
+
+class Bar {
+  static String FOO;
+  static String BAR;
+}
+
+class Foo {
+
+  Object[] foo() {
+    String b = FO<caret>
+  }
+}
\ No newline at end of file
index 28a87f11ea26c9bffd67162cd086c915dbfb2988..e4e66831b648af2e423486bc6147ef14b19b01b3 100644 (file)
@@ -10,6 +10,6 @@ class Bar {
   }
 
   {
-    f(fo<caret>)
+    f(foo<caret>x)
   }
 }
\ No newline at end of file
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterArrayType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/afterArrayType.java
new file mode 100644 (file)
index 0000000..6916c46
--- /dev/null
@@ -0,0 +1,10 @@
+// "Create Field For Parameter 'p1'" "true"
+
+class Test{
+    private final String[] myP1;
+
+    void f(String[] p1){
+        myP1 = p1;
+    }
+}
+
diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeArrayType.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/quickFix/createFieldFromParameter/beforeArrayType.java
new file mode 100644 (file)
index 0000000..692a30c
--- /dev/null
@@ -0,0 +1,7 @@
+// "Create Field For Parameter 'p1'" "true"
+
+class Test{
+    void f(String[] p<caret>1){
+    }
+}
+
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New15.java b/java/java-tests/testData/psi/parser-full/expressionParsing/New15.java
new file mode 100644 (file)
index 0000000..17f3c59
--- /dev/null
@@ -0,0 +1,5 @@
+class Foo {
+  {
+    new A<>();
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-full/expressionParsing/New15.txt b/java/java-tests/testData/psi/parser-full/expressionParsing/New15.txt
new file mode 100644 (file)
index 0000000..1bf67cb
--- /dev/null
@@ -0,0 +1,46 @@
+PsiJavaFile:New15.java
+  PsiImportList
+    <empty list>
+  PsiClass:Foo
+    PsiModifierList:
+      <empty list>
+    PsiKeyword:class('class')
+    PsiWhiteSpace(' ')
+    PsiIdentifier:Foo('Foo')
+    PsiTypeParameterList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiReferenceList
+      <empty list>
+    PsiWhiteSpace(' ')
+    PsiJavaToken:LBRACE('{')
+    PsiWhiteSpace('\n  ')
+    PsiClassInitializer
+      PsiModifierList:
+        <empty list>
+      PsiCodeBlock
+        PsiJavaToken:LBRACE('{')
+        PsiWhiteSpace('\n    ')
+        PsiExpressionStatement
+          PsiNewExpression:new A<>()
+            PsiKeyword:new('new')
+            PsiReferenceParameterList
+              <empty list>
+            PsiWhiteSpace(' ')
+            PsiJavaCodeReferenceElement:A<>
+              PsiIdentifier:A('A')
+              PsiReferenceParameterList
+                PsiJavaToken:LT('<')
+                PsiTypeElement:
+                  PsiElement(DIAMOND_TYPE)
+                    <empty list>
+                PsiJavaToken:GT('>')
+            PsiExpressionList
+              PsiJavaToken:LPARENTH('(')
+              PsiJavaToken:RPARENTH(')')
+          PsiJavaToken:SEMICOLON(';')
+        PsiWhiteSpace('\n  ')
+        PsiJavaToken:RBRACE('}')
+    PsiWhiteSpace('\n')
+    PsiJavaToken:RBRACE('}')
\ No newline at end of file
diff --git a/java/java-tests/testData/psi/parser-partial/references/Type7.txt b/java/java-tests/testData/psi/parser-partial/references/Type7.txt
new file mode 100644 (file)
index 0000000..a57c77f
--- /dev/null
@@ -0,0 +1,10 @@
+PsiJavaFile:Type7.java
+  PsiTypeElement:Diamond<>
+    PsiJavaCodeReferenceElement:Diamond<>
+      PsiIdentifier:Diamond('Diamond')
+      PsiReferenceParameterList
+        PsiJavaToken:LT('<')
+        PsiTypeElement:
+          PsiElement(DIAMOND_TYPE)
+            <empty list>
+        PsiJavaToken:GT('>')
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/dndMove/publicJavaClass/d/MyClass.java b/java/java-tests/testData/refactoring/dndMove/publicJavaClass/d/MyClass.java
new file mode 100644 (file)
index 0000000..90f42c3
--- /dev/null
@@ -0,0 +1,2 @@
+package d;
+public class MyClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/dndMove/secondJavaClass/d/MyClass.java b/java/java-tests/testData/refactoring/dndMove/secondJavaClass/d/MyClass.java
new file mode 100644 (file)
index 0000000..78ad73a
--- /dev/null
@@ -0,0 +1,5 @@
+package d;
+
+public class MyClass{}
+
+class Second{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.after.java b/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.after.java
new file mode 100644 (file)
index 0000000..d9859f4
--- /dev/null
@@ -0,0 +1,9 @@
+class Base {
+  private int name = 0;
+}
+
+class Child extends Base {
+  void foo() {
+      int name = 1;
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.java b/java/java-tests/testData/refactoring/introduceVariable/NonConflictingField.java
new file mode 100644 (file)
index 0000000..472122a
--- /dev/null
@@ -0,0 +1,9 @@
+class Base {
+  private int name = 0;
+}
+
+class Child extends Base {
+  void foo() {
+    <selection>1</selection>
+  }
+}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/s/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/MyClass.java
new file mode 100644 (file)
index 0000000..0823aa0
--- /dev/null
@@ -0,0 +1,5 @@
+package t;
+
+class MyClass{}
+
+class MyOneMoreClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/after/t/txt2move.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/MyClass.java
new file mode 100644 (file)
index 0000000..222b6d2
--- /dev/null
@@ -0,0 +1,3 @@
+package s;
+class MyClass{}
+class MyOneMoreClass{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/s/txt2move.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/allClassesInFile/before/t/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/MyLocal.java b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/MyLocal.java
new file mode 100644 (file)
index 0000000..2f4a3c1
--- /dev/null
@@ -0,0 +1,3 @@
+package s;
+
+class MyLocal{}
\ No newline at end of file
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/s/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/MyClass.java
new file mode 100644 (file)
index 0000000..c6cc48a
--- /dev/null
@@ -0,0 +1,2 @@
+package t;
+public class MyClass{}
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/after/t/txt2move.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/MyClass.java
new file mode 100644 (file)
index 0000000..04f95fa
--- /dev/null
@@ -0,0 +1,3 @@
+package s;
+public class MyClass{}
+class MyLocal{}
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/txt2move.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/s/txt2move.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/t/empty.txt b/java/java-tests/testData/refactoring/moveClassAndFile/leavePackageLocalClass/before/t/empty.txt
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/MyClass.java b/java/java-tests/testData/refactoring/moveClassAndFile/onlyPackageLocalClass/after/s/MyClass.java
new file mode 100644 (file)
index 0000000..5bcead3
--- /dev/null