From f13622d2c2ff4ad007306d62ccf1e5897d1fa8f0 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 25 Jul 2012 20:06:11 +0200 Subject: [PATCH 01/25] more attempts? --- .../testSrc/com/intellij/psi/util/NameUtilTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilTest.java b/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilTest.java index 8064655edb19..0d831e863627 100644 --- a/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilTest.java +++ b/platform/platform-tests/testSrc/com/intellij/psi/util/NameUtilTest.java @@ -487,6 +487,6 @@ public class NameUtilTest extends UsefulTestCase { } } } - }).cpuBound().assertTiming(); + }).cpuBound().attempts(20).assertTiming(); } } From ef8c2fb33966ec339b00ade3a159a548e4538b16 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 25 Jul 2012 20:42:32 +0200 Subject: [PATCH 02/25] Log IdeaWin32 loading --- .../src/com/intellij/openapi/util/io/win32/IdeaWin32.java | 2 ++ test-log.xml | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/platform/util/src/com/intellij/openapi/util/io/win32/IdeaWin32.java b/platform/util/src/com/intellij/openapi/util/io/win32/IdeaWin32.java index 1ebf61203d84..575ae4f9f787 100644 --- a/platform/util/src/com/intellij/openapi/util/io/win32/IdeaWin32.java +++ b/platform/util/src/com/intellij/openapi/util/io/win32/IdeaWin32.java @@ -46,11 +46,13 @@ public class IdeaWin32 { available = true; } catch (Throwable t0) { + LOG.debug(t0); try { System.load(PathManager.getHomePath() + "/bin/win/" + libName + ".dll"); available = true; } catch (Throwable t1) { + LOG.debug(t1); try { System.loadLibrary(libName); available = true; diff --git a/test-log.xml b/test-log.xml index 3028abeab261..c8a7dff2e03e 100644 --- a/test-log.xml +++ b/test-log.xml @@ -31,6 +31,11 @@ + + + + + From c57a8de3295cc2f7848b9756655cd992e0a13225 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 25 Jul 2012 20:05:27 +0200 Subject: [PATCH 03/25] testng: not found message corrected (IDEA-89272) --- .../testng/configuration/TestNGConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index 2c26dda1d5e1..c434216c6fa4 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -317,7 +317,7 @@ public class TestNGConfiguration extends ModuleBasedConfiguration Date: Wed, 25 Jul 2012 20:13:15 +0200 Subject: [PATCH 04/25] junit: take ignored tests into account (IDEA-89227) --- .../src/com/intellij/execution/testframework/TestsUIUtil.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java b/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java index c1ef5bf25b68..13ff82470542 100644 --- a/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java +++ b/platform/testRunner/src/com/intellij/execution/testframework/TestsUIUtil.java @@ -160,8 +160,10 @@ public class TestsUIUtil { int failedCount = failed.size(); final List notStarted = Filter.NOT_PASSED.select(allTests); notStarted.removeAll(failed); + final List ignored = Filter.IGNORED.select(allTests); + notStarted.removeAll(ignored); int notStartedCount = notStarted.size(); - int passedCount = allTests.size() - failedCount - notStartedCount; + int passedCount = allTests.size() - failedCount - notStartedCount - ignored.size(); if (failedCount > 0) { myTitle = ExecutionBundle.message("junit.runing.info.tests.failed.label"); myText = passedCount + " passed, " + failedCount + " failed" + (notStartedCount > 0 ? ", " + notStartedCount + " not started" : ""); From 4e192034465bec43af6766eaed13bde9773eafe7 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 25 Jul 2012 21:03:30 +0200 Subject: [PATCH 05/25] wide selection fixes on Win --- .../platform-api/src/com/intellij/ui/treeStructure/Tree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java index e883eb65a4e9..ff72832db83b 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java @@ -97,7 +97,7 @@ public class Tree extends JTree implements ComponentWithEmptyText, ComponentWith TreeUI actualUI = ui; if (!isCustomUI()) { if (!(ui instanceof WideSelectionTreeUI) && (UIUtil.isUnderAquaBasedLookAndFeel() || SystemInfo.isWindows) && isMacWideSelection()) { //todo[kb] fix on ubunty - actualUI = new WideSelectionTreeUI(isMacWideSelection(), !isFileColorsEnabled()); + actualUI = new WideSelectionTreeUI(isMacWideSelection(), true); } } super.setUI(actualUI); From fa72d971aca3471b9a1de4735470417c36c4a228 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Wed, 25 Jul 2012 21:20:47 +0200 Subject: [PATCH 06/25] fix selection on Mac --- .../platform-api/src/com/intellij/ui/treeStructure/Tree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java index ff72832db83b..0cc3229fadb5 100644 --- a/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java +++ b/platform/platform-api/src/com/intellij/ui/treeStructure/Tree.java @@ -97,7 +97,7 @@ public class Tree extends JTree implements ComponentWithEmptyText, ComponentWith TreeUI actualUI = ui; if (!isCustomUI()) { if (!(ui instanceof WideSelectionTreeUI) && (UIUtil.isUnderAquaBasedLookAndFeel() || SystemInfo.isWindows) && isMacWideSelection()) { //todo[kb] fix on ubunty - actualUI = new WideSelectionTreeUI(isMacWideSelection(), true); + actualUI = new WideSelectionTreeUI(isMacWideSelection(), !SystemInfo.isMac); } } super.setUI(actualUI); From 1190cfc184c2ba711ed6d89b384be2e55a2334a6 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 25 Jul 2012 21:25:27 +0200 Subject: [PATCH 07/25] enable rename properties from usage when multiple bundles exist (IDEA-89262) --- .../properties/refactoring/PropertyRenameHandler.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/plugins/properties/src/com/intellij/lang/properties/refactoring/PropertyRenameHandler.java b/plugins/properties/src/com/intellij/lang/properties/refactoring/PropertyRenameHandler.java index 70524010897d..99355d34bc6e 100644 --- a/plugins/properties/src/com/intellij/lang/properties/refactoring/PropertyRenameHandler.java +++ b/plugins/properties/src/com/intellij/lang/properties/refactoring/PropertyRenameHandler.java @@ -22,6 +22,7 @@ import com.intellij.openapi.editor.Editor; import com.intellij.openapi.editor.ScrollType; import com.intellij.openapi.project.Project; import com.intellij.psi.*; +import com.intellij.psi.impl.source.resolve.reference.impl.PsiMultiReference; import com.intellij.refactoring.rename.PsiElementRenameHandler; import com.intellij.lang.properties.references.PropertyReferenceBase; import org.jetbrains.annotations.NotNull; @@ -46,6 +47,14 @@ public class PropertyRenameHandler extends PsiElementRenameHandler { if (reference instanceof PropertyReferenceBase) { final ResolveResult[] resolveResults = ((PropertyReferenceBase)reference).multiResolve(false); return resolveResults.length > 0 ? resolveResults[0].getElement() : null; + } else if (reference instanceof PsiMultiReference) { + final PsiReference[] references = ((PsiMultiReference)reference).getReferences(); + for (PsiReference psiReference : references) { + if (psiReference instanceof PropertyReferenceBase) { + final ResolveResult[] resolveResults = ((PropertyReferenceBase)psiReference).multiResolve(false); + if (resolveResults.length > 0) return resolveResults[0].getElement(); + } + } } return null; } From 8b612a258e43c9c87c1672cbf8b4713c5a53af55 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 25 Jul 2012 21:33:09 +0200 Subject: [PATCH 08/25] typo (IDEA-89187) --- .../src/messages/ApplicationBundle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform/platform-resources-en/src/messages/ApplicationBundle.properties b/platform/platform-resources-en/src/messages/ApplicationBundle.properties index 4332c8d81fa2..13c5cb478d13 100644 --- a/platform/platform-resources-en/src/messages/ApplicationBundle.properties +++ b/platform/platform-resources-en/src/messages/ApplicationBundle.properties @@ -402,7 +402,7 @@ group.error.highlighting=Error highlighting editbox.autoreparse.delay.ms=Autoreparse delay (ms): editbox.error.stripe.mark.min.height.pixels=Error stripe mark min height (pixels): checkbox.suppress.with.suppresswarnings=Suppress with @SuppressWarnings (for Java 5.0 only) -checkbox.next.error.action.goes.to.errors.first='Next Error' action goes to errors first +checkbox.next.error.action.goes.to.errors.first='Next Error' action goes to high priority problems only checkbox.show.import.popup=Show import &popup checkbox.indent.use.tab.character=Use tab character checkbox.indent.smart.tabs=Smart tabs From fe60a09392e03a5f1e780c09c2a689c319142b58 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 25 Jul 2012 21:59:38 +0200 Subject: [PATCH 09/25] Dynamic linking in IdeaWin32 --- bin/win/IdeaWin32.dll | Bin 35840 -> 35840 bytes bin/win/IdeaWin64.dll | Bin 41472 -> 42496 bytes native/IdeaWin32/IdeaWin32.cpp | 14 ++++++++++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/bin/win/IdeaWin32.dll b/bin/win/IdeaWin32.dll index 3256217b082d27d90654e929067df7309d5fd0ee..9d1f6def39b08e48aebf660128f40f0bf961a33a 100644 GIT binary patch delta 7325 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 T?C5gHa9_4_TJzxg(^3Bm-4~K4 delta 7230 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 diff --git a/bin/win/IdeaWin64.dll b/bin/win/IdeaWin64.dll index 82abbb1c3e65a918b753cee50682046795da9cff..0e1c902938885647c60de93f96ab511d03cdb656 100644 GIT binary patch delta 9263 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≠Phi_=Lwq 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 NWIS*04BGj<@Gl$U^y~lt diff --git a/native/IdeaWin32/IdeaWin32.cpp b/native/IdeaWin32/IdeaWin32.cpp index b433870f05d4..b6e9fa11be2b 100644 --- a/native/IdeaWin32/IdeaWin32.cpp +++ b/native/IdeaWin32/IdeaWin32.cpp @@ -17,6 +17,8 @@ #include "IdeaWin32.h" #include +typedef DWORD (WINAPI *GetFinalPathNameByHandlePtr) (HANDLE, LPCWSTR, DWORD, DWORD dwFlags); +static GetFinalPathNameByHandlePtr __GetFinalPathNameByHandle = NULL; static jfieldID nameID = NULL; static jfieldID attributesID = NULL; @@ -66,6 +68,7 @@ static jobject CreateFileInfo(JNIEnv *env, jstring path, bool append, LPWIN32_FI timestamp = 0; length = 0; + // todo: optimize to avoid extra copying size_t nameLen = env->GetStringLength(path) + wcslen(lpData->cFileName) + 2; wchar_t *lpName = (wchar_t *)malloc(nameLen * sizeof(wchar_t)); if (lpName != NULL) { @@ -116,6 +119,9 @@ static jobject CreateFileInfo(JNIEnv *env, jstring path, bool append, LPWIN32_FI JNIEXPORT void JNICALL Java_com_intellij_openapi_util_io_win32_IdeaWin32_initIDs(JNIEnv *env, jclass cls) { + __GetFinalPathNameByHandle = + (GetFinalPathNameByHandlePtr)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "GetFinalPathNameByHandleW"); + jclass fileInfoClass = getFileInfoClass(env); if (fileInfoClass == NULL) { return; @@ -166,6 +172,10 @@ JNIEXPORT jobject JNICALL Java_com_intellij_openapi_util_io_win32_IdeaWin32_getI JNIEXPORT jstring JNICALL Java_com_intellij_openapi_util_io_win32_IdeaWin32_resolveSymLink0(JNIEnv *env, jobject method, jstring path) { + if (__GetFinalPathNameByHandle == NULL) { + return NULL; // XP + } + WIN32_FIND_DATA data; HANDLE h = FindFileInner(env, path, &data); if (h == INVALID_HANDLE_VALUE) { @@ -187,7 +197,7 @@ JNIEXPORT jstring JNICALL Java_com_intellij_openapi_util_io_win32_IdeaWin32_reso jstring result = NULL; TCHAR name[MAX_PATH]; - DWORD len = GetFinalPathNameByHandle(th, name, MAX_PATH, 0); + DWORD len = __GetFinalPathNameByHandle(th, name, MAX_PATH, 0); if (len > 0) { if (len < MAX_PATH) { result = env->NewString((jchar *)name, len); @@ -195,7 +205,7 @@ JNIEXPORT jstring JNICALL Java_com_intellij_openapi_util_io_win32_IdeaWin32_reso else { TCHAR *name = (TCHAR *)malloc(sizeof(TCHAR) * (len + 1)); if (name != NULL) { - len = GetFinalPathNameByHandle(th, name, len, 0); + len = __GetFinalPathNameByHandle(th, name, len, 0); if (len > 0) { result = env->NewString((jchar *)name, len); } From d36b2ecf4486b1be6fc86c152602c1f5b1cf6c13 Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 25 Jul 2012 21:53:42 +0200 Subject: [PATCH 10/25] only search for variables in java incomplete code (i.e. not groovy) --- .../search/VariableInIncompleteCodeSearcher.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java b/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java index 19a75a872c26..fc0ca69b6a4c 100644 --- a/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java +++ b/java/java-impl/src/com/intellij/psi/impl/search/VariableInIncompleteCodeSearcher.java @@ -15,6 +15,7 @@ */ package com.intellij.psi.impl.search; +import com.intellij.lang.java.JavaLanguage; import com.intellij.openapi.application.QueryExecutorBase; import com.intellij.psi.*; import com.intellij.psi.search.LocalSearchScope; @@ -44,7 +45,10 @@ public class VariableInIncompleteCodeSearcher extends QueryExecutorBase Date: Wed, 25 Jul 2012 22:01:56 +0200 Subject: [PATCH 11/25] groovy highlighting performance: use walking visitor --- .../annotator/GrReferenceHighlighter.java | 162 ++++++++---------- .../local/GroovyPostHighlightingPass.java | 8 +- .../lang/editor/GroovyImportOptimizer.java | 27 +-- 3 files changed, 90 insertions(+), 107 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrReferenceHighlighter.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrReferenceHighlighter.java index 6da3f86bf93d..59ddb6cbdee4 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrReferenceHighlighter.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrReferenceHighlighter.java @@ -1,88 +1,74 @@ -/* - * Copyright 2000-2012 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 org.jetbrains.plugins.groovy.annotator; - -import com.intellij.codeHighlighting.TextEditorHighlightingPass; -import com.intellij.codeInsight.daemon.impl.HighlightInfo; -import com.intellij.codeInsight.daemon.impl.HighlightInfoType; -import com.intellij.codeInsight.daemon.impl.UpdateHighlightersUtil; -import com.intellij.openapi.editor.Document; -import com.intellij.openapi.editor.colors.TextAttributesKey; -import com.intellij.openapi.progress.ProgressIndicator; -import com.intellij.psi.PsiElement; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; -import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; -import org.jetbrains.plugins.groovy.lang.psi.GroovyRecursiveElementVisitor; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; - -import java.util.ArrayList; -import java.util.List; - -/** - * @author Max Medvedev - */ -public class GrReferenceHighlighter extends TextEditorHighlightingPass { - @NotNull private final GroovyFile myFile; - @Nullable private List myInfos = null; - - protected GrReferenceHighlighter(@Nullable Document document, @NotNull GroovyFile file) { - super(file.getProject(), document); - myFile = file; - } - - @Override - public void doCollectInformation(@NotNull ProgressIndicator progress) { - myInfos = new ArrayList(); - myFile.accept(new GroovyRecursiveElementVisitor() { - @Override - public void visitReferenceExpression(GrReferenceExpression referenceExpression) { - super.visitReferenceExpression(referenceExpression); - visit(referenceExpression); - } - - private void visit(GrReferenceElement element) { - final PsiElement resolved = element.resolve(); - final TextAttributesKey attribute = GrHighlightUtil.getDeclarationHighlightingAttribute(resolved); - if (attribute != null) { - final PsiElement refNameElement = GrHighlightUtil.getElementToHighlight(element); - myInfos.add(HighlightInfo.createHighlightInfo(HighlightInfoType.INFORMATION, refNameElement, null, attribute)); - } - } - - @Override - public void visitCodeReferenceElement(GrCodeReferenceElement refElement) { - super.visitCodeReferenceElement(refElement); - visit(refElement); - } - - @Override - public void visitAnnotation(GrAnnotation annotation) { - super.visitAnnotation(annotation); - visit(annotation.getClassReference()); - } - }); - } - - @Override - public void doApplyInformationToEditor() { - if (myInfos == null) return; - UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument, 0, myFile.getTextLength(), myInfos, getColorsScheme(), getId()); - } -} +/* + * Copyright 2000-2012 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 org.jetbrains.plugins.groovy.annotator; + +import com.intellij.codeHighlighting.TextEditorHighlightingPass; +import com.intellij.codeInsight.daemon.impl.HighlightInfo; +import com.intellij.codeInsight.daemon.impl.HighlightInfoType; +import com.intellij.codeInsight.daemon.impl.UpdateHighlightersUtil; +import com.intellij.openapi.editor.Document; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.progress.ProgressIndicator; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiRecursiveElementWalkingVisitor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Max Medvedev + */ +public class GrReferenceHighlighter extends TextEditorHighlightingPass { + @NotNull private final GroovyFile myFile; + @Nullable private List myInfos = null; + + protected GrReferenceHighlighter(@Nullable Document document, @NotNull GroovyFile file) { + super(file.getProject(), document); + myFile = file; + } + + @Override + public void doCollectInformation(@NotNull ProgressIndicator progress) { + myInfos = new ArrayList(); + myFile.accept(new PsiRecursiveElementWalkingVisitor() { + @Override + public void visitElement(PsiElement element) { + super.visitElement(element); + if (element instanceof GrReferenceElement) { + visit((GrReferenceElement)element); + } + } + private void visit(GrReferenceElement element) { + final PsiElement resolved = element.resolve(); + final TextAttributesKey attribute = GrHighlightUtil.getDeclarationHighlightingAttribute(resolved); + if (attribute != null) { + final PsiElement refNameElement = GrHighlightUtil.getElementToHighlight(element); + myInfos.add(HighlightInfo.createHighlightInfo(HighlightInfoType.INFORMATION, refNameElement, null, attribute)); + } + } + }); + } + + @Override + public void doApplyInformationToEditor() { + if (myInfos == null) return; + UpdateHighlightersUtil.setHighlightersToEditor(myProject, myDocument, 0, myFile.getTextLength(), myInfos, getColorsScheme(), getId()); + } +} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java index 0b332bc32bc8..8f5a2d5a3f25 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/local/GroovyPostHighlightingPass.java @@ -56,7 +56,6 @@ import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.psi.GrNamedElement; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; -import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; import org.jetbrains.plugins.groovy.lang.psi.api.statements.blocks.GrClosableBlock; @@ -109,7 +108,6 @@ public class GroovyPostHighlightingPass extends TextEditorHighlightingPass { }; final List unusedDeclarations = new ArrayList(); - final Set unusedImports = new HashSet(PsiUtil.getValidImportStatements(myFile)); final Map usedParams = new HashMap(); myFile.accept(new PsiRecursiveElementWalkingVisitor() { @@ -156,13 +154,11 @@ public class GroovyPostHighlightingPass extends TextEditorHighlightingPass { } } - for (GrImportStatement used : GroovyImportOptimizer.findUsedImports(myFile)) { - unusedImports.remove(used); - } - super.visitElement(element); } }); + final Set unusedImports = new HashSet(PsiUtil.getValidImportStatements(myFile)); + unusedImports.removeAll(GroovyImportOptimizer.findUsedImports(myFile)); myUnusedImports = unusedImports; if (deadCodeEnabled) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/GroovyImportOptimizer.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/GroovyImportOptimizer.java index 31cf84c594d5..88fee646dbc2 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/GroovyImportOptimizer.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/editor/GroovyImportOptimizer.java @@ -29,9 +29,11 @@ import gnu.trove.TObjectIntProcedure; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.codeStyle.GroovyCodeStyleSettings; -import org.jetbrains.plugins.groovy.lang.psi.*; +import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; +import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; +import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElementFactory; import org.jetbrains.plugins.groovy.lang.psi.api.GroovyResolveResult; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; @@ -40,7 +42,8 @@ import org.jetbrains.plugins.groovy.lang.resolve.processors.ResolverProcessor; import java.util.*; -import static org.jetbrains.plugins.groovy.lang.editor.GroovyImportHelper.*; +import static org.jetbrains.plugins.groovy.lang.editor.GroovyImportHelper.isImplicitlyImported; +import static org.jetbrains.plugins.groovy.lang.editor.GroovyImportHelper.processImports; /** * @author ven @@ -72,16 +75,14 @@ public class GroovyImportOptimizer implements ImportOptimizer { @Nullable final Map annotations) { if (!(file instanceof GroovyFile)) return; - ((GroovyFile)file).accept(new GroovyRecursiveElementVisitor() { - public void visitCodeReferenceElement(GrCodeReferenceElement refElement) { - visitRefElement(refElement); - super.visitCodeReferenceElement(refElement); - } - - public void visitReferenceExpression(GrReferenceExpression referenceExpression) { - visitRefElement(referenceExpression); - super.visitReferenceExpression(referenceExpression); - } + ((GroovyFile)file).accept(new PsiRecursiveElementWalkingVisitor() { + @Override + public void visitElement(PsiElement element) { + super.visitElement(element); + if (element instanceof GrReferenceElement) { + visitRefElement((GrReferenceElement)element); + } + } private void visitRefElement(GrReferenceElement refElement) { final GroovyResolveResult[] resolveResults = refElement.multiResolve(false); From a1806d3a4dc70118cf29998616c5bf7d7da8e73d Mon Sep 17 00:00:00 2001 From: peter Date: Wed, 25 Jul 2012 22:02:16 +0200 Subject: [PATCH 12/25] a more efficient groovy isReassigned: process only suitable references --- .../groovy/annotator/GrHighlightUtil.java | 376 +++++++++--------- 1 file changed, 190 insertions(+), 186 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrHighlightUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrHighlightUtil.java index 079467ac7c19..621a8ad4bc20 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrHighlightUtil.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/annotator/GrHighlightUtil.java @@ -1,186 +1,190 @@ -/* - * Copyright 2000-2012 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 org.jetbrains.plugins.groovy.annotator; - -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.colors.TextAttributesKey; -import com.intellij.openapi.util.TextRange; -import com.intellij.pom.PomDeclarationSearcher; -import com.intellij.pom.PomTarget; -import com.intellij.psi.*; -import com.intellij.psi.search.LocalSearchScope; -import com.intellij.psi.search.searches.ReferencesSearch; -import com.intellij.psi.tree.IElementType; -import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.util.CollectConsumer; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.plugins.groovy.extensions.GroovyUnresolvedHighlightFilter; -import org.jetbrains.plugins.groovy.highlighter.DefaultHighlighter; -import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; -import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrUnaryExpression; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod; -import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; -import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils; -import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; -import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; - -/** - * @author Max Medvedev - */ -public class GrHighlightUtil { - private static final Logger LOG = Logger.getInstance(GrHighlightUtil.class); - - static boolean isReassigned(GrVariable var) { - PsiMethod method = PsiTreeUtil.getParentOfType(var, PsiMethod.class); - PsiNamedElement scope = method == null ? var.getContainingFile() : method; - if (scope == null) { - return false; - } - boolean hasAssignment = var.getInitializerGroovy() != null || var instanceof GrParameter; - for (PsiReference reference : ReferencesSearch.search(var, new LocalSearchScope(scope)).findAll()) { - if (reference instanceof GrReferenceExpression && - (PsiUtil.isLValue((GrReferenceExpression)reference) || - ((GrReferenceExpression)reference).getParent() instanceof GrUnaryExpression && - ((GrUnaryExpression)((GrReferenceExpression)reference).getParent()).isPostfix())) { - if (hasAssignment) { - return true; - } - hasAssignment = true; - } - } - return false; - } - - @Nullable - static TextAttributesKey getDeclarationHighlightingAttribute(PsiElement resolved) { - if (resolved instanceof PsiField || resolved instanceof GrVariable && ResolveUtil.isScriptField((GrVariable)resolved)) { - boolean isStatic = ((PsiVariable)resolved).hasModifierProperty(PsiModifier.STATIC); - return isStatic ? DefaultHighlighter.STATIC_FIELD : DefaultHighlighter.INSTANCE_FIELD; - } - else if (resolved instanceof GrAccessorMethod) { - boolean isStatic = ((GrAccessorMethod)resolved).hasModifierProperty(PsiModifier.STATIC); - return isStatic ? DefaultHighlighter.STATIC_PROPERTY_REFERENCE : DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE; - } - else if (resolved instanceof PsiMethod) { - if (!((PsiMethod)resolved).isConstructor()) { - boolean isStatic = ((PsiMethod)resolved).hasModifierProperty(PsiModifier.STATIC); - if (GroovyPropertyUtils.isSimplePropertyAccessor((PsiMethod)resolved)) { - return isStatic ? DefaultHighlighter.STATIC_PROPERTY_REFERENCE : DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE; - } - else { - return isStatic ? DefaultHighlighter.STATIC_METHOD_ACCESS : DefaultHighlighter.METHOD_CALL; - } - } - } - else if (resolved instanceof PsiTypeParameter) { - return DefaultHighlighter.TYPE_PARAMETER; - } - else if (resolved instanceof PsiClass) { - if (((PsiClass)resolved).isAnnotationType()) { - return DefaultHighlighter.ANNOTATION; - } - else { - return DefaultHighlighter.CLASS_REFERENCE; - } - } - else if (resolved instanceof GrParameter) { - boolean reassigned = isReassigned((GrParameter)resolved); - return reassigned ? DefaultHighlighter.REASSIGNED_PARAMETER : DefaultHighlighter.PARAMETER; - } - else if (resolved instanceof GrVariable) { - boolean reassigned = isReassigned((GrVariable)resolved); - return reassigned ? DefaultHighlighter.REASSIGNED_LOCAL_VARIABLE : DefaultHighlighter.LOCAL_VARIABLE; - } - return null; - } - - public static boolean isDeclarationAssignment(GrReferenceExpression refExpr) { - if (isAssignmentLhs(refExpr)) { - return isExpandoQualified(refExpr); - } - return false; - } - - private static boolean isAssignmentLhs(GrReferenceExpression refExpr) { - return refExpr.getParent() instanceof GrAssignmentExpression && - refExpr.equals(((GrAssignmentExpression)refExpr.getParent()).getLValue()); - } - - private static boolean isExpandoQualified(GrReferenceExpression refExpr) { - final GrExpression qualifier = refExpr.getQualifierExpression(); - if (qualifier == null) { - final PsiClass clazz = PsiTreeUtil.getParentOfType(refExpr, PsiClass.class); - if (clazz == null) { //script - return true; - } - return false; //in class, a property should normally be defined, so it's not a declaration - } - - final PsiType type = qualifier.getType(); - if (type instanceof PsiClassType) { - final PsiClassType classType = (PsiClassType)type; - final PsiClass psiClass = classType.resolve(); - if (psiClass instanceof GroovyScriptClass) { - return true; - } - } - return false; - } - - public static boolean shouldHighlightAsUnresolved(@NotNull GrReferenceExpression referenceExpression) { - PsiElement refNameElement = referenceExpression.getReferenceNameElement(); - if (refNameElement != null && referenceExpression.getQualifier() == null) { - final IElementType type = refNameElement.getNode().getElementType(); - if (TokenSets.STRING_LITERAL_SET.contains(type)) return false; - } - - if (!GroovyUnresolvedHighlightFilter.shouldHighlight(referenceExpression)) return false; - - CollectConsumer consumer = new CollectConsumer(); - - for (PomDeclarationSearcher searcher : PomDeclarationSearcher.EP_NAME.getExtensions()) { - searcher.findDeclarationsAt(referenceExpression, 0, consumer); - if (consumer.getResult().size() > 0) return false; - } - - return true; - } - - public static TextRange getMethodHeaderTextRange(PsiMethod method) { - final PsiModifierList modifierList = method.getModifierList(); - final PsiParameterList parameterList = method.getParameterList(); - - final TextRange textRange = modifierList.getTextRange(); - LOG.assertTrue(textRange != null, method.getClass() + ":" + method.getText()); - int startOffset = textRange.getStartOffset(); - int endOffset = parameterList.getTextRange().getEndOffset() + 1; - - return new TextRange(startOffset, endOffset); - } - - @NotNull - public static PsiElement getElementToHighlight(@NotNull GrReferenceElement refElement) { - final PsiElement refNameElement = refElement.getReferenceNameElement(); - return refNameElement != null ? refNameElement : refElement; - } -} +/* + * Copyright 2000-2012 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 org.jetbrains.plugins.groovy.annotator; + +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.editor.colors.TextAttributesKey; +import com.intellij.openapi.util.TextRange; +import com.intellij.pom.PomDeclarationSearcher; +import com.intellij.pom.PomTarget; +import com.intellij.psi.*; +import com.intellij.psi.search.PsiElementProcessor; +import com.intellij.psi.tree.IElementType; +import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.util.CollectConsumer; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.extensions.GroovyUnresolvedHighlightFilter; +import org.jetbrains.plugins.groovy.highlighter.DefaultHighlighter; +import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; +import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrAssignmentExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrUnaryExpression; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.params.GrParameter; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrAccessorMethod; +import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; +import org.jetbrains.plugins.groovy.lang.psi.util.GroovyPropertyUtils; +import org.jetbrains.plugins.groovy.lang.psi.util.PsiUtil; +import org.jetbrains.plugins.groovy.lang.resolve.ResolveUtil; + +/** + * @author Max Medvedev + */ +public class GrHighlightUtil { + private static final Logger LOG = Logger.getInstance(GrHighlightUtil.class); + + static boolean isReassigned(final GrVariable var) { + PsiMethod method = PsiTreeUtil.getParentOfType(var, PsiMethod.class); + PsiNamedElement scope = method == null ? var.getContainingFile() : method; + if (scope == null) { + return false; + } + return !PsiTreeUtil.processElements(scope, new PsiElementProcessor() { + boolean hasAssignment = var.getInitializerGroovy() != null || var instanceof GrParameter; + @Override + public boolean execute(@NotNull PsiElement element) { + if (element instanceof GrReferenceExpression && + var.getName().equals(((GrReferenceExpression)element).getReferenceName()) && + ((GrReferenceExpression)element).isReferenceTo(var)) { + if (PsiUtil.isLValue((GrReferenceExpression)element) || + element.getParent() instanceof GrUnaryExpression && ((GrUnaryExpression)element.getParent()).isPostfix()) { + if (hasAssignment) { + return false; + } + hasAssignment = true; + } + } + return true; + } + }); + } + + @Nullable + static TextAttributesKey getDeclarationHighlightingAttribute(PsiElement resolved) { + if (resolved instanceof PsiField || resolved instanceof GrVariable && ResolveUtil.isScriptField((GrVariable)resolved)) { + boolean isStatic = ((PsiVariable)resolved).hasModifierProperty(PsiModifier.STATIC); + return isStatic ? DefaultHighlighter.STATIC_FIELD : DefaultHighlighter.INSTANCE_FIELD; + } + else if (resolved instanceof GrAccessorMethod) { + boolean isStatic = ((GrAccessorMethod)resolved).hasModifierProperty(PsiModifier.STATIC); + return isStatic ? DefaultHighlighter.STATIC_PROPERTY_REFERENCE : DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE; + } + else if (resolved instanceof PsiMethod) { + if (!((PsiMethod)resolved).isConstructor()) { + boolean isStatic = ((PsiMethod)resolved).hasModifierProperty(PsiModifier.STATIC); + if (GroovyPropertyUtils.isSimplePropertyAccessor((PsiMethod)resolved)) { + return isStatic ? DefaultHighlighter.STATIC_PROPERTY_REFERENCE : DefaultHighlighter.INSTANCE_PROPERTY_REFERENCE; + } + else { + return isStatic ? DefaultHighlighter.STATIC_METHOD_ACCESS : DefaultHighlighter.METHOD_CALL; + } + } + } + else if (resolved instanceof PsiTypeParameter) { + return DefaultHighlighter.TYPE_PARAMETER; + } + else if (resolved instanceof PsiClass) { + if (((PsiClass)resolved).isAnnotationType()) { + return DefaultHighlighter.ANNOTATION; + } + else { + return DefaultHighlighter.CLASS_REFERENCE; + } + } + else if (resolved instanceof GrParameter) { + boolean reassigned = isReassigned((GrParameter)resolved); + return reassigned ? DefaultHighlighter.REASSIGNED_PARAMETER : DefaultHighlighter.PARAMETER; + } + else if (resolved instanceof GrVariable) { + boolean reassigned = isReassigned((GrVariable)resolved); + return reassigned ? DefaultHighlighter.REASSIGNED_LOCAL_VARIABLE : DefaultHighlighter.LOCAL_VARIABLE; + } + return null; + } + + public static boolean isDeclarationAssignment(GrReferenceExpression refExpr) { + if (isAssignmentLhs(refExpr)) { + return isExpandoQualified(refExpr); + } + return false; + } + + private static boolean isAssignmentLhs(GrReferenceExpression refExpr) { + return refExpr.getParent() instanceof GrAssignmentExpression && + refExpr.equals(((GrAssignmentExpression)refExpr.getParent()).getLValue()); + } + + private static boolean isExpandoQualified(GrReferenceExpression refExpr) { + final GrExpression qualifier = refExpr.getQualifierExpression(); + if (qualifier == null) { + final PsiClass clazz = PsiTreeUtil.getParentOfType(refExpr, PsiClass.class); + if (clazz == null) { //script + return true; + } + return false; //in class, a property should normally be defined, so it's not a declaration + } + + final PsiType type = qualifier.getType(); + if (type instanceof PsiClassType) { + final PsiClassType classType = (PsiClassType)type; + final PsiClass psiClass = classType.resolve(); + if (psiClass instanceof GroovyScriptClass) { + return true; + } + } + return false; + } + + public static boolean shouldHighlightAsUnresolved(@NotNull GrReferenceExpression referenceExpression) { + PsiElement refNameElement = referenceExpression.getReferenceNameElement(); + if (refNameElement != null && referenceExpression.getQualifier() == null) { + final IElementType type = refNameElement.getNode().getElementType(); + if (TokenSets.STRING_LITERAL_SET.contains(type)) return false; + } + + if (!GroovyUnresolvedHighlightFilter.shouldHighlight(referenceExpression)) return false; + + CollectConsumer consumer = new CollectConsumer(); + + for (PomDeclarationSearcher searcher : PomDeclarationSearcher.EP_NAME.getExtensions()) { + searcher.findDeclarationsAt(referenceExpression, 0, consumer); + if (consumer.getResult().size() > 0) return false; + } + + return true; + } + + public static TextRange getMethodHeaderTextRange(PsiMethod method) { + final PsiModifierList modifierList = method.getModifierList(); + final PsiParameterList parameterList = method.getParameterList(); + + final TextRange textRange = modifierList.getTextRange(); + LOG.assertTrue(textRange != null, method.getClass() + ":" + method.getText()); + int startOffset = textRange.getStartOffset(); + int endOffset = parameterList.getTextRange().getEndOffset() + 1; + + return new TextRange(startOffset, endOffset); + } + + @NotNull + public static PsiElement getElementToHighlight(@NotNull GrReferenceElement refElement) { + final PsiElement refNameElement = refElement.getReferenceNameElement(); + return refNameElement != null ? refNameElement : refElement; + } +} From 66402a1065ef0a47736c68cf4a967c7d250a99c4 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Wed, 25 Jul 2012 22:26:41 +0200 Subject: [PATCH 13/25] Avoid unneeded string copying in IdeaWin32 --- bin/win/IdeaWin32.dll | Bin 35840 -> 35840 bytes bin/win/IdeaWin64.dll | Bin 42496 -> 41984 bytes native/IdeaWin32/IdeaWin32.cpp | 39 +++++++++++++++++++-------------- 3 files changed, 23 insertions(+), 16 deletions(-) diff --git a/bin/win/IdeaWin32.dll b/bin/win/IdeaWin32.dll index 9d1f6def39b08e48aebf660128f40f0bf961a33a..995f0ebc66c2757fec6c73ecd4b94f4dbbba0cc6 100644 GIT binary patch delta 3073 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 b=Y{FwZt;NVa?XU8;j-jwe%ak;Icfd_U;L`n diff --git a/bin/win/IdeaWin64.dll b/bin/win/IdeaWin64.dll index 0e1c902938885647c60de93f96ab511d03cdb656..9b8f2b13a79efb68fa942bcc69ff5b50bcbce5d0 100644 GIT binary patch delta 3503 zcmeH}k580!9LGP;alnbzU4aS8@We-@0d{(%Xxi@bu%~=X3Mi&!ten!q!p0gk^=wiA^pL@TT{N~%Iu zqhcvrtqjMK6iPzdV^EUym?Kx&Wj*JZrtI$gz;RYFA_!|{gG%TbG-v27htweswS?5- zpczbCY<>?LfK4xQzcm6Mg7<1IrK+ZzRcb(LGr2}HPwHlk8gL){DaBoXUwp`*I%N#e zuKE1O-B^T}W-3Mg^F{vd`lB&JZ^0O`NKPV=ZVqYYNKr$qrdl%-G!rvu<|na;7j;_w zN3q+&Yt=mc!4v-OmA}5G{qfoD;i?Qp3+wq5ecQ#uj%bbD?uK40f3f+2W)5g(Z}gi{ z7&x5x*c03Ukx!!w5Lp}!sd-#B5bz_QHOAZxo6)n#{}C_A=l{GY985<04?}7W;ttT8 z023RVyPU_0YV{+rn!B`csalSSVq}n<2H@)YU2^qMVb0^4b<%4P43=0<~P> zK6oLeOhYNa*$!xCe{3va5YB*$SGp&eC$cjU-w~4Gizf;>KIe2F{5?ggi{ptpf#vBY z4$v}^rWgrGQ79aY#jDce-FlIrntt@r&BUwsOGYqg02{NTglNb-8c!7}Dlb+1ypOYr zzQ`desxMW18?U(3!>)K=Ge@_o@w?^ki*{JklP7i-Cm*=mXm7(B@p(mfSlA~#CA=W~ zQ<$>V?w2j}3GWqF3TuQLh3&#uY#MY}0-p;n2*+%*C-4djgm(xZ5Y`Htgl)pz!UMu? zVW03+oCeXa5^y|YPv{Y533G&n!jMoGE*CZl+k`I)4-3B#UJyFlF(2lqEH?NQ3N_(! zVXZJCd`Z|P>=7OnekB|f{wYkt_Yr@t6Xt=|9!0gh6(Ps$vd)ziGc&Hq?eMJ*Ld40-@Ia(V!iytfzF4XJd!XfncM|QRZo(3qUx#x=aGbhLu%xSW$jIXxxhSy4)^(q)(H ztSv^W(q_G2+@KU#1IENT1y9?(BV&pBp^Ihqi>@QejJU!bmQhU5jJZ|OJjl&p4 zb^dE3Xmjy%2VcMHEtAIo|1$pDFQc>LsV-;m;xBy!Zw0@UfIQfwp8Th{japnf76rTA46oNkn{tUTViH5-Z@rXyPtQ{#CX;^y{#nlt= z1+oc`4g8wD72Gk|;M&$KqT>^Z%F)^D#ZIAg{4c=VCcYhfOMDmj3&f)hgDI12uY#+@ zSAsjB3XItS4nUm66X1qy+c#$;L*rDUDl{qpmqI*fGx+0FbVNJ~=1#L0Q~<7m;@be< z!9OP5XmbcW5AmXh!27Q!dMS*_!S&E-w5bEv2$Hz8SvBtD$=-@_(7tsn{b%X6a;3lXBZ6aW*&-Q8HcJUqHBYyNln`-a}1Aq7k z&M`fz+;8j0X)++$6hEiAfD;DiRj+VL@M|tL|Eu)aK$`q z5}tVu;x>kJKG9joi;6+ece6bxvjox+F9p{?oZh|Q@c@nt@hF%Zw0EBe&bkFhhIk>k z1mgC^U=zd{^(-K|6YAqJ!M7LS{0C9!LSX=kpC8yBA{s%QxoaWOU+~OFZ0-`Xg0n-M`8yPW9|5-)+kHF0ygP~BK%Dt}362teFZfg$juO5B+z+LzD6m<0x1Ayl zoN$l5piFQbG-xS1$7S$dE6VZhuncQQGMW8Qx;10x!-f-gV(Kcqd5Ar;QarO>d^5O5 jJoAWn=6B+mzlo1QEEkU()|s&T?}UE=z^3-T delta 3521 zcmeH}jc-$B6vofJ?4t}#3v93ffif;QWsJfmP6g9SfeX8nA`==iaYh0&A`a6SG|FAr zCYyJK;YAo9h8c!pBx-EbWojHobPAhj1Q#U=f~K;mLs6HA)aUe`E&4ZTlV`u@p7*?8 z=e=*c>Q1%#gxVAzcdWz{BKh=Fu6Kl*L9_}1-By)3YHzW9i&8K=w1?;}g=mw#Q5mgd z+jWYq9I|uNr5V|2$UO}WI2z>)qPN{WHZwPAP zfECCL)(15|9zuA?)*H$+ZYjfqSGO)1RzwR);{=Wy)_N`EZa<&luDL%sRzRD24N=QH z{^PC-BBoo)g2La8hPSnT%vy6iVKkT+CDG(fMPtoJ3FE$=!j8q!$F=;mzr3RV@#!7W z^*KsO)R;l>Q!efw*XugmwTa}K({u|pCLytf02ZGPHwxBr^aJEGM3$*`PC z$~MEvJ@(jJ(x#ees9rD{NF+nq*tTJHqIQuk2*24TIhMc5|n6n-xJT6j@-MVNuFA^waJP7}@r?SqPDdnEtc~XOF0gg&%uwn0>?M=L>R2V&EM_lSw7I zJdv6_L_;x`O0Iv!?2DTxPUTfi=Jg2S2Orjn(7-zbF6gdlGBh(v}h!{Mm28&B1RcrHD4+xgKhU z{Fy|d(fEDEtI03b%ZU8|P1#FyU#xEH1L|u}xjZJn_5Aif0{P&XjgS}qpO=U)Q^hEv zz9xrj;XC1(8=)R}=6p=aai01XEFl}7m+~Z*Q2w;Dl)>8on$A@~17C@^plo>NamWSF z{2m&>f|xt7pB{K-Gt>b;bp7CmE-5@;Rx=0x_`ox_LY45$Lr{2!{nOsuoNyyid>qk( zTMTN#{M2{n>2wVm6K=t5v(}<2B9tWpi=PalQTn8n$ z0ltNQN=_o@ZSY5k7u^rub3IX86h{eehWe3H4L&g)m4Or^EPKt=5nYU@iK5D#N}-TPy2CXh{wU{0cZF5;GElW zWQZ4oOCin=floqQQO|s$WzZQO6MS<%&i@J?+VF4+N}eCs9K`O>nc1?C=o)zDLyM&B z;0cKH&w?N8SU7tyWib{2?*a25KfDi|1qI>#U;xtLBTI1pKbAO0&<`#$oC$RB9mqgZ z2eZ^E7jy1XyiABQe}`J&2f#fcr|*6+e;LvHh%=vCj>W>af?MuF)!=KvBT(L4Jg`}~ z!YPpsj$i34Xae{I#1*Or|AaIyV;E(H@@(b6SS8QSIq-m)iFab!I_wZ)&#V;BtPx)i s9u&_!DxUd`c;;{7sS^KbKs+XMo_JGetStringLength(path) + wcslen(lpData->cFileName) + 2; - wchar_t *lpName = (wchar_t *)malloc(nameLen * sizeof(wchar_t)); - if (lpName != NULL) { - const jchar *dirName = env->GetStringChars(path, 0); - wcscpy_s(lpName, nameLen, (LPCWSTR)dirName); - env->ReleaseStringChars(path, dirName); - if (append) { - wcscat_s(lpName, nameLen, L"\\"); - wcscat_s(lpName, nameLen, lpData->cFileName); - } + const jchar *dirName = env->GetStringChars(path, 0); + wchar_t *fullPath = (wchar_t *)dirName; + if (append) { + size_t nameLen = env->GetStringLength(path) + wcslen(lpData->cFileName) + 2; + fullPath = (wchar_t *)malloc(nameLen * sizeof(wchar_t)); + if (fullPath != NULL) { + wcscpy_s(fullPath, nameLen, (LPCWSTR)dirName); + wcscat_s(fullPath, nameLen, L"\\"); + wcscat_s(fullPath, nameLen, lpData->cFileName); + } + } + + if (fullPath != NULL) { // read symlink target attributes - HANDLE th = CreateFile(lpName, 0, FILE_SHARE_ATTRIBUTES, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); - if (th != INVALID_HANDLE_VALUE) { + HANDLE h = CreateFile(fullPath, 0, FILE_SHARE_ATTRIBUTES, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); + if (h != INVALID_HANDLE_VALUE) { BY_HANDLE_FILE_INFORMATION targetData; - if (GetFileInformationByHandle(th, &targetData)) { + if (GetFileInformationByHandle(h, &targetData)) { attributes = targetData.dwFileAttributes | FILE_ATTRIBUTE_REPARSE_POINT; timestamp = pairToInt64(targetData.ftLastWriteTime.dwLowDateTime, targetData.ftLastWriteTime.dwHighDateTime); length = pairToInt64(targetData.nFileSizeLow, targetData.nFileSizeHigh); } - CloseHandle(th); + CloseHandle(h); + } + + if (append) { + free(fullPath); } - free(lpName); } + + env->ReleaseStringChars(path, dirName); } else { attributes &= (~ FILE_ATTRIBUTE_REPARSE_POINT); // keep reparse flag only for symlinks From 2dbaaaac2913253605e9d1fa5d34469498cffdde Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Tue, 24 Jul 2012 14:26:55 +0400 Subject: [PATCH 14/25] RUBY-11144: (refactoring) Pair replaced with BlockInfo class. --- .../indentation/IndentationParser.java | 43 +++++++++++++------ 1 file changed, 31 insertions(+), 12 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java b/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java index f406db0d336f..acf195d828ff 100644 --- a/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java +++ b/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java @@ -3,7 +3,6 @@ package com.intellij.indentation; import com.intellij.lang.ASTNode; import com.intellij.lang.PsiBuilder; import com.intellij.lang.PsiParser; -import com.intellij.openapi.util.Pair; import com.intellij.psi.tree.IElementType; import com.intellij.util.containers.Stack; import org.jetbrains.annotations.NotNull; @@ -38,8 +37,8 @@ public abstract class IndentationParser implements PsiParser { final PsiBuilder.Marker fileMarker = builder.mark(); final PsiBuilder.Marker documentMarker = builder.mark(); - final Stack> stack = new Stack>(); - stack.push(Pair.create(0, builder.mark())); + final Stack stack = new Stack(); + stack.push(new BlockInfo(0, builder.mark())); PsiBuilder.Marker startLineMarker = null; int currentIndent = 0; @@ -61,7 +60,7 @@ public abstract class IndentationParser implements PsiParser { currentIndent = builder.getTokenText().length(); } else { - if (!eolSeen && !stack.isEmpty() && currentIndent > 0 && currentIndent < stack.peek().first) { + if (!eolSeen && !stack.isEmpty() && currentIndent > 0 && currentIndent < stack.peek().getIndent()) { // sometimes we do not have EOL between indents eolSeen = true; } @@ -71,18 +70,18 @@ public abstract class IndentationParser implements PsiParser { startLineMarker = null; } // Close indentation blocks - while (!stack.isEmpty() && currentIndent < stack.peek().first) { - closeBlock(builder, stack.pop().second); + while (!stack.isEmpty() && currentIndent < stack.peek().getIndent()) { + closeBlock(builder, stack.pop().getMarker()); } if (!stack.isEmpty()) { - final Pair pair = stack.peek(); - if (currentIndent >= pair.first) { - if (currentIndent == pair.first) { - closeBlock(builder, stack.pop().second); + final BlockInfo blockInfo = stack.peek(); + if (currentIndent >= blockInfo.getIndent()) { + if (currentIndent == blockInfo.getIndent()) { + closeBlock(builder, stack.pop().getMarker()); } passEOLsAndIndents(builder); - stack.push(Pair.create(currentIndent, builder.mark())); + stack.push(new BlockInfo(currentIndent, builder.mark())); } } eolSeen = false; @@ -98,7 +97,7 @@ public abstract class IndentationParser implements PsiParser { startLineMarker.drop(); } while (!stack.isEmpty()){ - closeBlock(builder, stack.pop().second); + closeBlock(builder, stack.pop().getMarker()); } documentMarker.done(myDocumentType); @@ -121,4 +120,24 @@ public abstract class IndentationParser implements PsiParser { tokenType = builder.getTokenType(); } } + + private static final class BlockInfo { + private final int myIndent; + @NotNull + private final PsiBuilder.Marker myMarker; + + private BlockInfo(final int indent, final @NotNull PsiBuilder.Marker marker) { + this.myIndent = indent; + this.myMarker = marker; + } + + public int getIndent() { + return myIndent; + } + + @NotNull + public PsiBuilder.Marker getMarker() { + return myMarker; + } + } } From 443b5d04f240c08f293e73de8ed9af999d2b9ff6 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Tue, 24 Jul 2012 17:58:47 +0400 Subject: [PATCH 15/25] fix: normalize delimiters of resource name keys in AndroidValueResourcesIndex --- .../android/AndroidValueResourcesIndex.java | 41 +++++++++++++++---- .../LocalResourceManager.java | 5 ++- .../resourceManagers/ResourceManager.java | 7 ++-- .../testData/resNavigation/dist_delims.xml | 3 ++ .../src/p1/p2/JavaFileNavigation12.java | 7 ++++ .../AndroidResourcesLineMarkerTest.java | 5 +++ 6 files changed, 56 insertions(+), 12 deletions(-) create mode 100644 plugins/android/testData/resNavigation/dist_delims.xml create mode 100644 plugins/android/testData/resNavigation/src/p1/p2/JavaFileNavigation12.java diff --git a/plugins/android/src/org/jetbrains/android/AndroidValueResourcesIndex.java b/plugins/android/src/org/jetbrains/android/AndroidValueResourcesIndex.java index 455dd76f0e83..de2f9d0309ac 100644 --- a/plugins/android/src/org/jetbrains/android/AndroidValueResourcesIndex.java +++ b/plugins/android/src/org/jetbrains/android/AndroidValueResourcesIndex.java @@ -56,9 +56,9 @@ public class AndroidValueResourcesIndex extends FileBasedIndexExtensionemptySet()); - addEntryToMap(entry, createTypeMarkerEntry(entry.getType()), result); - addEntryToMap(entry, createTypeNameMarkerEntry(entry.getType(), entry.getName()), result); + result.put(createKey(entry), Collections.emptySet()); + addEntryToMap(entry, createTypeMarkerKey(entry.getType()), result); + addEntryToMap(entry, createTypeNameMarkerKey(entry.getType(), entry.getName()), result); } }); @@ -76,12 +76,39 @@ public class AndroidValueResourcesIndex extends FileBasedIndexExtension myKeyDescriptor = new KeyDescriptor() { diff --git a/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java b/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java index 8f62c4398bca..901edeef9843 100644 --- a/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java +++ b/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java @@ -139,11 +139,12 @@ public class LocalResourceManager extends ResourceManager { final GlobalSearchScope scope = GlobalSearchScope.projectScope(myModule.getProject()); for (ResourceType resourceType : AndroidResourceUtil.ALL_VALUE_RESOURCE_TYPES) { - final ResourceEntry typeMarkerEntry = AndroidValueResourcesIndex.createTypeMarkerEntry(resourceType.getName()); + final ResourceEntry typeMarkerEntry = AndroidValueResourcesIndex.createTypeMarkerKey(resourceType.getName()); for (Set entrySet : index.getValues(AndroidValueResourcesIndex.INDEX_ID, typeMarkerEntry, scope)) { for (ResourceEntry entry : entrySet) { - final Collection files = index.getContainingFiles(AndroidValueResourcesIndex.INDEX_ID, entry, scope); + final Collection files = + index.getContainingFiles(AndroidValueResourcesIndex.INDEX_ID, AndroidValueResourcesIndex.createKey(entry), scope); for (VirtualFile file : files) { Set resourcesInFile = file2Types.get(file); diff --git a/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java b/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java index 7578b7a70707..4074d08af222 100644 --- a/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java +++ b/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java @@ -281,13 +281,14 @@ public abstract class ResourceManager { } final FileBasedIndex index = FileBasedIndex.getInstance(); - final ResourceEntry typeMarkerEntry = AndroidValueResourcesIndex.createTypeMarkerEntry(resourceType); + final ResourceEntry typeMarkerEntry = AndroidValueResourcesIndex.createTypeMarkerKey(resourceType); final GlobalSearchScope scope = GlobalSearchScope.allScope(myModule.getProject()); final Map> file2resourceSet = new HashMap>(); for (Set entrySet : index.getValues(AndroidValueResourcesIndex.INDEX_ID, typeMarkerEntry, scope)) { for (ResourceEntry entry : entrySet) { - final Collection files = index.getContainingFiles(AndroidValueResourcesIndex.INDEX_ID, entry, scope); + final Collection files = + index.getContainingFiles(AndroidValueResourcesIndex.INDEX_ID, AndroidValueResourcesIndex.createKey(entry), scope); for (VirtualFile file : files) { Set resourcesInFile = file2resourceSet.get(file); @@ -438,7 +439,7 @@ public abstract class ResourceManager { final Collection files = FileBasedIndex.getInstance() .getContainingFiles(AndroidValueResourcesIndex.INDEX_ID, - AndroidValueResourcesIndex.createTypeNameMarkerEntry(resourceType, resourceName), + AndroidValueResourcesIndex.createTypeNameMarkerKey(resourceType, resourceName), GlobalSearchScope.allScope(myModule.getProject())); if (files.size() == 0) { diff --git a/plugins/android/testData/resNavigation/dist_delims.xml b/plugins/android/testData/resNavigation/dist_delims.xml new file mode 100644 index 000000000000..212cfb7a77c5 --- /dev/null +++ b/plugins/android/testData/resNavigation/dist_delims.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/plugins/android/testData/resNavigation/src/p1/p2/JavaFileNavigation12.java b/plugins/android/testData/resNavigation/src/p1/p2/JavaFileNavigation12.java new file mode 100644 index 000000000000..2a8be34e10a4 --- /dev/null +++ b/plugins/android/testData/resNavigation/src/p1/p2/JavaFileNavigation12.java @@ -0,0 +1,7 @@ +package p1.p2; + +class Java { + public void g() { + int a = R.string.dist_delims; + } +} \ No newline at end of file diff --git a/plugins/android/testSrc/org/jetbrains/android/AndroidResourcesLineMarkerTest.java b/plugins/android/testSrc/org/jetbrains/android/AndroidResourcesLineMarkerTest.java index 0db7679853aa..5c79c87efc22 100644 --- a/plugins/android/testSrc/org/jetbrains/android/AndroidResourcesLineMarkerTest.java +++ b/plugins/android/testSrc/org/jetbrains/android/AndroidResourcesLineMarkerTest.java @@ -73,6 +73,11 @@ public class AndroidResourcesLineMarkerTest extends AndroidTestCase { doJavaFileNavigationTest(1, true, XmlAttributeValue.class); } + public void testJavaFileNavigation12() throws Exception { + myFixture.copyFileToProject(BASE_PATH + "dist_delims.xml", "res/values/strings12.xml"); + doJavaFileNavigationTest(1, true, XmlAttributeValue.class); + } + private void doJavaFileNavigationTest(int expectedTargets, boolean expectedEnabled, @Nullable Class targetElementClass) From f046b9fda6730a28ee7a809385af884687d7920a Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Wed, 25 Jul 2012 13:39:14 +0400 Subject: [PATCH 16/25] IDEA-89238 fix text messages: use 'library' instead of 'library project' --- plugins/android/resources/messages/AndroidBundle.properties | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/android/resources/messages/AndroidBundle.properties b/plugins/android/resources/messages/AndroidBundle.properties index a991cb90d471..b6f65eec3731 100644 --- a/plugins/android/resources/messages/AndroidBundle.properties +++ b/plugins/android/resources/messages/AndroidBundle.properties @@ -171,7 +171,7 @@ android.wizard.specify.tested.module.error=Please specify tested module android.wizard.tested.module.without.facet.error=Tested module must contain Android facet android.wizard.cannot.find.module.parent.dir.error=Cannot find module parent directory: {0} android.wizard.invalid.sdk.error=Android SDK is invalid -android.facet.editor.is.library.checkbox=&Is Library project +android.facet.editor.is.library.checkbox=Li&brary module android.run.sdk.manager.action.text=SDK Manager android.run.avd.manager.action.text=AVD Manager android.choose.sdk.label=Please choose Android SDK location @@ -220,7 +220,7 @@ android.keystore.password.label=Pa&ssword: android.keystore.confirm.password.label=C&onfirm: android.export.package.new.key.alias.label=&Alias: android.key.password.label=Pa&ssword: -android.cannot.run.library.project.error=The module cannot be Android library project +android.cannot.run.library.project.error=The module cannot be Android library android.compilation.error.specify.platform=[{0}] Android SDK is not specified or cannot be parsed android.compilation.error.manifest.not.found=[{0}] AndroidManifest.xml file not found. Please, check Android facet settings. android.compilation.error.apt.gen.not.specified=AAPT destination directory not specified for module {0} @@ -389,7 +389,7 @@ android.lint.inspections.use.sparsearray=HashMap can be replaced with SparseArra android.lint.inspections.value.of=Should use 'valueOf' instead of 'new' android.lint.inspections.multiple.uses.sdk=Multiple elements in the manifest android.lint.inspections.uses.min.sdk=Minimum SDK and target SDK attributes not defined -android.lint.inspections.custom.view=Using custom namespace attributes in a library project +android.lint.inspections.custom.view=Using custom namespace attributes in a library module android.lint.inspections.proguard.split.config=Proguard.cfg file contains generic Android rules android.lint.inspections.sd.card.path=Hardcoded reference to /sdcard android.lint.inspections.world,writable.files=openFileOutput() call passing MODE_WORLD_WRITEABLE From be4ec708acdaefe5f9db62c21631299ba56dd58a Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Wed, 25 Jul 2012 13:43:24 +0400 Subject: [PATCH 17/25] IDEA-89236 do not show error message if debugging was cancelled --- .../src/org/jetbrains/android/run/AndroidDebugRunner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/android/src/org/jetbrains/android/run/AndroidDebugRunner.java b/plugins/android/src/org/jetbrains/android/run/AndroidDebugRunner.java index c97c498aea13..9d51584f12ee 100644 --- a/plugins/android/src/org/jetbrains/android/run/AndroidDebugRunner.java +++ b/plugins/android/src/org/jetbrains/android/run/AndroidDebugRunner.java @@ -102,7 +102,7 @@ public class AndroidDebugRunner extends DefaultProgramRunner { launcher.setRunDescriptor(runDescriptor); } if (runDescriptor == null) { - throw new ExecutionException("Can't run an application"); + return null; } tryToCloseOldSessions(executor, project); runningState.getProcessHandler().putUserData(ANDROID_PROCESS_HANDLER, runDescriptor); From 11bbb7a4f9e1228bf331f6132b65971c2e46c365 Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Wed, 25 Jul 2012 14:52:57 +0400 Subject: [PATCH 18/25] invoke getFieldNameByResourceName when renaming R field --- .../android/AndroidRenameResourceProcessor.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/AndroidRenameResourceProcessor.java b/plugins/android/src/org/jetbrains/android/AndroidRenameResourceProcessor.java index 9fd22af565a0..5457ad25899b 100644 --- a/plugins/android/src/org/jetbrains/android/AndroidRenameResourceProcessor.java +++ b/plugins/android/src/org/jetbrains/android/AndroidRenameResourceProcessor.java @@ -125,8 +125,10 @@ public class AndroidRenameResourceProcessor extends RenamePsiElementProcessor { } } String name = AndroidResourceUtil.getResourceNameByReferenceText(newName); - for (PsiField resField : AndroidResourceUtil.findIdFields(value)) { - allRenames.put(resField, name); + if (name != null) { + for (PsiField resField : AndroidResourceUtil.findIdFields(value)) { + allRenames.put(resField, AndroidResourceUtil.getFieldNameByResourceName(name)); + } } } @@ -186,7 +188,7 @@ public class AndroidRenameResourceProcessor extends RenamePsiElementProcessor { } PsiField[] resFields = AndroidResourceUtil.findResourceFieldsForValueResource(tag, false); for (PsiField resField : resFields) { - allRenames.put(resField, newName); + allRenames.put(resField, AndroidResourceUtil.getFieldNameByResourceName(newName)); } } @@ -226,7 +228,7 @@ public class AndroidRenameResourceProcessor extends RenamePsiElementProcessor { PsiField[] resFields = AndroidResourceUtil.findResourceFieldsForFileResource(file, false); for (PsiField resField : resFields) { String newFieldName = AndroidCommonUtils.getResourceName(type, newName); - allRenames.put(resField, newFieldName); + allRenames.put(resField, AndroidResourceUtil.getFieldNameByResourceName(newFieldName)); } } From 2f1bc8b1b4f145ca6682d80e8772043382c5872a Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Wed, 25 Jul 2012 14:54:55 +0400 Subject: [PATCH 19/25] check if the new name looks like file (contains point in name), todo --- .../android/dom/converters/AndroidResourceReference.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java b/plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java index 42bf53f9169f..69099c57db4f 100644 --- a/plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java +++ b/plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java @@ -85,9 +85,14 @@ public class AndroidResourceReference extends PsiReferenceBase.Poly ResourceValue value = myValue.getValue(); assert value != null; String resType = value.getResourceType(); + if (resType != null && newElementName != null) { - myValue.setValue(ResourceValue.referenceTo(value.getPrefix(), value.getPackage(), resType, - AndroidCommonUtils.getResourceName(resType, newElementName))); + // todo: do not allow new value resource name to contain dot, because it is impossible to check if it file or value otherwise + + final String newResName = newElementName.contains(".") // it is file + ? AndroidCommonUtils.getResourceName(resType, newElementName) + : newElementName; + myValue.setValue(ResourceValue.referenceTo(value.getPrefix(), value.getPackage(), resType, newResName)); } return myValue.getXmlTag(); } From 9b81bb32155cdc66071b52b07f1a19d3573fe1cb Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Wed, 25 Jul 2012 14:55:23 +0400 Subject: [PATCH 20/25] adjust problematic tests --- .../org/jetbrains/android/dom/AndroidLibraryProjectTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLibraryProjectTest.java b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLibraryProjectTest.java index 047b940266aa..3783096f7ee2 100644 --- a/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLibraryProjectTest.java +++ b/plugins/android/testSrc/org/jetbrains/android/dom/AndroidLibraryProjectTest.java @@ -240,13 +240,13 @@ public class AndroidLibraryProjectTest extends UsefulTestCase { myFixture.copyFileToProject(BASE_PATH + "FindUsagesClass1.java", "app/src/p1/p2/lib/Class.java"); myFixture.copyFileToProject(BASE_PATH + "FindUsagesClass1.java", "lib/src/p1/p2/lib/Class.java"); myFixture.copyFileToProject(BASE_PATH + "FindUsagesStyles.xml", "app/res/values/styles.xml"); - myFixture.copyFileToProject(BASE_PATH + "FindUsagesStyles2.xml", "lib/res/values/styles2.xml"); + //myFixture.copyFileToProject(BASE_PATH + "FindUsagesStyles2.xml", "lib/res/values/styles2.xml"); myFixture.copyFileToProject(BASE_PATH + "picture1.png", "lib/res/drawable/picture1.png"); myFixture.copyFileToProject("R.java", "app/src/p1/p2/R.java"); myFixture.copyFileToProject(BASE_PATH + "LibR.java", "app/src/p1/p2/lib/R.java"); myFixture.copyFileToProject(BASE_PATH + "LibR.java", "lib/src/p1/p2/lib/R.java"); Collection references = findCodeUsages(getTestName(false) + "." + extension, dir); - assertEquals(buildFileList(references), 6, references.size()); + assertEquals(buildFileList(references), 5, references.size()); } private List findCodeUsages(String path, String dir) throws Throwable { From 53e8e0f03893f0d35d85e6a39b48b884a996bcfa Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Thu, 26 Jul 2012 13:31:36 +0400 Subject: [PATCH 21/25] IDEA-88983 --- .../src/com/intellij/android/designer/model/ModelParser.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java b/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java index ac1813d70e12..c4ed59990c25 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java +++ b/plugins/android-designer/src/com/intellij/android/designer/model/ModelParser.java @@ -191,7 +191,9 @@ public class ModelParser extends XmlRecursiveElementVisitor { addComponent(newComponent, ViewsMetaManager.getInstance(newComponent.getTag().getProject()), propertyParser); } - IdManager.get(container).ensureIds(newComponent); + if (!(newComponent instanceof RadViewContainer)) { + IdManager.get(container).ensureIds(newComponent); + } } private static void addComponent(RadViewComponent parentComponent, From 9be2fdb16e877fce82fe1fbc8686012d2c47b6ff Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Thu, 26 Jul 2012 11:35:42 +0200 Subject: [PATCH 22/25] Fix tests on XP --- .../openapi/util/io/FileAttributesReadingTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/platform/util/testSrc/com/intellij/openapi/util/io/FileAttributesReadingTest.java b/platform/util/testSrc/com/intellij/openapi/util/io/FileAttributesReadingTest.java index 0ac50050a0d1..41bd996d02b1 100644 --- a/platform/util/testSrc/com/intellij/openapi/util/io/FileAttributesReadingTest.java +++ b/platform/util/testSrc/com/intellij/openapi/util/io/FileAttributesReadingTest.java @@ -101,6 +101,8 @@ public class FileAttributesReadingTest { @Test public void linkToFile() throws Exception { + assumeTrue(SystemInfo.areSymLinksSupported); + final File file = FileUtil.createTempFile(myTempDirectory, "test.", ".txt", true); FileUtil.writeToFile(file, myTestData); assertTrue(file.setLastModified(file.lastModified() - 5000)); @@ -120,6 +122,8 @@ public class FileAttributesReadingTest { @Test public void doubleLink() throws Exception { + assumeTrue(SystemInfo.areSymLinksSupported); + final File file = FileUtil.createTempFile(myTempDirectory, "test.", ".txt", true); FileUtil.writeToFile(file, myTestData); assertTrue(file.setLastModified(file.lastModified() - 5000)); @@ -140,6 +144,8 @@ public class FileAttributesReadingTest { @Test public void linkToDirectory() throws Exception { + assumeTrue(SystemInfo.areSymLinksSupported); + final File file = FileUtil.createTempDirectory(myTempDirectory, "test.", ".tmp"); if (SystemInfo.isUnix) assertTrue(file.setWritable(false, false)); assertTrue(file.setLastModified(file.lastModified() - 5000)); @@ -158,6 +164,8 @@ public class FileAttributesReadingTest { @Test public void missingLink() throws Exception { + assumeTrue(SystemInfo.areSymLinksSupported); + final File file = FileUtil.createTempFile(myTempDirectory, "test.", ".txt", false); final File link = IoTestUtil.createTempLink(file.getPath(), new File(myTempDirectory, "link").getPath()); From bb37cd20b9694fec8c59126f37d852bda7972daa Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 25 Jul 2012 16:22:00 +0400 Subject: [PATCH 23/25] cleanup --- plugins/devkit/src/dom/Action.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/devkit/src/dom/Action.java b/plugins/devkit/src/dom/Action.java index bd03efde2566..89f354604d07 100644 --- a/plugins/devkit/src/dom/Action.java +++ b/plugins/devkit/src/dom/Action.java @@ -64,7 +64,7 @@ public interface Action extends DomElement { * @return the value of the class child. */ @NotNull - @com.intellij.util.xml.Attribute ("class") + @Attribute ("class") @Required @ExtendClass(value = "com.intellij.openapi.actionSystem.AnAction", instantiatable = true, allowNonPublic = true, allowAbstract = false, allowInterface = false) From b50491d586f82079e5026b96bba5dd79c10fbb76 Mon Sep 17 00:00:00 2001 From: Dmitry Avdeev Date: Wed, 25 Jul 2012 19:29:25 +0400 Subject: [PATCH 24/25] Remote run configuration UI compacted --- .../execution/remote/RemoteConfigurable.form | 60 ++++++++++--------- .../execution/remote/RemoteConfigurable.java | 8 +-- .../ui/ConfigurationArgumentsHelpArea.form | 15 +++-- .../ui/ConfigurationArgumentsHelpArea.java | 4 +- .../ui/ConfigurationModuleSelector.java | 11 +++- .../src/messages/ExecutionBundle.properties | 6 +- 6 files changed, 60 insertions(+), 44 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.form b/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.form index b9334af6915b..94cd8b27de81 100644 --- a/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.form +++ b/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.form @@ -1,8 +1,9 @@

- + + - + @@ -11,7 +12,6 @@ - @@ -19,25 +19,17 @@ - + - + - - - - - - - - - + @@ -53,18 +45,26 @@ - + + + + + + + + + - + @@ -79,7 +79,7 @@ - + @@ -141,34 +141,38 @@ - - + - + + + - - + - + + + - - + + + - - + - + + + diff --git a/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java b/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java index 5179eab1b1df..cfcf4e1d29a9 100644 --- a/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java +++ b/java/execution/impl/src/com/intellij/execution/remote/RemoteConfigurable.java @@ -128,20 +128,20 @@ public class RemoteConfigurable extends SettingsEditor { myAddressField.addFocusListener(fieldFocusListener); myPortField.addFocusListener(fieldFocusListener); - myModuleSelector = new ConfigurationModuleSelector(project, myModule.getComponent()); + myModuleSelector = new ConfigurationModuleSelector(project, myModule.getComponent(), ""); } public void applyEditorTo(@NotNull final RemoteConfiguration configuration) throws ConfigurationException { configuration.HOST = (myHostField.isEditable() ? myHostField.getText() : myHostName).trim(); - if ("".equals(configuration.HOST)) { + if (configuration.HOST != null && configuration.HOST.isEmpty()) { configuration.HOST = null; } configuration.PORT = myPortField.getText().trim(); - if ("".equals(configuration.PORT)) { + if (configuration.PORT != null && configuration.PORT.isEmpty()) { configuration.PORT = null; } configuration.SHMEM_ADDRESS = myAddressField.getText().trim(); - if ("".equals(configuration.SHMEM_ADDRESS)) { + if (configuration.SHMEM_ADDRESS != null && configuration.SHMEM_ADDRESS.isEmpty()) { configuration.SHMEM_ADDRESS = null; } configuration.USE_SOCKET_TRANSPORT = myRbSocket.isSelected(); diff --git a/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.form b/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.form index 5b0bfbf163b6..2a714c767bcb 100644 --- a/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.form +++ b/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.form @@ -3,14 +3,14 @@ - + - + @@ -19,9 +19,14 @@ - + + + - + + + + @@ -29,7 +34,7 @@ - + diff --git a/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.java b/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.java index 5bb5ee45eac5..ef2bebd366bb 100644 --- a/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.java +++ b/java/execution/impl/src/com/intellij/execution/ui/ConfigurationArgumentsHelpArea.java @@ -19,6 +19,7 @@ import com.intellij.execution.ExecutionBundle; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.ide.CopyPasteManager; import com.intellij.openapi.ui.FixedSizeButton; +import com.intellij.ui.IdeBorderFactory; import com.intellij.ui.PopupHandler; import com.intellij.util.PlatformIcons; @@ -37,6 +38,7 @@ public class ConfigurationArgumentsHelpArea extends JPanel { public ConfigurationArgumentsHelpArea() { super(new BorderLayout()); add(myPanel); + setBorder(IdeBorderFactory.createEmptyBorder(10, 0, 0, 0)); final DefaultActionGroup group = new DefaultActionGroup(); group.add(new MyCopyAction()); @@ -64,7 +66,7 @@ public class ConfigurationArgumentsHelpArea extends JPanel { public void setToolbarVisible() { myToolbarPanel.setVisible(true); } - + private static ActionPopupMenu createPopupMenu(DefaultActionGroup group) { return ActionManager.getInstance().createActionPopupMenu(ActionPlaces.UNKNOWN, group); } diff --git a/java/execution/impl/src/com/intellij/execution/ui/ConfigurationModuleSelector.java b/java/execution/impl/src/com/intellij/execution/ui/ConfigurationModuleSelector.java index 6150292913fe..f63e679684ff 100644 --- a/java/execution/impl/src/com/intellij/execution/ui/ConfigurationModuleSelector.java +++ b/java/execution/impl/src/com/intellij/execution/ui/ConfigurationModuleSelector.java @@ -35,8 +35,8 @@ import java.util.Comparator; import java.util.List; public class ConfigurationModuleSelector { - private static final String NO_MODULE = ""; + private final String myNoModule; private final Project myProject; private final JComboBox myModulesList; private final SortedComboBoxModel myModules = new SortedComboBoxModel(new Comparator() { @@ -49,6 +49,11 @@ public class ConfigurationModuleSelector { }); public ConfigurationModuleSelector(final Project project, final JComboBox modulesList) { + this(project, modulesList, ""); + } + + public ConfigurationModuleSelector(final Project project, final JComboBox modulesList, String noModule) { + myNoModule = noModule; myProject = project; myModulesList = modulesList; new ComboboxSpeedSearch(modulesList){ @@ -56,7 +61,7 @@ public class ConfigurationModuleSelector { if (element instanceof Module){ return ((Module)element).getName(); } else if (element == null) { - return NO_MODULE; + return myNoModule; } return super.getElementText(element); } @@ -71,7 +76,7 @@ public class ConfigurationModuleSelector { setText(module.getName()); } else if (value == null) { - setText(NO_MODULE); + setText(myNoModule); } } }); diff --git a/platform/platform-resources-en/src/messages/ExecutionBundle.properties b/platform/platform-resources-en/src/messages/ExecutionBundle.properties index 71c7b5cabc4d..d03c6b7f3810 100644 --- a/platform/platform-resources-en/src/messages/ExecutionBundle.properties +++ b/platform/platform-resources-en/src/messages/ExecutionBundle.properties @@ -252,11 +252,11 @@ remote.configuration.socket.radio=Socket remote.configuration.shared.memory.address.label=Shared memory address: remote.configuration.port.label=Port: remote.configuration.host.label=Host: -remote.configuration.remote.debugging.allows.you.to.connect.idea.to.a.running.jvm.label=&Remote debugging allows you to connect IDEA to a running JVM started with the following command line arguments +remote.configuration.remote.debugging.allows.you.to.connect.idea.to.a.running.jvm.label=&Command line arguments for running remote JVM standard.runner.description=Run selected configuration environment.variables.helper.use.arguments.label=Use the following command line arguments for running remote JVM -environment.variables.helper.use.arguments.jdk13.label=If the &application runs on JDK 1.3.x or earlier, use following arguments -environment.variables.helper.use.arguments.jdk14.label=If the &application runs on JDK 1.4.x, use following arguments +environment.variables.helper.use.arguments.jdk13.label=For JDK 1.3.x or earlier +environment.variables.helper.use.arguments.jdk14.label=For JDK 1.4.x select.run.configuration.for.item.action.name=Select ''{0}'' save.run.configuration.for.item.action.name=Save ''{0}'' junit.runing.info.status.done.count=Done: {0} From 6f2672ab6efbbb198c9b7662580e0e239d3bc7fd Mon Sep 17 00:00:00 2001 From: Alexander Lobas Date: Thu, 26 Jul 2012 14:38:11 +0400 Subject: [PATCH 25/25] Renderer --- .../android/designer/componentTree/AndroidTreeDecorator.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java b/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java index 1c4787fe2304..605a71f23561 100644 --- a/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java +++ b/plugins/android-designer/src/com/intellij/android/designer/componentTree/AndroidTreeDecorator.java @@ -24,7 +24,6 @@ import com.intellij.designer.model.RadComponent; import com.intellij.designer.palette.DefaultPaletteItem; import com.intellij.designer.propertyTable.Property; import com.intellij.designer.propertyTable.PropertyTable; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.SimpleColoredComponent; import com.intellij.ui.SimpleTextAttributes; @@ -90,8 +89,6 @@ public final class AndroidTreeDecorator implements TreeComponentDecorator { } } - private static final Logger LOG = Logger.getInstance("#com.intellij.android.designer.componentTree"); - @Nullable private static String getPropertyValue(RadComponent component, String name) { if (component.getProperties() == null) {