From 7817391f730544f5ee3dbb0cc9a23d932293533f Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 7 Feb 2012 10:20:35 +0100 Subject: [PATCH 01/12] walk only the necessary files when searching for string in a custom scope --- .../com/intellij/find/impl/FindInProjectUtil.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java index 14d7b9b9c5e5..1e5bdc1ddfd6 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindInProjectUtil.java @@ -386,7 +386,7 @@ public class FindInProjectUtil { public boolean processFile(VirtualFile virtualFile) { if (!virtualFile.isDirectory() && (fileMaskRegExp == null || fileMaskRegExp.matcher(virtualFile.getName()).matches()) && - (customScope == null || customScope.contains(virtualFile))) { + customScope.contains(virtualFile)) { final PsiFile psiFile = psiManager.findFile(virtualFile); if (psiFile != null && !filesForFastWordSearch.contains(psiFile)) { myFiles.add(psiFile); @@ -403,10 +403,10 @@ public class FindInProjectUtil { if (psiDirectory == null) { boolean success = fileIndex.iterateContent(iterator); - if (success && customScope instanceof GlobalSearchScope && ((GlobalSearchScope)customScope).isSearchInLibraries()) { + if (success && customScope.isSearchInLibraries()) { OrderEnumerator enumerator = module == null ? OrderEnumerator.orderEntries(project) : OrderEnumerator.orderEntries(module); final VirtualFile[] librarySources = enumerator.withoutModuleSourceEntries().withoutDepModules().getSourceRoots(); - iterateAll(librarySources, (GlobalSearchScope)customScope, iterator); + iterateAll(librarySources, customScope, iterator); } } else { @@ -440,11 +440,14 @@ public class FindInProjectUtil { return true; } - @Nullable + @NotNull private static GlobalSearchScope toGlobal(Project project, @Nullable SearchScope scope) { - if (scope instanceof GlobalSearchScope || scope == null) { + if (scope instanceof GlobalSearchScope) { return (GlobalSearchScope)scope; } + if (scope == null) { + return GlobalSearchScope.projectScope(project); + } Set files = new HashSet(); for (PsiElement element : ((LocalSearchScope)scope).getScope()) { PsiFile file = element.getContainingFile(); @@ -472,7 +475,7 @@ public class FindInProjectUtil { ? moduleContentScope(module) : customScope instanceof GlobalSearchScope ? (GlobalSearchScope)customScope - : GlobalSearchScope.projectScope(project); + : toGlobal(project, customScope); Set keys = new THashSet(30); Set resultFiles = new THashSet(); From 622a36b4dade6e397a5c0943c767517a99e3b888 Mon Sep 17 00:00:00 2001 From: "Rustam.Vishnyakov" Date: Tue, 7 Feb 2012 13:21:15 +0400 Subject: [PATCH 02/12] Groovy custom folding regions --- .../lang/folding/GroovyFoldingBuilder.java | 40 +++++++++++++------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/folding/GroovyFoldingBuilder.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/folding/GroovyFoldingBuilder.java index ef7a8c26f90f..574c5c9d4e1b 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/folding/GroovyFoldingBuilder.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/folding/GroovyFoldingBuilder.java @@ -18,7 +18,7 @@ package org.jetbrains.plugins.groovy.lang.folding; import com.intellij.codeInsight.folding.JavaCodeFoldingSettings; import com.intellij.lang.ASTNode; -import com.intellij.lang.folding.FoldingBuilder; +import com.intellij.lang.folding.CustomFoldingBuilder; import com.intellij.lang.folding.FoldingDescriptor; import com.intellij.openapi.editor.Document; import com.intellij.openapi.editor.FoldingGroup; @@ -33,6 +33,7 @@ import com.intellij.psi.tree.IElementType; import com.intellij.util.containers.hash.HashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.lexer.TokenSets; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; @@ -43,23 +44,23 @@ import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefini import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.imports.GrImportStatement; import org.jetbrains.plugins.groovy.lang.psi.util.GrStringUtil; -import java.util.ArrayList; import java.util.List; import java.util.Set; /** * @author ilyas */ -public class GroovyFoldingBuilder implements FoldingBuilder, GroovyElementTypes, DumbAware { +public class GroovyFoldingBuilder extends CustomFoldingBuilder implements GroovyElementTypes, DumbAware { - @NotNull - public FoldingDescriptor[] buildFoldRegions(@NotNull ASTNode node, @NotNull Document document) { - List descriptors = new ArrayList(); - appendDescriptors(node.getPsi(), descriptors, new HashSet()); - return descriptors.toArray(new FoldingDescriptor[descriptors.size()]); + @Override + protected void buildLanguageFoldRegions(@NotNull List descriptors, + @NotNull PsiElement root, + @NotNull Document document, + boolean quick) { + appendDescriptors(root, descriptors, new HashSet()); } - private static void appendDescriptors(PsiElement element, List descriptors, Set usedComments) { + private void appendDescriptors(PsiElement element, List descriptors, Set usedComments) { ASTNode node = element.getNode(); if (node == null) return; IElementType type = node.getElementType(); @@ -70,13 +71,13 @@ public class GroovyFoldingBuilder implements FoldingBuilder, GroovyElementTypes, } } // comments - if ((type.equals(mML_COMMENT) || type.equals(GROOVY_DOC_COMMENT)) && + if (((type.equals(mML_COMMENT) && !isCustomRegionStart(node)) || type.equals(GROOVY_DOC_COMMENT)) && isMultiline(element) && isWellEndedComment(element)) { descriptors.add(new FoldingDescriptor(node, node.getTextRange())); } - if (type.equals(mSL_COMMENT) && !usedComments.contains(element)) { + if (type.equals(mSL_COMMENT) && !isCustomRegionStart(node) && !usedComments.contains(element)) { usedComments.add(element); PsiElement end = null; for (PsiElement current = element.getNextSibling(); current != null; current = current.getNextSibling()) { @@ -214,7 +215,8 @@ public class GroovyFoldingBuilder implements FoldingBuilder, GroovyElementTypes, return text.contains("\n") || text.contains("\r") || text.contains("\r\n"); } - public String getPlaceholderText(@NotNull ASTNode node) { + @Override + protected String getLanguagePlaceholderText(@NotNull ASTNode node, @NotNull TextRange range) { final IElementType elemType = node.getElementType(); if (BLOCK_SET.contains(elemType) || elemType == CLOSABLE_BLOCK) { return "{...}"; @@ -236,7 +238,8 @@ public class GroovyFoldingBuilder implements FoldingBuilder, GroovyElementTypes, return null; } - public boolean isCollapsedByDefault(@NotNull ASTNode node) { + @Override + protected boolean isRegionCollapsedByDefault(@NotNull ASTNode node) { final JavaCodeFoldingSettings settings = JavaCodeFoldingSettings.getInstance(); if ( node.getElementType() == IMPORT_STATEMENT ){ return settings.isCollapseImports(); @@ -280,4 +283,15 @@ public class GroovyFoldingBuilder implements FoldingBuilder, GroovyElementTypes, isMultiline(node.getPsi()) && GrStringUtil.isWellEndedString(node.getPsi()); } + + @Override + protected boolean isCustomFoldingCandidate(ASTNode node) { + return node.getElementType() == GroovyTokenTypes.mSL_COMMENT; + } + + @Override + protected boolean isCustomFoldingRoot(ASTNode node) { + IElementType nodeType = node.getElementType(); + return nodeType == GroovyElementTypes.CLASS_DEFINITION || nodeType == GroovyElementTypes.OPEN_BLOCK; + } } From df89e0c0f5096628dbc4caf41690608fa36473a4 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 7 Feb 2012 13:50:49 +0400 Subject: [PATCH 03/12] added extension to contribute to compile server classpath; jps-javaee plugin moved to JavaEE plugin --- .idea/modules.xml | 1 - .../compiler/CompileServerManager.java | 3 + .../compiler/server/CompileServerPlugin.java | 37 ++++++++++ .../impl/CompileServerClasspathManager.java | 74 +++++++++++++++++++ .../jps/server/ClasspathBootstrap.java | 6 +- jps/plugins/gwt/jps-gwt.iml | 1 - jps/plugins/javaee/jps-javaee.iml | 14 ---- ...ins.jps.artifacts.LayoutElementTypeService | 2 - .../org.jetbrains.jps.idea.FacetTypeService | 3 - .../jetbrains/jps/javaee/EjbFacetType.groovy | 10 --- .../jps/javaee/JavaeeAppFacetType.groovy | 10 --- .../jetbrains/jps/javaee/JavaeeFacet.groovy | 11 --- .../JavaeeFacetClassesElementType.groovy | 24 ------ .../javaee/JavaeeFacetResourcesElement.groovy | 32 -------- .../JavaeeFacetResourcesElementType.groovy | 22 ------ .../jps/javaee/JavaeeFacetTypeBase.groovy | 40 ---------- .../jetbrains/jps/javaee/WebFacetType.groovy | 18 ----- resources/src/idea/RichPlatformPlugin.xml | 1 + 18 files changed, 116 insertions(+), 193 deletions(-) create mode 100644 java/compiler/impl/src/com/intellij/compiler/server/CompileServerPlugin.java create mode 100644 java/compiler/impl/src/com/intellij/compiler/server/impl/CompileServerClasspathManager.java delete mode 100644 jps/plugins/javaee/jps-javaee.iml delete mode 100644 jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.artifacts.LayoutElementTypeService delete mode 100644 jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.idea.FacetTypeService delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/EjbFacetType.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeAppFacetType.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacet.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetClassesElementType.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElement.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElementType.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetTypeBase.groovy delete mode 100644 jps/plugins/javaee/src/org/jetbrains/jps/javaee/WebFacetType.groovy diff --git a/.idea/modules.xml b/.idea/modules.xml index c95d45fbe908..9e15d0263725 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -60,7 +60,6 @@ - diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 3681465f1778..ffbcdd9586d9 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -17,6 +17,7 @@ package com.intellij.compiler; import com.intellij.ProjectTopics; import com.intellij.application.options.PathMacrosImpl; +import com.intellij.compiler.server.impl.CompileServerClasspathManager; import com.intellij.execution.ExecutionException; import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.process.OSProcessHandler; @@ -99,6 +100,7 @@ public class CompileServerManager implements ApplicationComponent{ private final ProjectManager myProjectManager; private static final int MAKE_TRIGGER_DELAY = 5 * 1000 /*5 seconds*/; private final Map myAutomakeFutures = new HashMap(); + private final CompileServerClasspathManager myClasspathManager = new CompileServerClasspathManager(); public CompileServerManager(final ProjectManager projectManager) { myProjectManager = projectManager; @@ -595,6 +597,7 @@ public class CompileServerManager implements ApplicationComponent{ cmdLine.addParameter("-classpath"); final List cp = ClasspathBootstrap.getCompileServerApplicationClasspath(); + cp.addAll(myClasspathManager.getCompileServerPluginsClasspath()); cmdLine.addParameter(classpathToString(cp)); diff --git a/java/compiler/impl/src/com/intellij/compiler/server/CompileServerPlugin.java b/java/compiler/impl/src/com/intellij/compiler/server/CompileServerPlugin.java new file mode 100644 index 000000000000..8a1775d27ab9 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/server/CompileServerPlugin.java @@ -0,0 +1,37 @@ +package com.intellij.compiler.server; + +import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.extensions.PluginAware; +import com.intellij.openapi.extensions.PluginDescriptor; +import com.intellij.util.xmlb.annotations.Attribute; + +/** + * @author nik + */ +public class CompileServerPlugin implements PluginAware { + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.compileServer.plugin"); + private PluginDescriptor myPluginDescriptor; + private String myJarPath; + + /** + * Specifies path to a jar file which should be added to the classpath of the compile server. The path is relative to the plugin 'lib' directory. + * In the development node the name of this file without extension is treated as a module name and the output directory of the module is added to the classpath. + */ + @Attribute("jar-path") + public String getJarPath() { + return myJarPath; + } + + public void setJarPath(String jarPath) { + myJarPath = jarPath; + } + + @Override + public final void setPluginDescriptor(PluginDescriptor pluginDescriptor) { + myPluginDescriptor = pluginDescriptor; + } + + public PluginDescriptor getPluginDescriptor() { + return myPluginDescriptor; + } +} diff --git a/java/compiler/impl/src/com/intellij/compiler/server/impl/CompileServerClasspathManager.java b/java/compiler/impl/src/com/intellij/compiler/server/impl/CompileServerClasspathManager.java new file mode 100644 index 000000000000..f1bd0abfc030 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/server/impl/CompileServerClasspathManager.java @@ -0,0 +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 com.intellij.compiler.server.impl; + +import com.intellij.compiler.server.CompileServerPlugin; +import com.intellij.ide.plugins.IdeaPluginDescriptor; +import com.intellij.ide.plugins.PluginManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.extensions.PluginId; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.util.PathUtil; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +/** + * @author nik + */ +public class CompileServerClasspathManager { + private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.server.impl.CompileServerClasspathManager"); + private List myCompileServerPluginsClasspath; + + public List getCompileServerPluginsClasspath() { + if (myCompileServerPluginsClasspath == null) { + myCompileServerPluginsClasspath = computeCompileServerPluginsClasspath(); + } + return myCompileServerPluginsClasspath; + } + + private static List computeCompileServerPluginsClasspath() { + final List classpath = new ArrayList(); + for (CompileServerPlugin serverPlugin : CompileServerPlugin.EP_NAME.getExtensions()) { + final PluginId pluginId = serverPlugin.getPluginDescriptor().getPluginId(); + final IdeaPluginDescriptor plugin = PluginManager.getPlugin(pluginId); + LOG.assertTrue(plugin != null, pluginId); + final File baseFile = plugin.getPath(); + if (baseFile.isFile()) { + classpath.add(baseFile); + } + else if (baseFile.isDirectory()) { + final String relativePath = serverPlugin.getJarPath(); + File jarFile = new File(new File(baseFile, "lib"), relativePath); + if (jarFile.exists()) { + classpath.add(jarFile); + } + else { + //development mode: add directory out/classes/production/ to classpath, assuming that jar-name is equal to module name + final String moduleName = FileUtil.getNameWithoutExtension(PathUtil.getFileName(relativePath)); + final File dir = new File(baseFile.getParentFile(), moduleName); + if (!dir.exists()) { + LOG.warn("Cannot add plugin " + pluginId + " to compile server classpath: " + jarFile.getAbsolutePath() + " and " + + dir.getAbsolutePath() + " don't exist"); + } + classpath.add(dir); + } + } + } + return classpath; + } +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java b/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java index d95a41544503..f520c8128d28 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ClasspathBootstrap.java @@ -82,11 +82,7 @@ public class ClasspathBootstrap { cp.add(getResourcePath(FileMonitor.class)); // jna-utils.jar cp.add(getResourcePath(ClassWriter.class)); // asm cp.add(getResourcePath(org.objectweb.asm.commons.EmptyVisitor.class)); // asm-commons - final File jpsModel = getResourcePath(MacroExpander.class); - cp.add(jpsModel); // jps-model - cp.add(new File(jpsModel.getParentFile(), "jps-javaee")); - cp.add(new File(jpsModel.getParentFile(), "jps-gwt")); - cp.add(new File(jpsModel.getParentFile(), "jps-jpa")); + cp.add(getResourcePath(MacroExpander.class)); // jps-model cp.add(getResourcePath(AlienFormFileException.class)); // forms-compiler cp.add(getResourcePath(GroovyException.class)); // groovy cp.add(getResourcePath(org.jdom.input.SAXBuilder.class)); // jdom diff --git a/jps/plugins/gwt/jps-gwt.iml b/jps/plugins/gwt/jps-gwt.iml index 621daa2f0ea8..704ab03cf56b 100644 --- a/jps/plugins/gwt/jps-gwt.iml +++ b/jps/plugins/gwt/jps-gwt.iml @@ -10,7 +10,6 @@ - diff --git a/jps/plugins/javaee/jps-javaee.iml b/jps/plugins/javaee/jps-javaee.iml deleted file mode 100644 index d67aceeddab5..000000000000 --- a/jps/plugins/javaee/jps-javaee.iml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.artifacts.LayoutElementTypeService b/jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.artifacts.LayoutElementTypeService deleted file mode 100644 index 45b2dc247bd9..000000000000 --- a/jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.artifacts.LayoutElementTypeService +++ /dev/null @@ -1,2 +0,0 @@ -org.jetbrains.jps.javaee.JavaeeFacetResourcesElementType -org.jetbrains.jps.javaee.JavaeeFacetClassesElementType \ No newline at end of file diff --git a/jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.idea.FacetTypeService b/jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.idea.FacetTypeService deleted file mode 100644 index 4b60ca861db8..000000000000 --- a/jps/plugins/javaee/src/META-INF/services/org.jetbrains.jps.idea.FacetTypeService +++ /dev/null @@ -1,3 +0,0 @@ -org.jetbrains.jps.javaee.WebFacetType -org.jetbrains.jps.javaee.EjbFacetType -org.jetbrains.jps.javaee.JavaeeAppFacetType \ No newline at end of file diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/EjbFacetType.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/EjbFacetType.groovy deleted file mode 100644 index 96fa9b90232e..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/EjbFacetType.groovy +++ /dev/null @@ -1,10 +0,0 @@ -package org.jetbrains.jps.javaee - -/** - * @author nik - */ -class EjbFacetType extends JavaeeFacetTypeBase { - EjbFacetType() { - super("ejb") - } -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeAppFacetType.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeAppFacetType.groovy deleted file mode 100644 index 20dff7d7e44d..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeAppFacetType.groovy +++ /dev/null @@ -1,10 +0,0 @@ -package org.jetbrains.jps.javaee - -/** - * @author nik - */ -public class JavaeeAppFacetType extends JavaeeFacetTypeBase { - JavaeeAppFacetType() { - super("javaeeApplication") - } -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacet.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacet.groovy deleted file mode 100644 index 844d2108deda..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacet.groovy +++ /dev/null @@ -1,11 +0,0 @@ -package org.jetbrains.jps.javaee - -import org.jetbrains.jps.idea.Facet - -/** - * @author nik - */ -class JavaeeFacet extends Facet { - final List> descriptors = [] - final List> webRoots = [] -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetClassesElementType.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetClassesElementType.groovy deleted file mode 100644 index c63ff6f18e4d..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetClassesElementType.groovy +++ /dev/null @@ -1,24 +0,0 @@ -package org.jetbrains.jps.javaee; - - -import org.jetbrains.jps.MacroExpander -import org.jetbrains.jps.Project -import org.jetbrains.jps.artifacts.LayoutElement -import org.jetbrains.jps.artifacts.LayoutElementTypeService -import org.jetbrains.jps.artifacts.ModuleOutputElement -import org.jetbrains.jps.idea.ProjectLoadingErrorReporter - -/** - * @author nik - */ -class JavaeeFacetClassesElementType extends LayoutElementTypeService { - JavaeeFacetClassesElementType() { - super("javaee-facet-classes") - } - - @Override - LayoutElement createElement(Project project, Node tag, MacroExpander macroExpander, ProjectLoadingErrorReporter errorReporter) { - String facetId = tag."@facet" - return new ModuleOutputElement(moduleName: facetId.substring(0, facetId.indexOf('/'))) - } -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElement.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElement.groovy deleted file mode 100644 index 7298d28c8ac1..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElement.groovy +++ /dev/null @@ -1,32 +0,0 @@ -package org.jetbrains.jps.javaee - -import org.jetbrains.jps.Project -import org.jetbrains.jps.idea.Facet -import org.jetbrains.jps.idea.IdeaProjectLoadingUtil -import org.jetbrains.jps.idea.ProjectLoadingErrorReporter -import org.jetbrains.jps.artifacts.* - -/** - * @author nik - */ -class JavaeeFacetResourcesElement extends ComplexLayoutElement { - String facetId - ProjectLoadingErrorReporter errorReporter - - List getSubstitution(Project project) { - Facet facet = IdeaProjectLoadingUtil.findFacetByIdWithAssertion(project, facetId, errorReporter) - - if (!(facet instanceof JavaeeFacet)) { - errorReporter.error("$facetId facet is not JavaEE facet") - } - - List result = [] - facet.descriptors.each {Map descriptor -> - result << LayoutElementFactory.createParentDirectories(descriptor.outputPath, new FileCopyElement(filePath: descriptor.path)) - } - facet.webRoots.each {Map webRoot -> - result << LayoutElementFactory.createParentDirectories(webRoot.outputPath, new DirectoryCopyElement(dirPath: webRoot.path)) - } - return result - } -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElementType.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElementType.groovy deleted file mode 100644 index 527c536a21f2..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetResourcesElementType.groovy +++ /dev/null @@ -1,22 +0,0 @@ -package org.jetbrains.jps.javaee - -import org.jetbrains.jps.MacroExpander -import org.jetbrains.jps.Project -import org.jetbrains.jps.artifacts.LayoutElement -import org.jetbrains.jps.artifacts.LayoutElementTypeService -import org.jetbrains.jps.idea.ProjectLoadingErrorReporter - -/** - * @author nik - */ -class JavaeeFacetResourcesElementType extends LayoutElementTypeService { - JavaeeFacetResourcesElementType() { - super("javaee-facet-resources") - } - - @Override - LayoutElement createElement(Project project, Node tag, MacroExpander macroExpander, ProjectLoadingErrorReporter errorReporter) { - return new JavaeeFacetResourcesElement(facetId: tag."@facet", errorReporter: errorReporter) - } - -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetTypeBase.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetTypeBase.groovy deleted file mode 100644 index 657a6ed2b9f7..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/JavaeeFacetTypeBase.groovy +++ /dev/null @@ -1,40 +0,0 @@ -package org.jetbrains.jps.javaee - -import org.jetbrains.jps.MacroExpander -import org.jetbrains.jps.Module -import org.jetbrains.jps.idea.Facet -import org.jetbrains.jps.idea.FacetTypeService - -import org.jetbrains.jps.idea.IdeaProjectLoadingUtil - -/** - * @author nik - */ -public abstract class JavaeeFacetTypeBase extends FacetTypeService { - protected JavaeeFacetTypeBase(String typeId) { - super(typeId) - } - - protected String getDescriptorOutputPath(String descriptorId) { - return "META-INF" - } - - @Override - public Facet createFacet(Module module, String name, Node facetConfiguration, MacroExpander macroExpander) { - def facet = new JavaeeFacet(name: name) - facetConfiguration?.descriptors?.deploymentDescriptor?.each {Node tag -> - def outputPath = getDescriptorOutputPath(tag."@name") - String path = urlToPath(tag."@url", macroExpander) - facet.descriptors << [path: path, outputPath: outputPath] - } - facetConfiguration?.webroots?.root?.each {Node tag -> - String path = urlToPath(tag."@url", macroExpander) - facet.webRoots << [path: path, outputPath: tag."@relative"] - } - return facet - } - - def urlToPath(String url, MacroExpander macroExpander) { - return macroExpander.expandMacros(IdeaProjectLoadingUtil.pathFromUrl(url)) - } -} diff --git a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/WebFacetType.groovy b/jps/plugins/javaee/src/org/jetbrains/jps/javaee/WebFacetType.groovy deleted file mode 100644 index d6e7f972eb5a..000000000000 --- a/jps/plugins/javaee/src/org/jetbrains/jps/javaee/WebFacetType.groovy +++ /dev/null @@ -1,18 +0,0 @@ -package org.jetbrains.jps.javaee - -/** - * @author nik - */ -public class WebFacetType extends JavaeeFacetTypeBase { - public WebFacetType() { - super("web"); - } - - @Override - protected String getDescriptorOutputPath(String descriptorId) { - if (descriptorId == "context.xml") return "META-INF" - return "WEB-INF" - } - - -} diff --git a/resources/src/idea/RichPlatformPlugin.xml b/resources/src/idea/RichPlatformPlugin.xml index 86586c9f7d83..2d976d81609a 100644 --- a/resources/src/idea/RichPlatformPlugin.xml +++ b/resources/src/idea/RichPlatformPlugin.xml @@ -72,6 +72,7 @@ + From f6320a11c01ef3f079818607e36813763ea3225c Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Tue, 7 Feb 2012 14:26:00 +0400 Subject: [PATCH 04/12] Allow "core" and "normal" environments to co-exist --- .../src/com/intellij/core/CoreEnvironment.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/platform/core-impl/src/com/intellij/core/CoreEnvironment.java b/platform/core-impl/src/com/intellij/core/CoreEnvironment.java index e754d84607d6..8957f43309fe 100644 --- a/platform/core-impl/src/com/intellij/core/CoreEnvironment.java +++ b/platform/core-impl/src/com/intellij/core/CoreEnvironment.java @@ -83,10 +83,12 @@ public class CoreEnvironment { myEncodingRegistry = new CoreEncodingRegistry(); myApplication = new MockApplication(parentDisposable); - ApplicationManager.setApplication(myApplication, - new StaticGetter(myFileTypeRegistry), - new StaticGetter(myEncodingRegistry), - parentDisposable); + if (ApplicationManager.getApplication() == null) { + ApplicationManager.setApplication(myApplication, + new StaticGetter(myFileTypeRegistry), + new StaticGetter(myEncodingRegistry), + parentDisposable); + } myLocalFileSystem = new CoreLocalFileSystem(); myJarFileSystem = new CoreJarFileSystem(); From 2fff1209da8ade1626a7445f4a98871448fbc878 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 7 Feb 2012 14:29:46 +0400 Subject: [PATCH 05/12] removed obsolete modules from artifacts --- .idea/artifacts/jps_plugins.xml | 1 - .idea/artifacts/jps_sources.xml | 1 - 2 files changed, 2 deletions(-) diff --git a/.idea/artifacts/jps_plugins.xml b/.idea/artifacts/jps_plugins.xml index fee03eee74f7..ef658048f36c 100644 --- a/.idea/artifacts/jps_plugins.xml +++ b/.idea/artifacts/jps_plugins.xml @@ -4,7 +4,6 @@ - diff --git a/.idea/artifacts/jps_sources.xml b/.idea/artifacts/jps_sources.xml index 2cd42352db97..2b7c6fd1e0b7 100644 --- a/.idea/artifacts/jps_sources.xml +++ b/.idea/artifacts/jps_sources.xml @@ -6,7 +6,6 @@ - From d4d168582886e617c213c5ae42f954202029c5d7 Mon Sep 17 00:00:00 2001 From: anna Date: Tue, 7 Feb 2012 11:42:54 +0100 Subject: [PATCH 06/12] EA-33530 - AIOOBE: ExtractMethodProcessor.doExtract --- .../extractMethod/ExtractMethodProcessor.java | 6 ++++ .../extractMethod/DisabledParam.java | 6 ++++ .../extractMethod/DisabledParam_after.java | 11 +++++++ .../refactoring/ExtractMethodTest.java | 30 ++++++++++++++++++- 4 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/refactoring/extractMethod/DisabledParam.java create mode 100644 java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java diff --git a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java index f1a0966c1dc6..123463734811 100644 --- a/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java +++ b/java/java-impl/src/com/intellij/refactoring/extractMethod/ExtractMethodProcessor.java @@ -509,6 +509,11 @@ public class ExtractMethodProcessor implements MatchProvider { myVariableDatum[i] = myInputVariables.getInputVariables().get(i); } } + + @TestOnly + public void doNotPassParameter(int i) { + myVariableDatum[i].passAsParameter = false; + } /** * Invoked in command and in atomic action @@ -760,6 +765,7 @@ public class ExtractMethodProcessor implements MatchProvider { for (int i = 0, length = myVariableDatum.length; i < length; i++) { ParameterTablePanel.VariableData data = myVariableDatum[i]; + if (!data.passAsParameter) continue; final PsiVariable variable = data.variable; final PsiParameter psiParameter = newMethod.getParameterList().getParameters()[i]; if (!TypeConversionUtil.isAssignable(variable.getType(), psiParameter.getType())) { diff --git a/java/java-tests/testData/refactoring/extractMethod/DisabledParam.java b/java/java-tests/testData/refactoring/extractMethod/DisabledParam.java new file mode 100644 index 000000000000..64406a7febeb --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/DisabledParam.java @@ -0,0 +1,6 @@ +class Fest { + public static void main(String[] args) { + String f = ""; + System.out.println(f); + } +} \ No newline at end of file diff --git a/java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java b/java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java new file mode 100644 index 000000000000..c25ade46e4d5 --- /dev/null +++ b/java/java-tests/testData/refactoring/extractMethod/DisabledParam_after.java @@ -0,0 +1,11 @@ +class Fest { + public static void main(String[] args) { + String f = ""; + newMethod(); + } + + private static void newMethod() { + String f = ; + System.out.println(f); + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java index cf4e75003a50..dd534625c829 100644 --- a/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java +++ b/java/java-tests/testSrc/com/intellij/refactoring/ExtractMethodTest.java @@ -9,6 +9,7 @@ import com.intellij.psi.PsiExpression; import com.intellij.psi.PsiFile; import com.intellij.psi.codeStyle.CodeStyleSettings; import com.intellij.psi.codeStyle.CodeStyleSettingsManager; +import com.intellij.refactoring.extractMethod.ExtractMethodHandler; import com.intellij.refactoring.extractMethod.ExtractMethodProcessor; import com.intellij.refactoring.extractMethod.PrepareFailedException; import com.intellij.refactoring.introduceVariable.IntroduceVariableBase; @@ -500,6 +501,16 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { public void testRedundantCast() throws Exception { doTest(); } + + public void testDisabledParam() throws Exception { + final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(getProject()); + settings.ELSE_ON_NEW_LINE = true; + settings.CATCH_ON_NEW_LINE = myCatchOnNewLine; + configureByFile(BASE_PATH + getTestName(false) + ".java"); + boolean success = performExtractMethod(true, true, getEditor(), getFile(), getProject(), false, 0); + assertTrue(success); + checkResultByFile(BASE_PATH + getTestName(false) + "_after.java"); + } private void doPrepareErrorTest(final String expectedMessage) throws Exception { String expectedError = null; @@ -545,6 +556,17 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { public static boolean performExtractMethod(boolean doRefactor, boolean replaceAllDuplicates, Editor editor, PsiFile file, Project project, final boolean extractChainedConstructor) throws PrepareFailedException, IncorrectOperationException { + return performExtractMethod(doRefactor, replaceAllDuplicates, editor, file, project, extractChainedConstructor, null); + } + + public static boolean performExtractMethod(boolean doRefactor, + boolean replaceAllDuplicates, + Editor editor, + PsiFile file, + Project project, + final boolean extractChainedConstructor, + int... disabledParams) + throws PrepareFailedException, IncorrectOperationException { int startOffset = editor.getSelectionModel().getSelectionStart(); int endOffset = editor.getSelectionModel().getSelectionEnd(); @@ -574,7 +596,13 @@ public class ExtractMethodTest extends LightCodeInsightTestCase { } if (doRefactor) { - processor.testRun(); + processor.testPrepare(); + if (disabledParams != null) { + for (int param : disabledParams) { + processor.doNotPassParameter(param); + } + } + ExtractMethodHandler.run(project, editor, processor); } if (replaceAllDuplicates) { From 2103c2098aeb955fef05effead211ed830290193 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 7 Feb 2012 14:37:54 +0400 Subject: [PATCH 07/12] cleanup and javadoc --- .../src/org/jetbrains/jps/incremental/Builder.java | 7 +++---- .../org/jetbrains/jps/incremental/ProjectLevelBuilder.java | 1 + .../jps/incremental/artifacts/IncArtifactBuilder.java | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/Builder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/Builder.java index bf1265d0ca4a..aa154c937595 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/Builder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/Builder.java @@ -1,14 +1,13 @@ package org.jetbrains.jps.incremental; /** + * @see ModuleLevelBuilder + * @see ProjectLevelBuilder + * * @author nik */ public abstract class Builder { public abstract String getName(); public abstract String getDescription(); - - public static enum ExitCode { - OK, ABORT, ADDITIONAL_PASS_REQUIRED - } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java index dadd38cc9928..3ef9b038d1c3 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java @@ -1,6 +1,7 @@ package org.jetbrains.jps.incremental; /** + * @see ProjectLevelBuilderService * @author nik */ public abstract class ProjectLevelBuilder extends Builder { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java index c158090774ad..83a60f1cda2b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java @@ -120,7 +120,7 @@ public class IncArtifactBuilder extends ProjectLevelBuilder { } context.processMessage(UptoDateFilesSavedEvent.INSTANCE); } - catch (Exception e) { + catch (IOException e) { throw new ProjectBuildException(e); } } From bbb6e954063a80652fc58f5fe183b13fbec9d792 Mon Sep 17 00:00:00 2001 From: nik Date: Tue, 7 Feb 2012 15:02:30 +0400 Subject: [PATCH 08/12] compile server: api for registering module level builders --- ...g.jetbrains.jps.incremental.BuilderService | 1 + .../jps/incremental/BuilderRegistry.java | 20 ++++++---------- .../jps/incremental/BuilderService.java | 22 +++++++++++++++++ .../jps/incremental/JavaBuilderService.java | 24 +++++++++++++++++++ .../jps/incremental/ModuleLevelBuilder.java | 12 ++++++++++ .../jps/incremental/ProjectLevelBuilder.java | 2 +- .../ProjectLevelBuilderService.java | 11 --------- .../artifacts/ArtifactBuilderService.java | 11 +++++---- .../jps/incremental/groovy/GroovyBuilder.java | 1 + .../jps/incremental/java/JavaBuilder.java | 1 + .../resources/ResourcesBuilder.java | 12 +--------- 11 files changed, 77 insertions(+), 40 deletions(-) create mode 100644 jps/jps-builders/src/META-INF/services/org.jetbrains.jps.incremental.BuilderService create mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderService.java create mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/JavaBuilderService.java delete mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilderService.java diff --git a/jps/jps-builders/src/META-INF/services/org.jetbrains.jps.incremental.BuilderService b/jps/jps-builders/src/META-INF/services/org.jetbrains.jps.incremental.BuilderService new file mode 100644 index 000000000000..128f95ade09d --- /dev/null +++ b/jps/jps-builders/src/META-INF/services/org.jetbrains.jps.incremental.BuilderService @@ -0,0 +1 @@ +org.jetbrains.jps.incremental.JavaBuilderService diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java index 7956d9210086..62b2c1fd2cb4 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java @@ -1,9 +1,6 @@ package org.jetbrains.jps.incremental; import org.jetbrains.jps.idea.OwnServiceLoader; -import org.jetbrains.jps.incremental.groovy.GroovyBuilder; -import org.jetbrains.jps.incremental.java.JavaBuilder; -import org.jetbrains.jps.incremental.resources.ResourcesBuilder; import java.util.*; import java.util.concurrent.ExecutorService; @@ -37,18 +34,15 @@ public class BuilderRegistry { } }); - final OwnServiceLoader loader = OwnServiceLoader.load(ProjectLevelBuilderService.class); + final OwnServiceLoader loader = OwnServiceLoader.load(BuilderService.class); - for (ProjectLevelBuilderService service : loader) { - myProjectLevelBuilders.add(service.createBuilder()); + for (BuilderService service : loader) { + myProjectLevelBuilders.addAll(service.createProjectLevelBuilders()); + final List moduleLevelBuilders = service.createModuleLevelBuilders(myTasksExecutor); + for (ModuleLevelBuilder builder : moduleLevelBuilders) { + myModuleLevelBuilders.get(builder.getCategory()).add(builder); + } } - // todo: some builder registration mechanism for plugins needed - - myModuleLevelBuilders.get(BuilderCategory.TRANSLATOR).add(new GroovyBuilder(true)); - myModuleLevelBuilders.get(BuilderCategory.TRANSLATOR).add(new JavaBuilder(myTasksExecutor)); - myModuleLevelBuilders.get(BuilderCategory.TRANSLATOR).add(new ResourcesBuilder()); - myModuleLevelBuilders.get(BuilderCategory.TRANSLATOR).add(new GroovyBuilder(false)); - } public int getModuleLevelBuilderCount() { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderService.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderService.java new file mode 100644 index 000000000000..e4df2b9d7a8a --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderService.java @@ -0,0 +1,22 @@ +package org.jetbrains.jps.incremental; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; +import java.util.concurrent.ExecutorService; + +/** + * @author nik + */ +public abstract class BuilderService { + @NotNull + public List createModuleLevelBuilders(ExecutorService executorService) { + return Collections.emptyList(); + } + + @NotNull + public List createProjectLevelBuilders() { + return Collections.emptyList(); + } +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/JavaBuilderService.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/JavaBuilderService.java new file mode 100644 index 000000000000..9f8bff5fac8c --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/JavaBuilderService.java @@ -0,0 +1,24 @@ +package org.jetbrains.jps.incremental; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.incremental.groovy.GroovyBuilder; +import org.jetbrains.jps.incremental.java.JavaBuilder; +import org.jetbrains.jps.incremental.resources.ResourcesBuilder; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutorService; + +/** + * @author nik + */ +public class JavaBuilderService extends BuilderService { + @NotNull + @Override + public List createModuleLevelBuilders(ExecutorService executorService) { + return Arrays.asList(new GroovyBuilder(true), + new JavaBuilder(executorService), + new ResourcesBuilder(), + new GroovyBuilder(false)); + } +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java index 102f62297c8f..56c67f167d7f 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java @@ -14,6 +14,8 @@ import java.util.HashSet; import java.util.Set; /** + * Use {@link BuilderService} to register implementations of this class + * * @author Eugene Zhuravlev * Date: 9/17/11 */ @@ -23,12 +25,22 @@ public abstract class ModuleLevelBuilder extends Builder { private static final Key> ALL_AFFECTED_FILES_KEY = Key.create("_all_affected_files_"); private static final Key> ALL_COMPILED_FILES_KEY = Key.create("_all_compiled_files_"); + private final BuilderCategory myCategory; + + protected ModuleLevelBuilder(BuilderCategory category) { + myCategory = category; + } + public static enum ExitCode { OK, ABORT, ADDITIONAL_PASS_REQUIRED, CHUNK_REBUILD_REQUIRED } public abstract ExitCode build(CompileContext context, ModuleChunk chunk) throws ProjectBuildException; + public final BuilderCategory getCategory() { + return myCategory; + } + public void cleanupResources(CompileContext context, ModuleChunk chunk) { ALL_AFFECTED_FILES_KEY.set(context, null); ALL_COMPILED_FILES_KEY.set(context, null); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java index 3ef9b038d1c3..a3e95a39c409 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilder.java @@ -1,7 +1,7 @@ package org.jetbrains.jps.incremental; /** - * @see ProjectLevelBuilderService + * Use {@link BuilderService} to register implementations of this class * @author nik */ public abstract class ProjectLevelBuilder extends Builder { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilderService.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilderService.java deleted file mode 100644 index fb6dc5eeda14..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectLevelBuilderService.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.jetbrains.jps.incremental; - -import org.jetbrains.annotations.NotNull; - -/** - * @author nik - */ -public abstract class ProjectLevelBuilderService { - @NotNull - public abstract ProjectLevelBuilder createBuilder(); -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderService.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderService.java index 6c4b8b19cd95..9d0622b67b18 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderService.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderService.java @@ -1,16 +1,19 @@ package org.jetbrains.jps.incremental.artifacts; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.incremental.BuilderService; import org.jetbrains.jps.incremental.ProjectLevelBuilder; -import org.jetbrains.jps.incremental.ProjectLevelBuilderService; + +import java.util.Collections; +import java.util.List; /** * @author nik */ -public class ArtifactBuilderService extends ProjectLevelBuilderService { +public class ArtifactBuilderService extends BuilderService { @NotNull @Override - public ProjectLevelBuilder createBuilder() { - return new IncArtifactBuilder(); + public List createProjectLevelBuilders() { + return Collections.singletonList(new IncArtifactBuilder()); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java index 5565703430b4..0fbd21881c8d 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java @@ -38,6 +38,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { private final String myBuilderName; public GroovyBuilder(boolean forStubs) { + super(BuilderCategory.TRANSLATOR); myForStubs = forStubs; myBuilderName = BUILDER_NAME + (forStubs ? "-stubs" : "-classes"); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 8a80242794ef..ac1d7e09b598 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -73,6 +73,7 @@ public class JavaBuilder extends ModuleLevelBuilder { private final List myClassProcessors = new ArrayList(); public JavaBuilder(ExecutorService tasksExecutor) { + super(BuilderCategory.TRANSLATOR); myTaskRunner = tasksExecutor; //add here class processors in the sequence they should be executed myClassProcessors.add(new ClassPostProcessor() { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java index 8a36c1ec7b9d..e964a0284036 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/resources/ResourcesBuilder.java @@ -2,7 +2,6 @@ package org.jetbrains.jps.incremental.resources; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.io.FileUtil; -import org.jetbrains.jps.CompilerConfiguration; import org.jetbrains.jps.Module; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.incremental.*; @@ -24,6 +23,7 @@ public class ResourcesBuilder extends ModuleLevelBuilder { public static final String BUILDER_NAME = "resources"; public ResourcesBuilder() { + super(BuilderCategory.TRANSLATOR); } @Override @@ -32,16 +32,6 @@ public class ResourcesBuilder extends ModuleLevelBuilder { } public ExitCode build(final CompileContext context, ModuleChunk chunk) throws ProjectBuildException { - CompilerConfiguration config = null; - for (Module module : chunk.getModules()) { - config = module.getProject().getCompilerConfiguration(); - break; - } - - if (config == null) { - return ExitCode.OK; - } - ResourcePatterns patterns = ResourcePatterns.KEY.get(context); if (patterns == null) { ResourcePatterns.KEY.set(context, patterns = new ResourcePatterns(context.getProject())); From 56dabbf37902f221783f8c6d6a7113f5fb5de917 Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 7 Feb 2012 11:00:55 +0100 Subject: [PATCH 09/12] relax whole word criterion --- .../lang-impl/src/com/intellij/find/impl/FindManagerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java b/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java index 8b4ef8400f58..4047bd1c4e07 100644 --- a/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java +++ b/platform/lang-impl/src/com/intellij/find/impl/FindManagerImpl.java @@ -316,6 +316,7 @@ public class FindManagerImpl extends FindManager implements PersistentStateCompo private static boolean isWholeWord(CharSequence text, int startOffset, int endOffset) { boolean isWordStart = startOffset == 0 || !Character.isJavaIdentifierPart(text.charAt(startOffset - 1)) || + !Character.isJavaIdentifierPart(text.charAt(startOffset)) || startOffset > 1 && text.charAt(startOffset - 2) == '\\'; boolean isWordEnd = endOffset == text.length() || From 466e61a43d21f310709299d7a552c12fd623f5da Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 7 Feb 2012 11:17:17 +0100 Subject: [PATCH 10/12] present a correct scope in show usages action, not just 'project files' always --- .../find/actions/ShowUsagesAction.java | 28 ++++++++++--------- .../find/findUsages/FindUsagesManager.java | 13 ++------- 2 files changed, 17 insertions(+), 24 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java index fa52ac698e9b..80ead536ae99 100644 --- a/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java +++ b/platform/lang-impl/src/com/intellij/find/actions/ShowUsagesAction.java @@ -20,11 +20,9 @@ import com.intellij.codeInsight.hint.HintManager; import com.intellij.codeInsight.hint.HintUtil; import com.intellij.featureStatistics.FeatureUsageTracker; import com.intellij.find.FindManager; -import com.intellij.find.findUsages.AbstractFindUsagesDialog; -import com.intellij.find.findUsages.FindUsagesHandler; -import com.intellij.find.findUsages.FindUsagesManager; -import com.intellij.find.findUsages.PsiElement2UsageTargetAdapter; +import com.intellij.find.findUsages.*; import com.intellij.find.impl.FindManagerImpl; +import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.actionSystem.ex.ActionManagerEx; @@ -225,14 +223,15 @@ public class ShowUsagesAction extends AnAction implements PopupAction { } }; FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(handler.getProject())).getFindUsagesManager(); - presentation = findUsagesManager.processUsages(handler, collect); + FindUsagesOptions options = handler.getFindUsagesOptions(DataManager.getInstance().getDataContext()); + presentation = findUsagesManager.processUsages(handler, collect, options); if (presentation == null) { Disposer.dispose(usageView); return; } final String title = presentation.getTabText(); - JBPopup popup = createUsagePopup(usages, visibleNodes, title, handler, editor, popupPosition, maxUsages, usageView); + JBPopup popup = createUsagePopup(usages, visibleNodes, title, handler, editor, popupPosition, maxUsages, usageView, options); if (popup == null) { Disposer.dispose(usageView); } @@ -301,9 +300,9 @@ public class ShowUsagesAction extends AnAction implements PopupAction { } } - private static String searchScopePresentableName(final FindUsagesHandler handler) { - SearchScope searchScope = FindUsagesManager.getCurrentSearchScope(handler); - if (searchScope == null) searchScope = ProjectScope.getAllScope(handler.getProject()); + private static String searchScopePresentableName(FindUsagesOptions options, Project project) { + SearchScope searchScope = options.searchScope; + if (searchScope == null) searchScope = ProjectScope.getAllScope(project); return searchScope.getDisplayName(); } @@ -314,14 +313,15 @@ public class ShowUsagesAction extends AnAction implements PopupAction { final Editor editor, final RelativePoint popupPosition, final int maxUsages, - final UsageViewImpl usageView) { + final UsageViewImpl usageView, FindUsagesOptions options) { boolean hasMore = visibleNodes.remove(UsageViewImpl.NULL_NODE); final Project project = handler.getProject(); if (visibleNodes.isEmpty()) { if (usages.isEmpty()) { - String text = UsageViewBundle.message("no.usages.found.in", searchScopePresentableName(handler)); + String text = UsageViewBundle.message("no.usages.found.in", searchScopePresentableName(options, + project)); showHint(text, editor, popupPosition, handler, maxUsages); return null; } @@ -332,7 +332,8 @@ public class ShowUsagesAction extends AnAction implements PopupAction { if (visibleNodes.size() == 1 && usages.size() == 1) { //the only usage Usage usage = visibleNodes.iterator().next().getUsage(); - navigateAndHint(usage, UsageViewBundle.message("show.usages.only.usage", searchScopePresentableName(handler)), handler, popupPosition, + navigateAndHint(usage, UsageViewBundle.message("show.usages.only.usage", + searchScopePresentableName(options, project)), handler, popupPosition, maxUsages); return null; } @@ -340,7 +341,8 @@ public class ShowUsagesAction extends AnAction implements PopupAction { // usage view can filter usages down to one Usage usage = visibleNodes.iterator().next().getUsage(); if (areAllUsagesInThisLine(usage, usages)) { - String hint = UsageViewBundle.message("all.usages.are.in.this.line", usages.size(), searchScopePresentableName(handler)); + String hint = UsageViewBundle.message("all.usages.are.in.this.line", usages.size(), + searchScopePresentableName(options, project)); navigateAndHint(usage, hint, handler, popupPosition, maxUsages); return null; } diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java index 2103f229738b..1682455dfe00 100644 --- a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java +++ b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesManager.java @@ -20,7 +20,6 @@ import com.intellij.codeInsight.hint.HintManager; import com.intellij.codeInsight.hint.HintManagerImpl; import com.intellij.codeInsight.hint.HintUtil; import com.intellij.find.FindBundle; -import com.intellij.ide.DataManager; import com.intellij.lang.findUsages.LanguageFindUsages; import com.intellij.navigation.NavigationItem; import com.intellij.openapi.actionSystem.ActionManager; @@ -273,13 +272,6 @@ public class FindUsagesManager implements JDOMExternalizable { } } - @Nullable - public static SearchScope getCurrentSearchScope(FindUsagesHandler handler) { - if (handler == null) return null; - FindUsagesOptions findUsagesOptions = handler.getFindUsagesOptions(); - return findUsagesOptions.searchScope; - } - public boolean isUsed(@NotNull PsiElement element, @NotNull FindUsagesOptions findUsagesOptions) { FindUsagesHandler handler = getFindUsagesHandler(element, true); if (handler == null) return false; @@ -298,11 +290,10 @@ public class FindUsagesManager implements JDOMExternalizable { // return null on failure or cancel @Nullable - public UsageViewPresentation processUsages(FindUsagesHandler handler, @NotNull final Processor processor) { + public UsageViewPresentation processUsages(FindUsagesHandler handler, + @NotNull final Processor processor, FindUsagesOptions findUsagesOptions) { if (handler == null) return null; - FindUsagesOptions findUsagesOptions = handler.getFindUsagesOptions(DataManager.getInstance().getDataContext()); - PsiElement element = handler.getPsiElement(); LOG.assertTrue(element.isValid()); final UsageInfoToUsageConverter.TargetElementsDescriptor descriptor = From 92826cc037c33c2426d009ad51144d16162cc11a Mon Sep 17 00:00:00 2001 From: peter Date: Tue, 7 Feb 2012 12:03:03 +0100 Subject: [PATCH 11/12] make comm&it mnemonic in todo checkin handler work --- .../platform-api/src/com/intellij/openapi/ui/Messages.java | 2 +- .../platform-resources-en/src/messages/VcsBundle.properties | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java index c8fd287a42f5..e6c97ca5db6a 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/Messages.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/Messages.java @@ -906,7 +906,7 @@ public class Messages { for (int i = 0; i < myOptions.length; i++) { String option = myOptions[i]; final int exitCode = i; - actions[i] = new AbstractAction(option) { + actions[i] = new AbstractAction(UIUtil.replaceMnemonicAmpersand(option)) { public void actionPerformed(ActionEvent e) { close(exitCode, true); } diff --git a/platform/platform-resources-en/src/messages/VcsBundle.properties b/platform/platform-resources-en/src/messages/VcsBundle.properties index 18c5c7972d28..335d1dcfe0d3 100644 --- a/platform/platform-resources-en/src/messages/VcsBundle.properties +++ b/platform/platform-resources-en/src/messages/VcsBundle.properties @@ -92,7 +92,7 @@ action.name.checkin.directory={0} Directory action.name.checkin.file={0} File action.name.checkin.directories={0} Directories action.name.checkin.files={0} Files -action.name.commit.project=Comm_it Changes +action.name.commit.project=Comm&it Changes column.name.revision.list.author=Author column.name.revisions.list.filter=Date column.name.revisions.list.branch=Branch @@ -269,7 +269,7 @@ changes.newchangelist.warning.already.exists.title=Wrong Changelist Name commit.dialog.no.changes.detected.text=No changes detected commit.dialog.no.changes.detected.title=Nothing to commit commit.dialog.title=Commit Changes -commit.dialog.default.commit.operation.name=Comm_it +commit.dialog.default.commit.operation.name=Comm&it commit.dialog.include.action.name=Include into commit commit.dialog.failed.commit.template=Failed commit: {0} commit.dialog.completed.successfully=Completed successfully From d8e83a1fdbfde3d13750b7ccca880f4646174d10 Mon Sep 17 00:00:00 2001 From: Konstantin Bulenkov Date: Tue, 7 Feb 2012 12:22:30 +0100 Subject: [PATCH 12/12] don't set focus to preferred component on every activation --- .../com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java index d3e4871fe115..e4d4b75d5fb6 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/impl/DialogWrapperPeerImpl.java @@ -491,6 +491,7 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer implements FocusTra private Dimension myInitialSize; private String myDimensionServiceKey; private boolean myOpened = false; + private boolean myActivated = false; private FocusTrackback myFocusTrackback; private MyDialog.MyWindowListener myWindowListener; @@ -896,7 +897,10 @@ public class DialogWrapperPeerImpl extends DialogWrapperPeer implements FocusTra return; } - + if (myActivated) { + return; + } + myActivated = true; JComponent toFocus = wrapper == null ? null : wrapper.getPreferredFocusedComponent(); if (toFocus == null) { toFocus = getRootPane().getDefaultButton();