diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 7a572a0d2144..c4234a7cca1c 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -412,6 +412,7 @@ public class CompileServerManager implements ApplicationComponent{ // debugging cmdLine.addParameter("-XX:+HeapDumpOnOutOfMemoryError"); //cmdLine.addParameter("-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5008"); + if (Registry.is("compiler.server.use.memory.temp.cache")) { cmdLine.addParameter("-D"+Server.USE_MEMORY_TEMP_CACHE_OPTION + "=true"); } diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java index 65b733bf71a0..1cbe72c57400 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/TranslatingCompilerFilesMonitor.java @@ -1270,7 +1270,13 @@ public class TranslatingCompilerFilesMonitor implements ApplicationComponent { private class MyVfsListener extends VirtualFileAdapter { public void propertyChanged(final VirtualFilePropertyEvent event) { if (VirtualFile.PROP_NAME.equals(event.getPropertyName())) { - markDirtyIfSource(event.getFile(), false); + final VirtualFile file = event.getFile(); + final VirtualFile parent = event.getParent(); + if (parent != null) { + final String oldName = (String)event.getOldValue(); + CompileServerManager.getInstance().notifyFilesDeleted(Collections.singleton(parent.getPath() + "/" + oldName)); + } + markDirtyIfSource(file, false); } } diff --git a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaAnonymousClassesNodeProvider.java b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaAnonymousClassesNodeProvider.java index 8fca8a6e41b0..2f41b69c8368 100644 --- a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaAnonymousClassesNodeProvider.java +++ b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaAnonymousClassesNodeProvider.java @@ -15,6 +15,7 @@ */ package com.intellij.ide.structureView.impl.java; +import com.intellij.ide.structureView.impl.common.PsiTreeElementBase; import com.intellij.ide.util.FileStructureNodeProvider; import com.intellij.ide.util.treeView.smartTree.ActionPresentation; import com.intellij.ide.util.treeView.smartTree.ActionPresentationData; @@ -29,6 +30,7 @@ import com.intellij.psi.PsiAnonymousClass; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiElement; import com.intellij.util.PlatformIcons; +import com.intellij.util.containers.hash.HashSet; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -44,14 +46,14 @@ public class JavaAnonymousClassesNodeProvider implements FileStructureNodeProvid @Override public Collection provideNodes(TreeElement node) { - if (node instanceof JavaClassTreeElement) { - final PsiClass cls = ((JavaClassTreeElement)node).getElement(); + if (node instanceof PsiMethodTreeElement || node instanceof PsiFieldTreeElement || node instanceof ClassInitializerTreeElement) { + final PsiElement el = ((PsiTreeElementBase)node).getElement(); for (AnonymousElementProvider provider : Extensions.getExtensions(AnonymousElementProvider.EP_NAME)) { - final PsiElement[] elements = provider.getAnonymousElements(cls); + final PsiElement[] elements = provider.getAnonymousElements(el); if (elements != null && elements.length > 0) { List result = new ArrayList(elements.length); for (PsiElement element : elements) { - result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element, ((JavaClassTreeElement)node).getParents())); + result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element, new HashSet())); } return result; } diff --git a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeModel.java b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeModel.java index a0548ebf66ad..ff5fc9625687 100644 --- a/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeModel.java +++ b/java/java-impl/src/com/intellij/ide/structureView/impl/java/JavaFileTreeModel.java @@ -95,7 +95,8 @@ public class JavaFileTreeModel extends TextEditorBasedStructureViewModel impleme if (element instanceof PsiMethod) { PsiMethod method = (PsiMethod)element; PsiClass parent = method.getContainingClass(); - return parent != null && parent.getQualifiedName() != null; + return parent != null + && (parent.getQualifiedName() != null || parent instanceof PsiAnonymousClass); } if (element instanceof PsiField) { diff --git a/java/java-impl/src/com/intellij/lang/java/JavaAnonymousClassesProvider.java b/java/java-impl/src/com/intellij/lang/java/JavaAnonymousClassesProvider.java index 8bdcddfe876a..e1b2259e735c 100644 --- a/java/java-impl/src/com/intellij/lang/java/JavaAnonymousClassesProvider.java +++ b/java/java-impl/src/com/intellij/lang/java/JavaAnonymousClassesProvider.java @@ -27,18 +27,26 @@ import java.util.List; public class JavaAnonymousClassesProvider implements AnonymousElementProvider { @Override public PsiElement[] getAnonymousElements(PsiElement parent) { - if (parent instanceof PsiClass) { + if (suite(parent)) { if (parent instanceof PsiCompiledElement) { parent = parent.getNavigationElement(); } - if (parent instanceof PsiClass && !(parent instanceof PsiCompiledElement)) { + if (suite(parent) && !(parent instanceof PsiCompiledElement)) { final List elements = new ArrayList(); - new JavaRecursiveElementWalkingVisitor() { + final PsiElement element = parent; + element.accept(new JavaRecursiveElementWalkingVisitor() { @Override public void visitAnonymousClass(PsiAnonymousClass aClass) { elements.add(aClass); } - }.visitElement(parent); + + @Override + public void visitClass(PsiClass aClass) { + if (aClass == element) { + super.visitClass(aClass); + } + } + }); if (! elements.isEmpty()) { return elements.toArray(new PsiElement[elements.size()]); @@ -47,4 +55,11 @@ public class JavaAnonymousClassesProvider implements AnonymousElementProvider { } return PsiElement.EMPTY_ARRAY; } + + private static boolean suite(PsiElement element) { + return element instanceof PsiClass + || element instanceof PsiMethod + || element instanceof PsiField + || element instanceof PsiClassInitializer; + } } diff --git a/jps/jps-builders/proto/javac_remote_proto.proto b/jps/jps-builders/proto/javac_remote_proto.proto index db9133118092..ea213a3d8d90 100644 --- a/jps/jps-builders/proto/javac_remote_proto.proto +++ b/jps/jps-builders/proto/javac_remote_proto.proto @@ -55,6 +55,7 @@ message Message { ERROR = 1; WARNING = 2; INFO = 3; + STD_OUT = 4; } required Kind kind = 1; optional string text = 2; @@ -79,13 +80,14 @@ message Message { optional string output_root = 3; optional string relative_path = 4; optional string class_name = 5; - optional string source_uri = 6; + optional string source_path = 6; optional bytes content = 7; } required Type response_type = 1; optional CompileMessage compile_message = 2; optional OutputObject output_object = 3; + optional bool completion_status = 4; } required UUID session_id = 1; diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/BuildCanceledStatus.java b/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java similarity index 53% rename from jps/jps-builders/src/org/jetbrains/jps/server/BuildCanceledStatus.java rename to jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java index 2517dd6f7a26..d97759a183e1 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/BuildCanceledStatus.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/CanceledStatus.java @@ -1,9 +1,9 @@ -package org.jetbrains.jps.server; +package org.jetbrains.jps.api; /** * @author Eugene Zhuravlev * Date: 1/13/12 */ -public interface BuildCanceledStatus { +public interface CanceledStatus { boolean isCanceled(); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java index d551390e8b78..23200ff2ffb2 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java @@ -6,13 +6,13 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.ether.dependencyView.Mappings; import org.jetbrains.jps.*; +import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.ProgressMessage; import org.jetbrains.jps.incremental.messages.UptoDateFilesSavedEvent; import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.SourceToOutputMapping; import org.jetbrains.jps.incremental.storage.TimestampStorage; -import org.jetbrains.jps.server.BuildCanceledStatus; import java.io.File; import java.util.*; @@ -39,7 +39,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler private volatile boolean myErrorsFound = false; private final long myCompilationStartStamp; private final TimestampStorage myTsStorage; - private final BuildCanceledStatus myCancelStatus; + private final CanceledStatus myCancelStatus; private float myDone = -1.0f; public CompileContext(CompileScope scope, @@ -47,7 +47,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler boolean isProjectRebuild, ProjectChunks productionChunks, ProjectChunks testChunks, - FSState fsState, final BuildDataManager dataManager, TimestampStorage tsStorage, MessageHandler delegateMessageHandler, final ModuleRootsIndex rootsIndex, BuildCanceledStatus cancelStatus) throws ProjectBuildException { + FSState fsState, final BuildDataManager dataManager, TimestampStorage tsStorage, MessageHandler delegateMessageHandler, final ModuleRootsIndex rootsIndex, CanceledStatus cancelStatus) throws ProjectBuildException { myTsStorage = tsStorage; myCancelStatus = cancelStatus; myCompilationStartStamp = System.currentTimeMillis(); @@ -146,6 +146,10 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler return myCompilingTests; } + public CanceledStatus getCancelStatus() { + return myCancelStatus; + } + void setCompilingTests(boolean compilingTests) { myCompilingTests = compilingTests; } @@ -269,7 +273,7 @@ public class CompileContext extends UserDataHolderBase implements MessageHandler public void setDone(float done) { myDone = done; - processMessage(new ProgressMessage("", done)); + //processMessage(new ProgressMessage("", done)); } public static enum DirtyMarkScope{ diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index a1140d4bf783..8e3b8479238b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -3,6 +3,7 @@ package org.jetbrains.jps.incremental; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.io.PersistentEnumerator; import org.jetbrains.jps.*; +import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.CompilerMessage; import org.jetbrains.jps.incremental.messages.ProgressMessage; @@ -10,7 +11,6 @@ import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.SourceToFormMapping; import org.jetbrains.jps.incremental.storage.SourceToOutputMapping; import org.jetbrains.jps.incremental.storage.TimestampStorage; -import org.jetbrains.jps.server.BuildCanceledStatus; import org.jetbrains.jps.server.ProjectDescriptor; import java.io.File; @@ -28,7 +28,7 @@ public class IncProjectBuilder { private final ProjectDescriptor myProjectDescriptor; private final BuilderRegistry myBuilderRegistry; - private final BuildCanceledStatus myCancelStatus; + private final CanceledStatus myCancelStatus; private ProjectChunks myProductionChunks; private ProjectChunks myTestChunks; private final List myMessageHandlers = new ArrayList(); @@ -44,7 +44,7 @@ public class IncProjectBuilder { private final float myTotalModulesWork; private final int myTotalBuilderCount; - public IncProjectBuilder(ProjectDescriptor pd, BuilderRegistry builderRegistry, BuildCanceledStatus cs) { + public IncProjectBuilder(ProjectDescriptor pd, BuilderRegistry builderRegistry, CanceledStatus cs) { myProjectDescriptor = pd; myBuilderRegistry = builderRegistry; myCancelStatus = cs; 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 d1e5e8ebae13..574e4119959f 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 @@ -300,7 +300,7 @@ public class JavaBuilder extends Builder{ } private JavacProxy createJavacProxy(CompileContext context) { - return new EmbeddedJavacProxy(); + return new EmbeddedJavacProxy(context.getCancelStatus()); } private static ClassLoader createInstrumentationClassLoader(Collection classpath, Collection platformCp, Map chunkSourcePath, OutputFilesSink outputSink) diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/EmbeddedJavacProxy.java b/jps/jps-builders/src/org/jetbrains/jps/javac/EmbeddedJavacProxy.java index 04479475558d..5bfedba45c06 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/EmbeddedJavacProxy.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/EmbeddedJavacProxy.java @@ -1,5 +1,7 @@ package org.jetbrains.jps.javac; +import org.jetbrains.jps.api.CanceledStatus; + import java.io.File; import java.util.Collection; import java.util.List; @@ -12,7 +14,13 @@ import java.util.Set; */ public class EmbeddedJavacProxy extends JavacProxy{ + private final CanceledStatus myCanceledStatus; + + public EmbeddedJavacProxy(CanceledStatus canceledStatus) { + myCanceledStatus = canceledStatus; + } + public boolean compile(List options, Collection files, Collection classpath, Collection platformCp, Collection sourcePath, Map> outs, DiagnosticOutputConsumer diagnosticSink, OutputFileConsumer outputSink) { - return JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, outputSink); + return JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, outputSink, myCanceledStatus); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/ExternalProcessJavacProxy.java b/jps/jps-builders/src/org/jetbrains/jps/javac/ExternalProcessJavacProxy.java index 90d28084b93b..057c86ea9fd1 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/ExternalProcessJavacProxy.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/ExternalProcessJavacProxy.java @@ -1,5 +1,7 @@ package org.jetbrains.jps.javac; +import org.jetbrains.jps.api.CanceledStatus; + import java.io.File; import java.util.Collection; import java.util.List; @@ -12,11 +14,17 @@ import java.util.Set; */ public class ExternalProcessJavacProxy extends JavacProxy{ + private final CanceledStatus myCanceledStatus; + + public ExternalProcessJavacProxy(CanceledStatus canceledStatus) { + myCanceledStatus = canceledStatus; + } + public boolean connect() { return false; // todo } public boolean compile(List options, Collection files, Collection classpath, Collection platformCp, Collection sourcePath, Map> outs, DiagnosticOutputConsumer diagnosticSink, OutputFileConsumer outputSink) { - return JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, outputSink); + return false; // todo } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacFileManager.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacFileManager.java index 66b38d6e2f61..9bc9c4239cc1 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacFileManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacFileManager.java @@ -23,6 +23,8 @@ class JavacFileManager extends ForwardingJavaFileManager> myOutputsMap = Collections.emptyMap(); interface Context { + boolean isCanceled(); + StandardJavaFileManager getStandardFileManager(); void consumeOutputFile(@NotNull OutputFileObject obj); diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java index 532f2c247834..626a0d5a33a0 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacMain.java @@ -2,6 +2,8 @@ package org.jetbrains.jps.javac; import com.intellij.openapi.util.SystemInfo; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.server.ClasspathBootstrap; import javax.tools.*; @@ -24,7 +26,7 @@ public class JavacMain { Collection sourcePath, Map> outputDirToRoots, final DiagnosticOutputConsumer outConsumer, - final OutputFileConsumer outputSink) { + final OutputFileConsumer outputSink, @Nullable CanceledStatus canceledStatus) { final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); for (File outputDir : outputDirToRoots.keySet()) { @@ -117,6 +119,10 @@ public class JavacMain { } } + public boolean isCanceled() { + return false; // todo + } + public StandardJavaFileManager getStandardFileManager() { return myStdManager; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacProtoUtil.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacProtoUtil.java new file mode 100644 index 000000000000..3e2c403fca0c --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacProtoUtil.java @@ -0,0 +1,131 @@ +package org.jetbrains.jps.javac; + +import com.google.protobuf.ByteString; +import com.intellij.openapi.util.io.FileUtil; + +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; +import java.io.File; +import java.util.UUID; + +/** + * @author Eugene Zhuravlev + * Date: 1/23/12 + */ +public class JavacProtoUtil { + + public static JavacRemoteProto.Message.Response createOutputObjectResponse(OutputFileObject fileObject) { + final JavacRemoteProto.Message.Response.OutputObject.Builder msgBuilder = JavacRemoteProto.Message.Response.OutputObject.newBuilder(); + + msgBuilder.setKind(convertKind(fileObject.getKind())); + msgBuilder.setFilePath(FileUtil.toSystemIndependentName(fileObject.getFile().getPath())); + final OutputFileObject.Content content = fileObject.getContent(); + if (content != null) { + msgBuilder.setContent(ByteString.copyFrom(content.getBuffer(), content.getOffset(), content.getLength())); + } + final String className = fileObject.getClassName(); + if (className != null) { + msgBuilder.setClassName(className); + } + final File outputRoot = fileObject.getOutputRoot(); + if (outputRoot != null) { + msgBuilder.setOutputRoot(FileUtil.toSystemIndependentName(outputRoot.getPath())); + } + final String relativePath = fileObject.getRelativePath(); + if (relativePath != null) { + msgBuilder.setRelativePath(relativePath); + } + final File sourceFile = fileObject.getSourceFile(); + if (sourceFile != null) { + msgBuilder.setSourcePath(FileUtil.toSystemIndependentName(sourceFile.getPath())); + } + + final JavacRemoteProto.Message.Response.Builder builder = JavacRemoteProto.Message.Response.newBuilder(); + builder.setResponseType(JavacRemoteProto.Message.Response.Type.OUTPUT_OBJECT).setOutputObject(msgBuilder.build()); + + return builder.build(); + } + + public static JavacRemoteProto.Message.Response createStdOutputResponse(String text) { + final JavacRemoteProto.Message.Response.CompileMessage.Builder msgBuilder = JavacRemoteProto.Message.Response.CompileMessage.newBuilder(); + msgBuilder.setKind(JavacRemoteProto.Message.Response.CompileMessage.Kind.STD_OUT); + msgBuilder.setText(text); + final JavacRemoteProto.Message.Response.Builder builder = JavacRemoteProto.Message.Response.newBuilder(); + builder.setResponseType(JavacRemoteProto.Message.Response.Type.BUILD_MESSAGE).setCompileMessage(msgBuilder.build()); + + return builder.build(); + } + + public static JavacRemoteProto.Message.Response createBuildMessageResponse(Diagnostic.Kind kind, String text, final String srcPath, final long line, final long column, final long beginOffset, final long endOffset) { + final JavacRemoteProto.Message.Response.CompileMessage.Builder msgBuilder = JavacRemoteProto.Message.Response.CompileMessage.newBuilder(); + msgBuilder.setKind(convertKind(kind)); + msgBuilder.setText(text); + msgBuilder.setSourceFilePath(srcPath); + msgBuilder.setLine(line); + msgBuilder.setColumn(column); + msgBuilder.setProblemBeginOffset(beginOffset); + msgBuilder.setProblemEndOffset(endOffset); + + final JavacRemoteProto.Message.Response.Builder builder = JavacRemoteProto.Message.Response.newBuilder(); + builder.setResponseType(JavacRemoteProto.Message.Response.Type.BUILD_MESSAGE).setCompileMessage(msgBuilder.build()); + + return builder.build(); + } + + public static JavacRemoteProto.Message.Response createBuildCompletedResponse(boolean code) { + final JavacRemoteProto.Message.Response.Builder builder = JavacRemoteProto.Message.Response.newBuilder(); + builder.setResponseType(JavacRemoteProto.Message.Response.Type.BUILD_COMPLETED).setCompletionStatus(code); + return builder.build(); + } + + public static JavacRemoteProto.Message.Failure createFailure(String description) { + final JavacRemoteProto.Message.Failure.Builder builder = JavacRemoteProto.Message.Failure.newBuilder(); + builder.setDescription(description); + return builder.build(); + } + + public static JavacRemoteProto.Message toMessage(UUID requestId, JavacRemoteProto.Message.Request request) { + return JavacRemoteProto.Message.newBuilder().setMessageType(JavacRemoteProto.Message.Type.REQUEST).setSessionId(toProtoUUID(requestId)).setRequest(request).build(); + } + + public static JavacRemoteProto.Message toMessage(UUID requestId, JavacRemoteProto.Message.Response response) { + return JavacRemoteProto.Message.newBuilder().setMessageType(JavacRemoteProto.Message.Type.RESPONSE).setSessionId(toProtoUUID(requestId)).setResponse(response).build(); + } + + public static JavacRemoteProto.Message toMessage(UUID requestId, JavacRemoteProto.Message.Failure failure) { + return JavacRemoteProto.Message.newBuilder().setMessageType(JavacRemoteProto.Message.Type.FAILURE).setSessionId(toProtoUUID(requestId)).setFailure(failure).build(); + } + + public static JavacRemoteProto.Message.UUID toProtoUUID(UUID requestId) { + return JavacRemoteProto.Message.UUID.newBuilder().setMostSigBits(requestId.getMostSignificantBits()).setLeastSigBits(requestId.getLeastSignificantBits()).build(); + } + public static UUID fromProtoUUID(JavacRemoteProto.Message.UUID requestId) { + return new UUID(requestId.getMostSigBits(), requestId.getLeastSigBits()); + } + + private static JavacRemoteProto.Message.Response.OutputObject.Kind convertKind(JavaFileObject.Kind kind) { + switch (kind) { + case CLASS: + return JavacRemoteProto.Message.Response.OutputObject.Kind.CLASS; + case SOURCE: + return JavacRemoteProto.Message.Response.OutputObject.Kind.SOURCE; + case HTML: + return JavacRemoteProto.Message.Response.OutputObject.Kind.HTML; + default: + return JavacRemoteProto.Message.Response.OutputObject.Kind.OTHER; + } + } + private static JavacRemoteProto.Message.Response.CompileMessage.Kind convertKind(Diagnostic.Kind kind) { + switch (kind) { + case ERROR: + return JavacRemoteProto.Message.Response.CompileMessage.Kind.ERROR; + case MANDATORY_WARNING: + case WARNING: + case NOTE: + return JavacRemoteProto.Message.Response.CompileMessage.Kind.WARNING; + default: + return JavacRemoteProto.Message.Response.CompileMessage.Kind.INFO; + } + } + +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacRemoteProto.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacRemoteProto.java index 24e9e4f8e672..88f8bfa724a5 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacRemoteProto.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacRemoteProto.java @@ -1890,6 +1890,7 @@ public final class JavacRemoteProto { ERROR(0, 1), WARNING(1, 2), INFO(2, 3), + STD_OUT(3, 4), ; @@ -1900,6 +1901,7 @@ public final class JavacRemoteProto { case 1: return ERROR; case 2: return WARNING; case 3: return INFO; + case 4: return STD_OUT; default: return null; } } @@ -2544,12 +2546,12 @@ public final class JavacRemoteProto { public boolean hasClassName() { return hasClassName; } public java.lang.String getClassName() { return className_; } - // optional string source_uri = 6; - public static final int SOURCE_URI_FIELD_NUMBER = 6; - private boolean hasSourceUri; - private java.lang.String sourceUri_ = ""; - public boolean hasSourceUri() { return hasSourceUri; } - public java.lang.String getSourceUri() { return sourceUri_; } + // optional string source_path = 6; + public static final int SOURCE_PATH_FIELD_NUMBER = 6; + private boolean hasSourcePath; + private java.lang.String sourcePath_ = ""; + public boolean hasSourcePath() { return hasSourcePath; } + public java.lang.String getSourcePath() { return sourcePath_; } // optional bytes content = 7; public static final int CONTENT_FIELD_NUMBER = 7; @@ -2585,8 +2587,8 @@ public final class JavacRemoteProto { if (hasClassName()) { output.writeString(5, getClassName()); } - if (hasSourceUri()) { - output.writeString(6, getSourceUri()); + if (hasSourcePath()) { + output.writeString(6, getSourcePath()); } if (hasContent()) { output.writeBytes(7, getContent()); @@ -2619,9 +2621,9 @@ public final class JavacRemoteProto { size += com.google.protobuf.CodedOutputStream .computeStringSize(5, getClassName()); } - if (hasSourceUri()) { + if (hasSourcePath()) { size += com.google.protobuf.CodedOutputStream - .computeStringSize(6, getSourceUri()); + .computeStringSize(6, getSourcePath()); } if (hasContent()) { size += com.google.protobuf.CodedOutputStream @@ -2786,8 +2788,8 @@ public final class JavacRemoteProto { if (other.hasClassName()) { setClassName(other.getClassName()); } - if (other.hasSourceUri()) { - setSourceUri(other.getSourceUri()); + if (other.hasSourcePath()) { + setSourcePath(other.getSourcePath()); } if (other.hasContent()) { setContent(other.getContent()); @@ -2835,7 +2837,7 @@ public final class JavacRemoteProto { break; } case 50: { - setSourceUri(input.readString()); + setSourcePath(input.readString()); break; } case 58: { @@ -2952,24 +2954,24 @@ public final class JavacRemoteProto { return this; } - // optional string source_uri = 6; - public boolean hasSourceUri() { - return result.hasSourceUri(); + // optional string source_path = 6; + public boolean hasSourcePath() { + return result.hasSourcePath(); } - public java.lang.String getSourceUri() { - return result.getSourceUri(); + public java.lang.String getSourcePath() { + return result.getSourcePath(); } - public Builder setSourceUri(java.lang.String value) { + public Builder setSourcePath(java.lang.String value) { if (value == null) { throw new NullPointerException(); } - result.hasSourceUri = true; - result.sourceUri_ = value; + result.hasSourcePath = true; + result.sourcePath_ = value; return this; } - public Builder clearSourceUri() { - result.hasSourceUri = false; - result.sourceUri_ = getDefaultInstance().getSourceUri(); + public Builder clearSourcePath() { + result.hasSourcePath = false; + result.sourcePath_ = getDefaultInstance().getSourcePath(); return this; } @@ -3027,6 +3029,13 @@ public final class JavacRemoteProto { public boolean hasOutputObject() { return hasOutputObject; } public org.jetbrains.jps.javac.JavacRemoteProto.Message.Response.OutputObject getOutputObject() { return outputObject_; } + // optional bool completion_status = 4; + public static final int COMPLETION_STATUS_FIELD_NUMBER = 4; + private boolean hasCompletionStatus; + private boolean completionStatus_ = false; + public boolean hasCompletionStatus() { return hasCompletionStatus; } + public boolean getCompletionStatus() { return completionStatus_; } + private void initFields() { responseType_ = org.jetbrains.jps.javac.JavacRemoteProto.Message.Response.Type.BUILD_MESSAGE; compileMessage_ = org.jetbrains.jps.javac.JavacRemoteProto.Message.Response.CompileMessage.getDefaultInstance(); @@ -3055,6 +3064,9 @@ public final class JavacRemoteProto { if (hasOutputObject()) { output.writeMessage(3, getOutputObject()); } + if (hasCompletionStatus()) { + output.writeBool(4, getCompletionStatus()); + } } private int memoizedSerializedSize = -1; @@ -3075,6 +3087,10 @@ public final class JavacRemoteProto { size += com.google.protobuf.CodedOutputStream .computeMessageSize(3, getOutputObject()); } + if (hasCompletionStatus()) { + size += com.google.protobuf.CodedOutputStream + .computeBoolSize(4, getCompletionStatus()); + } memoizedSerializedSize = size; return size; } @@ -3228,6 +3244,9 @@ public final class JavacRemoteProto { if (other.hasOutputObject()) { mergeOutputObject(other.getOutputObject()); } + if (other.hasCompletionStatus()) { + setCompletionStatus(other.getCompletionStatus()); + } return this; } @@ -3272,6 +3291,10 @@ public final class JavacRemoteProto { setOutputObject(subBuilder.buildPartial()); break; } + case 32: { + setCompletionStatus(input.readBool()); + break; + } } } } @@ -3372,6 +3395,24 @@ public final class JavacRemoteProto { return this; } + // optional bool completion_status = 4; + public boolean hasCompletionStatus() { + return result.hasCompletionStatus(); + } + public boolean getCompletionStatus() { + return result.getCompletionStatus(); + } + public Builder setCompletionStatus(boolean value) { + result.hasCompletionStatus = true; + result.completionStatus_ = value; + return this; + } + public Builder clearCompletionStatus() { + result.hasCompletionStatus = false; + result.completionStatus_ = false; + return this; + } + // @@protoc_insertion_point(builder_scope:org.jetbrains.javac.Message.Response) } diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java index 42bea77a9e56..c7fbd6a58b48 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java @@ -10,8 +10,13 @@ import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder; import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder; import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; +import org.jetbrains.annotations.NotNull; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; +import java.io.File; import java.net.InetSocketAddress; +import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -97,10 +102,99 @@ public class JavacServer { } } + + public static JavacRemoteProto.Message compile(final ChannelHandlerContext ctx, final UUID sessionId, List options, Collection files, Collection classpath, Collection platformCp, Collection sourcePath, Map> outs) { + final DiagnosticOutputConsumer diagnostic = new DiagnosticOutputConsumer() { + public void outputLineAvailable(String line) { + Channels.write(ctx.getChannel(), JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createStdOutputResponse(line))); + } + + public void report(Diagnostic diagnostic) { + final Diagnostic.Kind kind = diagnostic.getKind(); + final JavaFileObject source = diagnostic.getSource(); + final String srcPath = source != null? source.toUri().getPath() : null; + final JavacRemoteProto.Message.Response response = JavacProtoUtil.createBuildMessageResponse( + kind, diagnostic.getMessage(Locale.US), srcPath, diagnostic.getLineNumber(), diagnostic.getColumnNumber(), diagnostic.getStartPosition(), diagnostic.getEndPosition() + ); + Channels.write(ctx.getChannel(), JavacProtoUtil.toMessage(sessionId, response)); + } + }; + + final OutputFileConsumer outputSink = new OutputFileConsumer() { + public void save(@NotNull OutputFileObject fileObject) { + Channels.write(ctx.getChannel(), JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createOutputObjectResponse(fileObject))); + } + }; + + final boolean rc = JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnostic, outputSink, null/*todo*/); + + return JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createBuildCompletedResponse(rc)); + } + + + public static void cancelBuild() { + // todo + } + + private static List toFiles(List paths) { + final List files = new ArrayList(paths.size()); + for (String path : paths) { + files.add(new File(path)); + } + return files; + } + private static class CompilationRequestsHandler extends SimpleChannelHandler { public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { - // todo + final JavacRemoteProto.Message msg = (JavacRemoteProto.Message)e.getMessage(); + final UUID sessionId = JavacProtoUtil.fromProtoUUID(msg.getSessionId()); + final JavacRemoteProto.Message.Type messageType = msg.getMessageType(); + + JavacRemoteProto.Message reply = null; + + try { + if (messageType == JavacRemoteProto.Message.Type.REQUEST) { + final JavacRemoteProto.Message.Request request = msg.getRequest(); + final JavacRemoteProto.Message.Request.Type requestType = request.getRequestType(); + if (requestType == JavacRemoteProto.Message.Request.Type.COMPILE) { + final List options = request.getOptionList(); + final List files = toFiles(request.getFileList()); + final List cp = toFiles(request.getClasspathList()); + final List platformCp = toFiles(request.getPlatformClasspathList()); + final List srcPath = toFiles(request.getSourcepathList()); + + final Map> outs = new HashMap>(); + for (JavacRemoteProto.Message.Request.OutputGroup outputGroup : request.getOutputList()) { + final Set srcRoots = new HashSet(); + for (String root : outputGroup.getSourceRootsList()) { + srcRoots.add(new File(root)); + } + outs.put(new File(outputGroup.getOutputRoot()), srcRoots); + } + + reply = compile(ctx, sessionId, options, files, cp, platformCp, srcPath, outs); + } + else if (requestType == JavacRemoteProto.Message.Request.Type.CANCEL){ + cancelBuild(); + } + else if (requestType == JavacRemoteProto.Message.Request.Type.SHUTDOWN){ + cancelBuild(); + System.exit(0); + } + else { + reply = JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createFailure("Unsupported request type: " + requestType.name())); + } + } + else { + reply = JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createFailure("Unsupported message: " + messageType.name())); + } + } + finally { + if (reply != null) { + Channels.write(ctx.getChannel(), reply); + } + } } public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { @@ -114,4 +208,4 @@ public class JavacServer { super.channelOpen(ctx, e); } } -} +} \ No newline at end of file diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerClient.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerClient.java index bfd8f705f778..048482b3793f 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerClient.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerClient.java @@ -50,16 +50,8 @@ public class JavacServerClient extends SimpleProtobufClient modules, Collection paths, final BuildParameters params, final MessageHandler msgHandler, BuildCanceledStatus cs) throws Throwable{ + public void startBuild(String projectPath, Set modules, Collection paths, final BuildParameters params, final MessageHandler msgHandler, CanceledStatus cs) throws Throwable{ final String projectName = getProjectName(projectPath); BuildType buildType = params.buildType; diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java index e0e34cf4dbde..fa0eed64d836 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/Mappings.java @@ -758,7 +758,7 @@ public class Mappings { } } - return false; + return true; } public boolean differentiate(final Mappings delta, diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/compiler.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/compiler.xml new file mode 100644 index 000000000000..a1b41c52c724 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/compiler.xml @@ -0,0 +1,21 @@ + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/copyright/profiles_settings.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/copyright/profiles_settings.xml new file mode 100644 index 000000000000..3572571ad83c --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/copyright/profiles_settings.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/encodings.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/encodings.xml new file mode 100644 index 000000000000..e206d70d8595 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/encodings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/misc.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/misc.xml new file mode 100644 index 000000000000..47c32a7a7e1a --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/misc.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IDEA jdk + + + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/modules.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/modules.xml new file mode 100644 index 000000000000..9ccf8fb28b95 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/modules.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/scopes/scope_settings.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/scopes/scope_settings.xml new file mode 100644 index 000000000000..922003b8433b --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/scopes/scope_settings.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/uiDesigner.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/uiDesigner.xml new file mode 100644 index 000000000000..3b0002030884 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/uiDesigner.xml @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/vcs.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/vcs.xml new file mode 100644 index 000000000000..def6a6a18457 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/workspace.xml b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/workspace.xml new file mode 100644 index 000000000000..21a690ec1b56 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/.idea/workspace.xml @@ -0,0 +1,285 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + localhost + 5050 + + + + + + 1327316965641 + 1327316965641 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/NonIncremental2.iml b/jps/testData/incremental/fieldProperties/nonIncremental2/NonIncremental2.iml new file mode 100644 index 000000000000..d5c074327501 --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/NonIncremental2.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2/src/B/N.java b/jps/testData/incremental/fieldProperties/nonIncremental2/src/B/N.java new file mode 100644 index 000000000000..3ca79581f8ab --- /dev/null +++ b/jps/testData/incremental/fieldProperties/nonIncremental2/src/B/N.java @@ -0,0 +1,14 @@ +package B; + +import A.C; + +/** + * Created by IntelliJ IDEA. + * User: db + * Date: 23.01.12 + * Time: 13:52 + * To change this template use File | Settings | File Templates. + */ +public class N { + int y = new C().get(); +} diff --git a/jps/testSrc/org/jetbrains/ether/TestFieldProperties.java b/jps/testSrc/org/jetbrains/ether/TestFieldProperties.java index 88cc35e89ad1..db0d13420748 100644 --- a/jps/testSrc/org/jetbrains/ether/TestFieldProperties.java +++ b/jps/testSrc/org/jetbrains/ether/TestFieldProperties.java @@ -75,4 +75,12 @@ public class TestFieldProperties extends IncrementalTestCase { public void testTypeChange2() throws Exception { doTest(); } + + public void testNonIncremental1() throws Exception { + doTest(); + } + + public void testNonIncremental2() throws Exception { + doTest(); + } } diff --git a/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java b/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java index 236ec3f4b68d..d0153c3796aa 100644 --- a/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java +++ b/platform/core-impl/src/com/intellij/openapi/components/impl/ComponentManagerImpl.java @@ -31,10 +31,10 @@ import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.ReflectionCache; import com.intellij.util.containers.ConcurrentHashMap; -import com.intellij.util.containers.HashMap; import com.intellij.util.messages.MessageBus; import com.intellij.util.messages.MessageBusFactory; import com.intellij.util.pico.IdeaPicoContainer; +import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -415,13 +415,13 @@ public abstract class ComponentManagerImpl extends UserDataHolderBase implements } protected class ComponentsRegistry { - private final Map myInterfaceToLockMap = new HashMap(); - private final Map myInterfaceToClassMap = new HashMap(); + private final Map myInterfaceToLockMap = new THashMap(); + private final Map myInterfaceToClassMap = new THashMap(); private final ArrayList myComponentInterfaces = new ArrayList(); // keeps order of component's registration - private final Map myNameToComponent = new HashMap(); + private final Map myNameToComponent = new THashMap(); private final List myComponentConfigs = new ArrayList(); private final List myImplementations = new ArrayList(); - private final Map myComponentClassToConfig = new java.util.HashMap(); + private final Map myComponentClassToConfig = new THashMap(); private boolean myClassesLoaded = false; private void loadClasses() { diff --git a/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java b/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java index 6f833f46e71c..04642acee638 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/Extensions.java @@ -19,13 +19,13 @@ import com.intellij.openapi.Disposable; import com.intellij.openapi.extensions.impl.ExtensionsAreaImpl; import com.intellij.openapi.util.Disposer; import com.intellij.util.containers.MultiMap; +import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import java.util.Collection; -import java.util.HashMap; import java.util.Map; public class Extensions { @@ -33,11 +33,11 @@ public class Extensions { public static final ExtensionPointName AREA_LISTENER_EXTENSION_POINT = new ExtensionPointName("com.intellij.arealistener"); - private static final Map ourAreaInstance2area = new HashMap(); + private static final Map ourAreaInstance2area = new THashMap(); private static ExtensionsAreaImpl ourRootArea = createRootArea(); private static final MultiMap ourAreaClass2instances = new MultiMap(); - private static final Map ourAreaInstance2class = new HashMap(); - private static final Map ourAreaClass2Configuration = new HashMap(); + private static final Map ourAreaInstance2class = new THashMap(); + private static final Map ourAreaClass2Configuration = new THashMap(); private static ExtensionsAreaImpl createRootArea() { ExtensionsAreaImpl rootArea = new ExtensionsAreaImpl(null, null, null, ourLogger); diff --git a/platform/lang-api/src/com/intellij/codeInsight/daemon/HighlightDisplayKey.java b/platform/lang-api/src/com/intellij/codeInsight/daemon/HighlightDisplayKey.java index 9f7d7212ce2c..c9cfba5680e1 100644 --- a/platform/lang-api/src/com/intellij/codeInsight/daemon/HighlightDisplayKey.java +++ b/platform/lang-api/src/com/intellij/codeInsight/daemon/HighlightDisplayKey.java @@ -17,7 +17,7 @@ package com.intellij.codeInsight.daemon; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Comparing; -import com.intellij.util.containers.HashMap; +import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -27,10 +27,10 @@ import java.util.Map; public class HighlightDisplayKey { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.daemon.HighlightDisplayKey"); - private static final HashMap ourNameToKeyMap = new HashMap(); - private static final HashMap ourIdToKeyMap = new HashMap(); - private static final Map ourKeyToDisplayNameMap = new HashMap(); - private static final Map ourKeyToAlternativeIDMap = new HashMap(); + private static final Map ourNameToKeyMap = new THashMap(); + private static final Map ourIdToKeyMap = new THashMap(); + private static final Map ourKeyToDisplayNameMap = new THashMap(); + private static final Map ourKeyToAlternativeIDMap = new THashMap(); private final String myName; private final String myID; diff --git a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java index 33683e65c65e..23076fc95046 100644 --- a/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java +++ b/platform/lang-api/src/com/intellij/openapi/projectRoots/JdkUtil.java @@ -33,6 +33,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.encoding.EncodingManager; import com.intellij.util.PathUtil; import com.intellij.util.lang.UrlClassLoader; +import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -189,6 +190,7 @@ public class JdkUtil { final Class ourUrlClassLoader = UrlClassLoader.class; if (ourUrlClassLoader.getName().equals(parametersList.getPropertyValue("java.system.class.loader"))) { classpath += File.pathSeparator + PathUtil.getJarPathForClass(ourUrlClassLoader); + classpath += File.pathSeparator + PathUtil.getJarPathForClass(THashMap.class); } commandLine.addParameter("-classpath"); diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java index 924fcea61047..85831fe32940 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ex/InspectionProfileImpl.java @@ -42,6 +42,7 @@ import com.intellij.profile.codeInspection.InspectionProfileManager; import com.intellij.profile.codeInspection.SeverityProvider; import com.intellij.psi.PsiElement; import com.intellij.psi.search.scope.packageSet.NamedScope; +import gnu.trove.THashMap; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; @@ -59,7 +60,7 @@ public class InspectionProfileImpl extends ProfileEx implements ModifiableModel, private static final Logger LOG = Logger.getInstance("#com.intellij.codeInspection.ex.InspectionProfileImpl"); @NonNls private static final String VALID_VERSION = "1.0"; - private Map myTools = new HashMap(); + private Map myTools = new THashMap(); private Map myDisplayLevelMap; private Map myDeinstalledInspectionsSettings = new TreeMap(); diff --git a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java index 1d0e1ba07349..2961d4f1727b 100644 --- a/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java +++ b/platform/lang-impl/src/com/intellij/ide/navigationToolbar/ui/AbstractNavBarUI.java @@ -23,6 +23,7 @@ import com.intellij.util.containers.HashMap; import com.intellij.util.ui.JBInsets; import com.intellij.util.ui.SameColor; import com.intellij.util.ui.UIUtil; +import gnu.trove.THashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -37,7 +38,7 @@ import java.util.Map; */ public abstract class AbstractNavBarUI implements NavBarUI { - private Map> myCache = new HashMap>(); + private Map> myCache = new THashMap>(); private enum ImageType { INACTIVE, NEXT_ACTIVE, ACTIVE, INACTIVE_FLOATING, NEXT_ACTIVE_FLOATING, ACTIVE_FLOATING, diff --git a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java index 4a2be96f500a..41d7a8c36af0 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesDialog.java @@ -19,18 +19,22 @@ package com.intellij.refactoring.copy; import com.intellij.ide.util.DirectoryUtil; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; +import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; +import com.intellij.openapi.ui.TextComponentAccessor; import com.intellij.openapi.ui.impl.DialogWrapperPeerImpl; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiManager; import com.intellij.refactoring.RefactoringBundle; -import com.intellij.ui.*; +import com.intellij.ui.DocumentAdapter; +import com.intellij.ui.RecentsManager; +import com.intellij.ui.TextFieldWithHistoryWithBrowseButton; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NonNls; @@ -39,10 +43,11 @@ import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import java.awt.*; import java.io.File; +import java.util.List; class CopyFilesOrDirectoriesDialog extends DialogWrapper{ private JLabel myInformationLabel; - private EditorComboWithBrowseButton myTargetDirectoryField; + private TextFieldWithHistoryWithBrowseButton myTargetDirectoryField; private JTextField myNewNameField; private final Project myProject; private final boolean myShowDirectoryField; @@ -95,7 +100,7 @@ class CopyFilesOrDirectoriesDialog extends DialogWrapper{ } if (myShowDirectoryField) { - myTargetDirectoryField.prependItem(defaultTargetDirectory == null ? "" : defaultTargetDirectory.getVirtualFile().getPresentableUrl()); + myTargetDirectoryField.getChildComponent().setText(defaultTargetDirectory == null ? "" : defaultTargetDirectory.getVirtualFile().getPresentableUrl()); } validateOKButton(); } @@ -163,18 +168,24 @@ class CopyFilesOrDirectoriesDialog extends DialogWrapper{ if (myShowDirectoryField) { panel.add(new JLabel(RefactoringBundle.message("copy.files.to.directory.label")), new GridBagConstraints(0,2,1,1,0,0,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(4,8,4,8),0,0)); - myTargetDirectoryField = new EditorComboWithBrowseButton(null, "", myProject, - RECENT_KEYS); + myTargetDirectoryField = new TextFieldWithHistoryWithBrowseButton(); + final List recentEntries = RecentsManager.getInstance(myProject).getRecentEntries(RECENT_KEYS); + + if (recentEntries != null) { + myTargetDirectoryField.getChildComponent().setHistory(recentEntries); + } + final FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); myTargetDirectoryField.addBrowseFolderListener(RefactoringBundle.message("select.target.directory"), RefactoringBundle.message("the.file.will.be.copied.to.this.directory"), - myProject, FileChooserDescriptorFactory.createSingleFolderDescriptor(), - EditorComboBox.COMPONENT_ACCESSOR); + myProject, descriptor, + TextComponentAccessor.TEXT_FIELD_WITH_HISTORY_WHOLE_TEXT); + myTargetDirectoryField.setTextFieldPreferredWidth(60); panel.add(myTargetDirectoryField, new GridBagConstraints(1,2,1,1,1,0,GridBagConstraints.WEST,GridBagConstraints.HORIZONTAL,new Insets(4,0,4,8),0,0)); - myTargetDirectoryField.getChildComponent().getDocument().addDocumentListener(new com.intellij.openapi.editor.event.DocumentAdapter() { + myTargetDirectoryField.getChildComponent().addDocumentListener(new DocumentAdapter() { @Override - public void documentChanged(com.intellij.openapi.editor.event.DocumentEvent e) { + protected void textChanged(DocumentEvent e) { validateOKButton(); } }); @@ -202,7 +213,7 @@ class CopyFilesOrDirectoriesDialog extends DialogWrapper{ } if (myShowDirectoryField) { - final String targetDirectoryName = myTargetDirectoryField.getText(); + final String targetDirectoryName = myTargetDirectoryField.getChildComponent().getText(); if (targetDirectoryName.length() == 0) { Messages.showMessageDialog(myProject, RefactoringBundle.message("no.target.directory.specified"), RefactoringBundle.message("error.title"), Messages.getErrorIcon()); @@ -236,7 +247,7 @@ class CopyFilesOrDirectoriesDialog extends DialogWrapper{ private void validateOKButton() { if (myShowDirectoryField) { - if (myTargetDirectoryField.getText().length() == 0) { + if (myTargetDirectoryField.getChildComponent().getText().length() == 0) { setOKActionEnabled(false); return; } diff --git a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java index 0c00a68dc00a..395f8a5fd4cd 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/move/moveFilesOrDirectories/MoveFilesOrDirectoriesDialog.java @@ -27,7 +27,6 @@ import com.intellij.openapi.fileChooser.FileChooserFactory; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.keymap.KeymapUtil; import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.ComponentWithBrowseButton; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.TextComponentAccessor; import com.intellij.openapi.util.Disposer; @@ -40,6 +39,8 @@ import com.intellij.refactoring.RefactoringSettings; import com.intellij.refactoring.util.CommonRefactoringUtil; import com.intellij.ui.DocumentAdapter; import com.intellij.ui.NonFocusableCheckBox; +import com.intellij.ui.RecentsManager; +import com.intellij.ui.TextFieldWithHistoryWithBrowseButton; import com.intellij.util.IncorrectOperationException; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NonNls; @@ -48,6 +49,7 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.*; import java.io.File; +import java.util.List; public class MoveFilesOrDirectoriesDialog extends DialogWrapper{ @NonNls private static final String RECENT_KEYS = "MoveFile.RECENT_KEYS"; @@ -57,7 +59,7 @@ public class MoveFilesOrDirectoriesDialog extends DialogWrapper{ } private JLabel myNameLabel; - private ComponentWithBrowseButton myTargetDirectoryField; + private TextFieldWithHistoryWithBrowseButton myTargetDirectoryField; private String myHelpID; private final Project myProject; private final Callback myCallback; @@ -99,14 +101,18 @@ public class MoveFilesOrDirectoriesDialog extends DialogWrapper{ panel.add(new JLabel(RefactoringBundle.message("move.files.to.directory.label")), c); c.insets.top = 0; - myTargetDirectoryField = new ComponentWithBrowseButton(new JTextField(), null); + myTargetDirectoryField = new TextFieldWithHistoryWithBrowseButton(); + final List recentEntries = RecentsManager.getInstance(myProject).getRecentEntries(RECENT_KEYS); + if (recentEntries != null) { + myTargetDirectoryField.getChildComponent().setHistory(recentEntries); + } final FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); myTargetDirectoryField.addBrowseFolderListener(RefactoringBundle.message("select.target.directory"), RefactoringBundle.message("the.file.will.be.moved.to.this.directory"), myProject, descriptor, - TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT); - final JTextField textField = myTargetDirectoryField.getChildComponent(); + TextComponentAccessor.TEXT_FIELD_WITH_HISTORY_WHOLE_TEXT); + final JTextField textField = myTargetDirectoryField.getChildComponent().getTextEditor(); FileChooserFactory.getInstance().installFileCompletion(textField, descriptor, true, getDisposable()); myTargetDirectoryField.setTextFieldPreferredWidth(60); c.insets.left = 0; @@ -180,6 +186,7 @@ public class MoveFilesOrDirectoriesDialog extends DialogWrapper{ protected void doOKAction() { //myTargetDirectoryField.getChildComponent().addCurrentTextToHistory(); + RecentsManager.getInstance(myProject).registerRecentEntry(RECENT_KEYS, myTargetDirectoryField.getChildComponent().getText()); RefactoringSettings.getInstance().MOVE_SEARCH_FOR_REFERENCES_FOR_FILE = myCbSearchForReferences.isSelected(); CommandProcessor.getInstance().executeCommand(myProject, new Runnable() { public void run() { diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java index 75491603c11a..a702e4e0098f 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileBasedIndex.java @@ -68,10 +68,7 @@ import com.intellij.util.io.*; import com.intellij.util.io.storage.HeavyProcessLatch; import com.intellij.util.messages.MessageBus; import com.intellij.util.messages.MessageBusConnection; -import gnu.trove.TIntHashSet; -import gnu.trove.TIntIterator; -import gnu.trove.TIntProcedure; -import gnu.trove.TObjectIntHashMap; +import gnu.trove.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -93,29 +90,29 @@ public class FileBasedIndex implements ApplicationComponent { private static final Logger LOG = Logger.getInstance("#com.intellij.util.indexing.FileBasedIndex"); @NonNls private static final String CORRUPTION_MARKER_NAME = "corruption.marker"; - private final Map, Pair, InputFilter>> myIndices = new HashMap, Pair, InputFilter>>(); - private final Map, Semaphore> myUnsavedDataIndexingSemaphores = new HashMap, Semaphore>(); + private final Map, Pair, InputFilter>> myIndices = new THashMap, Pair, InputFilter>>(); + private final Map, Semaphore> myUnsavedDataIndexingSemaphores = new THashMap, Semaphore>(); private final TObjectIntHashMap> myIndexIdToVersionMap = new TObjectIntHashMap>(); - private final Set> myNotRequiringContentIndices = new HashSet>(); - private final Set> myRequiringContentIndices = new HashSet>(); - private final Set myNoLimitCheckTypes = new HashSet(); + private final Set> myNotRequiringContentIndices = new THashSet>(); + private final Set> myRequiringContentIndices = new THashSet>(); + private final Set myNoLimitCheckTypes = new THashSet(); private final PerIndexDocumentVersionMap myLastIndexedDocStamps = new PerIndexDocumentVersionMap(); private final ChangedFilesCollector myChangedFilesCollector; private final List myIndexableSets = ContainerUtil.createEmptyCOWList(); - private final Map myIndexableSetToProjectMap = new HashMap(); + private final Map myIndexableSetToProjectMap = new THashMap(); private static final int OK = 1; private static final int REQUIRES_REBUILD = 2; private static final int REBUILD_IN_PROGRESS = 3; - private static final Map, AtomicInteger> ourRebuildStatus = new HashMap, AtomicInteger>(); + private static final Map, AtomicInteger> ourRebuildStatus = new THashMap, AtomicInteger>(); private final VirtualFileManagerEx myVfManager; private final FileDocumentManager myFileDocumentManager; private final FileTypeManager myFileTypeManager; private final ConcurrentHashSet> myUpToDateIndices = new ConcurrentHashSet>(); - private final Map myTransactionMap = new HashMap(); + private final Map myTransactionMap = new THashMap(); private static final int ALREADY_PROCESSED = 0x02; @Nullable private final String myConfigPath; diff --git a/platform/platform-api/src/com/intellij/openapi/ui/FixedSizeButton.java b/platform/platform-api/src/com/intellij/openapi/ui/FixedSizeButton.java index ce4414a6fad8..10d29ebd7a40 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/FixedSizeButton.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/FixedSizeButton.java @@ -15,8 +15,8 @@ */ package com.intellij.openapi.ui; -import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.IconLoader; +import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -43,25 +43,27 @@ public class FixedSizeButton extends JButton { else { setText("."); } - mySize=size; - myComponent=component; + mySize = size; + myComponent = component; setMargin(new Insets(0, 0, 0, 0)); setDefaultCapable(false); setFocusable(false); - if (SystemInfo.isMac) { + if (UIUtil.isUnderAquaLookAndFeel() && size == -1) { putClientProperty("JButton.buttonType", "square"); } } /** * Creates the FixedSizeButton with specified size. - * @throws java.lang.IllegalArgumentException if size isn't - * positive integer number. + * + * @throws java.lang.IllegalArgumentException + * if size isn't + * positive integer number. */ - public FixedSizeButton(int size){ - this(size,null); - if(size<=0){ - throw new IllegalArgumentException("wrong size: "+size); + public FixedSizeButton(int size) { + this(size, null); + if (size <= 0) { + throw new IllegalArgumentException("wrong size: " + size); } } @@ -74,21 +76,23 @@ public class FixedSizeButton extends JButton { this(-1, component); } - public Dimension getMinimumSize(){ + public Dimension getMinimumSize() { return getPreferredSize(); } - public Dimension getMaximumSize(){ + public Dimension getMaximumSize() { return getPreferredSize(); } - public Dimension getPreferredSize(){ - if(myComponent!=null){ - int size=myComponent.getPreferredSize().height; - return new Dimension(size,size); - }else if(mySize!=-1){ - return new Dimension(mySize,mySize); - }else{ + public Dimension getPreferredSize() { + if (myComponent != null) { + int size = myComponent.getPreferredSize().height; + return new Dimension(size, size); + } + else if (mySize != -1) { + return new Dimension(mySize, mySize); + } + else { return super.getPreferredSize(); } } diff --git a/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java b/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java index ce082e39a706..5982c5be0bf9 100644 --- a/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java +++ b/platform/platform-api/src/com/intellij/ui/ScrollPaneFactory.java @@ -44,4 +44,13 @@ public class ScrollPaneFactory { public static JScrollPane createScrollPane(Component view, int vsbPolicy, int hsbPolicy) { return new JBScrollPane(view, vsbPolicy, hsbPolicy); } + + public static JScrollPane createScrollPane(Component view, boolean withoutBorder) { + JBScrollPane scrollPane = new JBScrollPane(view); + if (withoutBorder) { + scrollPane.setBorder(null); + } + return scrollPane; + + } } diff --git a/platform/platform-api/src/com/intellij/ui/TextFieldWithHistoryWithBrowseButton.java b/platform/platform-api/src/com/intellij/ui/TextFieldWithHistoryWithBrowseButton.java new file mode 100644 index 000000000000..9534bf047de9 --- /dev/null +++ b/platform/platform-api/src/com/intellij/ui/TextFieldWithHistoryWithBrowseButton.java @@ -0,0 +1,53 @@ +/* + * 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.ui; + +import com.intellij.openapi.fileChooser.FileChooserDescriptor; +import com.intellij.openapi.fileChooser.FileChooserFactory; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.ComponentWithBrowseButton; +import com.intellij.openapi.ui.TextComponentAccessor; +import org.jetbrains.annotations.Nullable; + +/** + * User: anna + */ +public class TextFieldWithHistoryWithBrowseButton extends ComponentWithBrowseButton { + public TextFieldWithHistoryWithBrowseButton() { + super(new TextFieldWithHistory(), null); + } + + @Override + public void addBrowseFolderListener(@Nullable String title, + @Nullable String description, + @Nullable Project project, + FileChooserDescriptor fileChooserDescriptor, + TextComponentAccessor accessor) { + super.addBrowseFolderListener(title, description, project, fileChooserDescriptor, accessor); + FileChooserFactory.getInstance().installFileCompletion(getChildComponent().getTextEditor(), fileChooserDescriptor, false, project); + } + + @Override + public void addBrowseFolderListener(@Nullable String title, + @Nullable String description, + @Nullable Project project, + FileChooserDescriptor fileChooserDescriptor, + TextComponentAccessor accessor, + boolean autoRemoveOnHide) { + super.addBrowseFolderListener(title, description, project, fileChooserDescriptor, accessor, autoRemoveOnHide); + FileChooserFactory.getInstance().installFileCompletion(getChildComponent().getTextEditor(), fileChooserDescriptor, false, project); + } +} diff --git a/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java b/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java index 67ef51bd45b5..c1aeecb5e5eb 100644 --- a/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java +++ b/platform/platform-impl/src/com/intellij/ide/diff/VirtualFileDiffElement.java @@ -224,12 +224,16 @@ public class VirtualFileDiffElement extends DiffElement { @Override public void refresh(boolean userInitiated) { + refreshFile(userInitiated, myFile); + } + + public static void refreshFile(boolean userInitiated, VirtualFile virtualFile) { if (userInitiated) { final List docsToSave = new ArrayList(); final FileDocumentManager manager = FileDocumentManager.getInstance(); for (Document document : manager.getUnsavedDocuments()) { VirtualFile file = manager.getFile(document); - if (file!=null && VfsUtilCore.isAncestor(myFile, file, false)) { + if (file!=null && VfsUtilCore.isAncestor(virtualFile, file, false)) { docsToSave.add(document); } } @@ -251,9 +255,9 @@ public class VirtualFileDiffElement extends DiffElement { }, ModalityState.defaultModalityState()); } } - if (!FileWatcher.getInstance().isWatched(myFile)) { - ((NewVirtualFile)myFile).markDirtyRecursively(); + if (!FileWatcher.getInstance().isWatched(virtualFile)) { + ((NewVirtualFile)virtualFile).markDirtyRecursively(); } - myFile.refresh(false, true); + virtualFile.refresh(false, true); } } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java index e72b7a38cbff..dd89f8039d3f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/newEditor/OptionsEditor.java @@ -292,6 +292,11 @@ public class OptionsEditor extends JPanel implements DataProvider, Place.Navigat return myTree.select(configurable); } + @NotNull + public List getPathToRoot(@NotNull Configurable configurable) { + return myTree.getPathToRoot(configurable); + } + private float readProportion(final float defaultValue, final String propertyName) { float proportion = defaultValue; try { diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java index e6f3a2ab49e5..80c55ad7a67e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java @@ -42,7 +42,9 @@ import com.intellij.util.containers.StripedLockIntObjectConcurrentHashMap; import com.intellij.util.io.DupOutputStream; import com.intellij.util.io.ReplicatorInputStream; import com.intellij.util.messages.MessageBus; +import gnu.trove.THashMap; import gnu.trove.TIntHashSet; +import gnu.trove.TIntObjectHashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -69,8 +71,8 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { private final MessageBus myEventsBus; - private final Map myRoots = new HashMap(); - private final Map myRootsById = new HashMap(); + private final Map myRoots = new THashMap(); + private final TIntObjectHashMap myRootsById = new TIntObjectHashMap(); private VirtualFileSystemEntry myFakeRoot; private final Object INPUT_LOCK = new Object(); diff --git a/platform/platform-resources-en/src/messages/ApplicationBundle.properties b/platform/platform-resources-en/src/messages/ApplicationBundle.properties index 6d98d4313ea2..8b853b5fa2d2 100644 --- a/platform/platform-resources-en/src/messages/ApplicationBundle.properties +++ b/platform/platform-resources-en/src/messages/ApplicationBundle.properties @@ -384,8 +384,8 @@ checkbox.highlight.current.scope=Highlight current scope combobox.paste.insert.imports=&Insert imports on paste: combobox.paste.reformat=Reformat on paste: group.advanced.mouse.usages=Mouse -checkbox.enable.ctrl.mousewheel.changes.font.size=Change font size (Zoom) with Ctrl+MouseWheel -checkbox.enable.ctrl.mousewheel.changes.font.size.macos=Enable Command+MouseWheel changes font size +checkbox.enable.ctrl.mousewheel.changes.font.size=Change font size (Zoom) with Ctrl+MouseWheel +checkbox.enable.ctrl.mousewheel.changes.font.size.macos=Change font size (Zoom) with Command+MouseWheel checkbox.enable.drag.n.drop.functionality.in.editor=Enable Drag'n'Drop functionality in editor checkbox.honor.camelhumps.words.settings.on.double.click=Honor "CamelHumps" words settings when selecting on
double click group.smart.keys=Smart Keys diff --git a/platform/platform-resources/src/META-INF/LangExtensions.xml b/platform/platform-resources/src/META-INF/LangExtensions.xml index 363d08530d90..c5d4161b65ad 100644 --- a/platform/platform-resources/src/META-INF/LangExtensions.xml +++ b/platform/platform-resources/src/META-INF/LangExtensions.xml @@ -364,7 +364,7 @@ - + diff --git a/platform/util/src/com/intellij/util/lang/ClassPath.java b/platform/util/src/com/intellij/util/lang/ClassPath.java index 93a8a468b1bc..563517ee623e 100644 --- a/platform/util/src/com/intellij/util/lang/ClassPath.java +++ b/platform/util/src/com/intellij/util/lang/ClassPath.java @@ -118,18 +118,8 @@ class ClassPath { try { int i; if (myCanUseCache) { - List loaders = myCache.getLoaders(s); - for (int j = 0, size = loaders.size(); j < size; ++j ) { - final Loader loader = loaders.get(j); - if (!myCache.loaderHasName(s, loader)) continue; - final Resource resource = loader.getResource(s, flag); - if (resource != null) { - if (ourDumpOrder) { - printOrder(loader, s, resource); - } - return resource; - } - } + Resource prevResource = myCache.iterateLoaders(s, flag ? checkedIterator:uncheckedIterator, s, this); + if (prevResource != null) return prevResource; synchronized (myUrls) { if (myUrls.isEmpty()) return null; @@ -165,6 +155,7 @@ class ClassPath { @Nullable private synchronized Loader getLoader(int i) { while (myLoaders.size() < i + 1) { + boolean lastOne; URL url; synchronized (myUrls) { if (myUrls.empty()) { @@ -172,6 +163,7 @@ class ClassPath { return null; } url = myUrls.pop(); + lastOne = myUrls.isEmpty(); } if (myLoadersMap.containsKey(url)) continue; @@ -187,6 +179,9 @@ class ClassPath { myLoaders.add(loader); myLoadersMap.put(url, loader); + if (lastOne && myCanUseCache) { + myCache.nameSymbolsLoaded(); + } } return myLoaders.get(i); @@ -231,6 +226,7 @@ class ClassPath { } private void push(URL[] urls) { + if (urls.length == 0) return; synchronized (myUrls) { for (int i = urls.length - 1; i >= 0; i--) myUrls.push(urls[i]); @@ -252,10 +248,10 @@ class ClassPath { if (myCanUseCache) { synchronized (myUrls) { if (myUrls.isEmpty()) { - loaders = myCache.getLoaders(name); + loaders = new SmartList(); + myCache.iterateLoaders(name, myLoaderCollector, loaders, this); if (!name.endsWith("/")) { - loaders = new SmartList(loaders); - loaders.addAll(myCache.getLoaders(name + "/")); + myCache.iterateLoaders(name.concat("/"), myLoaderCollector, loaders, this); } } } @@ -319,6 +315,40 @@ class ClassPath { if (doneFor > NS_THRESHOLD) { System.out.println((doneFor/1000000) + " ms for " +msg); } - if (requests % 1000 == 0) System.out.println(toString() + "," + requests + "," + (total / 1000000)); + if (requests % 1000 == 0) { + System.out.println(toString() + ", requests:" + requests + ", time:" + (total / 1000000) + "ms"); + } + } + + private static class ResourceStringLoaderIterator extends ClasspathCache.LoaderIterator { + private final boolean myFlag; + + private ResourceStringLoaderIterator(boolean flag) { + myFlag = flag; + } + + @Override + Resource process(Loader loader, String s, ClassPath classPath) { + if (!classPath.myCache.loaderHasName(s, loader)) return null; + final Resource resource = loader.getResource(s, myFlag); + if (resource != null) { + if (ourDumpOrder) { + printOrder(loader, s, resource); + } + return resource; + } + return null; + } + } + private static final ResourceStringLoaderIterator checkedIterator = new ResourceStringLoaderIterator(true); + private static final ResourceStringLoaderIterator uncheckedIterator = new ResourceStringLoaderIterator(false); + private final static LoaderCollector myLoaderCollector = new LoaderCollector(); + + private static class LoaderCollector extends ClasspathCache.LoaderIterator, Object> { + @Override + Object process(Loader loader, List parameter, Object parameter2) { + parameter.add(loader); + return null; + } } } diff --git a/platform/util/src/com/intellij/util/lang/ClasspathCache.java b/platform/util/src/com/intellij/util/lang/ClasspathCache.java index 85e51feffad1..8b13a3f35a55 100644 --- a/platform/util/src/com/intellij/util/lang/ClasspathCache.java +++ b/platform/util/src/com/intellij/util/lang/ClasspathCache.java @@ -19,66 +19,171 @@ */ package com.intellij.util.lang; +import com.intellij.util.ArrayUtil; import com.intellij.util.SmartList; +import com.intellij.util.containers.HashMap; +import gnu.trove.THashMap; +import gnu.trove.THashSet; import gnu.trove.TIntHashSet; import gnu.trove.TIntObjectHashMap; +import org.jetbrains.annotations.Nullable; import sun.misc.Resource; +import java.util.BitSet; import java.util.List; +import java.util.Map; +import java.util.Set; public class ClasspathCache { - private final TIntObjectHashMap> myClassPackagesCache = new TIntObjectHashMap>(); - private final TIntObjectHashMap> myResourcePackagesCache = new TIntObjectHashMap>(); - private final TIntHashSet myResourceIndex = new TIntHashSet(); + private static final boolean doDebug = false; + private final DebugInfo myDebugInfo; + + private final TIntObjectHashMap myResourcePackagesCache = new TIntObjectHashMap(); + private final TIntObjectHashMap myClassPackagesCache = new TIntObjectHashMap(); + + private THashMap> myResources2LoadersTempMap = new THashMap>(); + private static final double PROBABILITY = 0.005d; + private BloomFilter myNameFilter; + private boolean myTempMapMode = true; + + public ClasspathCache() { + if(doDebug) { + myDebugInfo = new DebugInfo(); + } else { + myDebugInfo = null; + } + } public void addResourceEntry(String resourcePath, Loader loader) { - final List loaders = getLoaders(resourcePath); - if (!loaders.contains(loader)) { // TODO Make linked hash set instead? - loaders.add(loader); - } - } + if (doDebug) myDebugInfo.addResourceEntry(resourcePath, loader); - public List getLoaders(String resourcePath) { - boolean isClassFile = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION); - final int idx = resourcePath.lastIndexOf('/'); - String packageName = idx > 0 ? resourcePath.substring(0, idx) : ""; - - TIntObjectHashMap> map = isClassFile ? myClassPackagesCache : myResourcePackagesCache; + String packageName = getPackageName(resourcePath); + TIntObjectHashMap map = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION) ? + myClassPackagesCache : myResourcePackagesCache; int hash = packageName.hashCode(); - List list = map.get(hash); - if (list == null) { - list = new SmartList(); - map.put(hash, list); + Object o = map.get(hash); + if (o == null) map.put(hash, loader); + else if (o instanceof Loader) { + if (o != loader) map.put(hash, new Loader [] {(Loader)o, loader}); + } else { + Loader[] loadersArray = (Loader[])o; + for(Loader l:loadersArray) { + if (l == loader) return; + } + map.put(hash, ArrayUtil.append(loadersArray, loader)); } - - return list; } + static abstract class LoaderIterator { + abstract @Nullable ResultType process(Loader loader, ParameterType parameter, ParameterType2 parameter2); + } + + @Nullable ResultType iterateLoaders( + String resourcePath, + LoaderIterator iterator, + ParameterType parameter, + ParameterType2 parameter2) { + TIntObjectHashMap map = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION) ? + myClassPackagesCache : myResourcePackagesCache; + String packageName = getPackageName(resourcePath); + + int hash = packageName.hashCode(); + Object o = map.get(hash); + if (doDebug) myDebugInfo.checkLoadersCount(resourcePath, o); + + if (o == null) return null; + if (o instanceof Loader) return iterator.process((Loader)o, parameter, parameter2); + Loader[] loaders = (Loader[])o; + for(Loader l:loaders) { + ResultType result = iterator.process(l, parameter, parameter2); + if (result != null) return result; + } + return null; + } + + private static String getPackageName(String resourcePath) { + final int idx = resourcePath.lastIndexOf('/'); + return idx > 0 ? resourcePath.substring(0, idx) : ""; + } + + private int registeredBeforeClose, registeredAfterClose; + public void addNameEntry(String name, Loader loader) { - int hash = hashFromNameAndLoader(transformName(name), loader); - myResourceIndex.add(hash); + name = transformName(name); + if (doDebug) myDebugInfo.addNameEntry(name, loader); + if (myTempMapMode) { + Set loaders = myResources2LoadersTempMap.get(name); + if (loaders == null) myResources2LoadersTempMap.put(name, loaders = new THashSet()); + boolean added = loaders.add(loader); + if (UrlClassLoader.doDebug && added) ++registeredBeforeClose; + } else { + if (UrlClassLoader.doDebug) { + if (!myNameFilter.maybeContains(name, loader)) ++registeredAfterClose; + } + + myNameFilter.add(name, loader); + } } public boolean loaderHasName(String name, Loader loader) { - int hash = hashFromNameAndLoader(transformName(name), loader); + String origName = name; + boolean result; + name = transformName(name); + + if (myTempMapMode) { + ++requests; + Set loaders = myResources2LoadersTempMap.get(name); + result = loaders != null && loaders.contains(loader); - boolean result = myResourceIndex.contains(hash); - ++requests; + if (!result) ++hits; - if (!result) ++hits; + if (doDebug) { + boolean result2 = myDebugInfo.loaderHashName(name, loader); + if (result2 != result) { + ++diffs3; + } + Resource resource = loader.getResource(origName, true); + if ((resource != null && !result) || (resource == null && result)) { + ++falseHits; + } + } - if (UrlClassLoader.doDebug && false) { // extra costly checks - Resource resource = loader.getResource(name, true); - if ((resource != null && !result) || (resource == null && result)) { - ++falseHits; + if (requests % 1000 == 0 && UrlClassLoader.doDebug) { + UrlClassLoader.debug("Avoided disk hits: "+hits + " from " + requests + (doDebug ? ", false hits:" + falseHits + ", bitmap diffs:"+diffs3:"")); + } + } else { + ++requests2; + result = myNameFilter.maybeContains(name, loader); + if (!result) ++hits2; + + if (doDebug) { + boolean result2 = myDebugInfo.loaderHashName(name, loader); + if (result2 != result) { + ++diffs2; + } + + Set loaders = myResources2LoadersTempMap.get(name); + if (result != (loaders != null && loaders.contains(loader))) { + ++diffs; + } + + Resource resource = loader.getResource(origName, true); + if (resource == null && result) { + ++falseHits2; + } + if (resource != null && !result) { + ++falseHits2; + } + } + + if (requests2 % 1000 == 0 && UrlClassLoader.doDebug) { + UrlClassLoader.debug("Avoided disk hits2: "+hits2 + " from " + requests2 + (doDebug ? "," + diffs + ", false hits:" + falseHits2 + ", bitmap diffs:"+diffs2:"")); } } - if (requests % 1000 == 0 && UrlClassLoader.doDebug) { - UrlClassLoader.debug("Avoided disk hits: "+hits + " from " + requests + "," + falseHits); - } + return result; } - + private String transformName(String name) { if (name.endsWith("/")) { name = name.substring(0, name.length() - 1); @@ -98,19 +203,198 @@ public class ClasspathCache { return name; } - private static int hits, requests, falseHits; - - private int hashFromNameAndLoader(String name, Loader loader) { - int hash = name.hashCode(); - int i = loader.getIndex(); - while(i > 0) { - hash = hash * 31 + ((i % 10) + '0'); - i /= 10; - } - return hash; - } + private static int hits, requests, falseHits, requests2, hits2, falseHits2, diffs, diffs2, diffs3; void nameSymbolsLoaded() { - //System.out.println("Loaded"); + if (!myTempMapMode) { + if (UrlClassLoader.doDebug && registeredAfterClose > 0) { + UrlClassLoader.debug("Registered number of classes after close "+registeredAfterClose + " "+toString()); + } + return; + } + + if (UrlClassLoader.doDebug) { + UrlClassLoader.debug("Registered number of classes before classes "+registeredBeforeClose + " "+toString()); + } + + myTempMapMode = false; + + int nBits = 0, uniques = 0; + for(Map.Entry> e:myResources2LoadersTempMap.entrySet()) { + int size = e.getValue().size(); + if (size == 1) { + ++uniques; + } + nBits += size; + } + if (nBits > 20000) { + nBits += (int)(nBits * 0.03d); // allow some growth for Idea main loader + } + + myNameFilter = new BloomFilter(nBits, PROBABILITY); + + for(Map.Entry> e:myResources2LoadersTempMap.entrySet()) { + final String name = e.getKey(); + for(Loader loader: e.getValue()) { + myNameFilter.add(name, loader); + } + } + + if (!doDebug) { + myResources2LoadersTempMap = null; + } + } + + static class BloomFilter { + private final int myHashFunctionCount; + private final int NBITS; + private final BitSet myResourceMap; + private static final int SEED = 31; + + BloomFilter(int nBits, double probability) { + int bitsPerNameFactor = (int)Math.ceil(-Math.log(probability) / (Math.log(2) * Math.log(2))); + myHashFunctionCount = (int)Math.ceil(bitsPerNameFactor * Math.log(2)); + + nBits = nBits * bitsPerNameFactor; + + if ((nBits & 1) == 0) ++nBits; + while(!isPrime(nBits)) nBits += 2; + NBITS = nBits; + myResourceMap = new BitSet(NBITS); + } + + private static boolean isPrime(int bits) { + if ((bits & 1) == 0) return false; + int sqrt = (int)Math.sqrt(bits); + for(int i = 3; i <= sqrt; i+=2) { + if (bits % i == 0) return false; + } + return true; + } + + private boolean maybeContains(String name, Loader loader) { + int hash = hashFromNameAndLoader(name, loader, murmur(name, SEED)); + int hash2 = hashFromNameAndLoader(name, loader, hash); + + for (int i = 0; i < myHashFunctionCount; ++i) { + if (!myResourceMap.get(Math.abs((hash + i * hash2) % NBITS))) return false; + } + return true; + } + + public void add(String name, Loader loader) { + int hash1 = hashFromNameAndLoader(name, loader, murmur(name, SEED)); + int hash2 = hashFromNameAndLoader(name, loader, hash1); + + for (int i = 0; i < myHashFunctionCount; ++i) { + myResourceMap.set(Math.abs((hash1 + i * hash2) % NBITS)); + } + } + + private int hashFromNameAndLoader(String name, Loader loader, int n) { + int hash = murmur(name, n); + int i = loader.getIndex(); + while (i > 0) { + hash = hash * n + ((i % 10) + '0'); + i /= 10; + } + return hash; + } + + private static int murmur(String data, int seed) { + final int length = data.length(); + // 'm' and 'r' are mixing constants generated offline. + // They're not really 'magic', they just happen to work well. + final int m = 0x5bd1e995; + final int r = 24; + // Initialize the hash to a random value + int h = seed ^ length; + int length4 = length >> 2; + + for (int i = 0; i < length4; i++) { + final int i4 = i << 2; + int k = data.charAt(i4) + (data.charAt(i4 + 1) << 8) + + (data.charAt(i4 + 2) << 16) + (data.charAt(i4 + 3) << 24); + k *= m; + k ^= k >>> r; + k *= m; + h *= m; + h ^= k; + } + + // Handle the last few bytes of the input array + switch (length % 4) { + case 3: + h ^= data.charAt((length & ~3) + 2) << 16; + case 2: + h ^= data.charAt((length & ~3) + 1) << 8; + case 1: + h ^= data.charAt(length & ~3); + h *= m; + } + + h ^= h >>> 13; + h *= m; + h ^= h >>> 15; + + return h; + } + } + + static class DebugInfo { + private final HashMap> myClassPackagesCache = new HashMap>(); + private final HashMap> myResourcePackagesCache = new HashMap>(); + private final TIntHashSet myResourceIndex = new TIntHashSet(); + + private List getLoaders(String resourcePath) { + boolean isClassFile = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION); + final int idx = resourcePath.lastIndexOf('/'); + String packageName = idx > 0 ? resourcePath.substring(0, idx) : ""; + + Map> map = isClassFile ? myClassPackagesCache : myResourcePackagesCache; + List list = map.get(packageName); + if (list == null) { + list = new SmartList(); + map.put(packageName, list); + } + + return list; + } + + private void addResourceEntry(String resourcePath, Loader loader) { + final List loaders = getLoaders(resourcePath); + if (!loaders.contains(loader)) { // TODO Make linked hash set instead? + loaders.add(loader); + } + } + + private void addNameEntry(String name, Loader loader) { + int hash = hashFromNameAndLoader(name, loader); + myResourceIndex.add(hash); + } + + private int hashFromNameAndLoader(String name, Loader loader) { + int hash = name.hashCode(); + int i = loader.getIndex(); + while(i > 0) { + hash = hash * 31 + ((i % 10) + '0'); + i /= 10; + } + return hash; + } + + public void checkLoadersCount(String resourcePath, Object o) { + List loaders1 = getLoaders(resourcePath); + if (o == null && loaders1.size() != 0 || + o instanceof Loader && loaders1.size() != 1 || + o instanceof Loader[] && loaders1.size() != ((Loader[])o).length + ) { + assert false; + } + } + + private boolean loaderHashName(String name, Loader loader) { + return myResourceIndex.contains(hashFromNameAndLoader(name, loader)); + } } } diff --git a/platform/util/src/com/intellij/util/lang/FileLoader.java b/platform/util/src/com/intellij/util/lang/FileLoader.java index c70c5c2d81eb..ba76362e3947 100644 --- a/platform/util/src/com/intellij/util/lang/FileLoader.java +++ b/platform/util/src/com/intellij/util/lang/FileLoader.java @@ -89,7 +89,7 @@ class FileLoader extends Loader { if (check) { ++misses; if (misses % 1000 == 0 && UrlClassLoader.doDebug) { - UrlClassLoader.debug("Missed resource " + name + " from " + myRootDir); + UrlClassLoader.debug("[Sample of] missed resource " + name + " from " + myRootDir); } } diff --git a/platform/util/src/com/intellij/util/lang/JarMemoryLoader.java b/platform/util/src/com/intellij/util/lang/JarMemoryLoader.java index ec0c822d2373..63f9a81171a4 100644 --- a/platform/util/src/com/intellij/util/lang/JarMemoryLoader.java +++ b/platform/util/src/com/intellij/util/lang/JarMemoryLoader.java @@ -1,14 +1,13 @@ package com.intellij.util.lang; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.io.zip.ZipShort; +import gnu.trove.THashMap; import org.jetbrains.annotations.Nullable; import sun.misc.Resource; import java.io.*; import java.net.URL; -import java.util.HashMap; import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; @@ -20,9 +19,9 @@ import java.util.zip.ZipInputStream; public class JarMemoryLoader { public static final String SIZE_ENTRY = "META-INF/jb/$$size$$"; - private static final Logger LOG = Logger.getInstance(JarMemoryLoader.class); + //private static final Logger LOG = Logger.getInstance(JarMemoryLoader.class); - private final Map myResources = new HashMap(); + private final Map myResources = new THashMap(); public Resource getResource(String entryName) { return myResources.remove(entryName); @@ -34,9 +33,9 @@ public class JarMemoryLoader { try { // long start = System.currentTimeMillis(); JarMemoryLoader loader = load(inputStream, baseUrl); - if (loader != null) { +// if (loader != null) { // LOG.info(loader.myResources.size() + " classes from " + file.getName() + " preloaded in " + (System.currentTimeMillis() - start) + " ms"); - } +// } return loader; } finally { diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/LabeledForLoop.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/LabeledForLoop.java new file mode 100644 index 000000000000..ecb0061f3a4b --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/LabeledForLoop.java @@ -0,0 +1,10 @@ +package com.siyeh.ipp.forloop.indexed; + +class LabeledForLoop { + + int[] getArr() { + Label: + for (int x: getArr()) {} + return new int[]{1}; + } +} diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/LabeledForLoop_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/LabeledForLoop_after.java new file mode 100644 index 000000000000..3630dc6233ae --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/LabeledForLoop_after.java @@ -0,0 +1,13 @@ +package com.siyeh.ipp.forloop.indexed; + +class LabeledForLoop { + + int[] getArr() { + int[] arr = getArr(); + Label: + for (int i = 0, arrLength = arr.length; i < arrLength; i++) { + int x = arr[i]; + } + return new int[]{1}; + } +} diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NewArray.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NewArray.java new file mode 100644 index 000000000000..132e95f8d087 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NewArray.java @@ -0,0 +1,8 @@ +package com.siyeh.ipp.forloop.indexed; + +class NewArray { + void foo() { + for (int k : new int[3]) { + } + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NewArray_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NewArray_after.java new file mode 100644 index 000000000000..5dfc3e6e1ead --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NewArray_after.java @@ -0,0 +1,10 @@ +package com.siyeh.ipp.forloop.indexed; + +class NewArray { + void foo() { + int[] ints = new int[3]; + for (int i = 0, intsLength = ints.length; i < intsLength; i++) { + int k = ints[i]; + } + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NormalForeachLoop.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NormalForeachLoop.java new file mode 100644 index 000000000000..670b33d818d8 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NormalForeachLoop.java @@ -0,0 +1,9 @@ +package com.siyeh.ipp.forloop.indexed; + +class NormalForEachLoop { + void foo(int[] is) { + for (int i : is) { + System.out.println(i); + } + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NormalForeachLoop_after.java b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NormalForeachLoop_after.java new file mode 100644 index 000000000000..5bf04ed4a165 --- /dev/null +++ b/plugins/IntentionPowerPak/test/com/siyeh/ipp/forloop/indexed/NormalForeachLoop_after.java @@ -0,0 +1,10 @@ +package com.siyeh.ipp.forloop.indexed; + +class NormalForEachLoop { + void foo(int[] is) { + for (int i1 = 0, isLength = is.length; i1 < isLength; i1++) { + int i = is[i1]; + System.out.println(i); + } + } +} \ No newline at end of file diff --git a/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/forloop/ReplaceForEachLoopWithIndexedForLoopIntentionTest.java b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/forloop/ReplaceForEachLoopWithIndexedForLoopIntentionTest.java new file mode 100644 index 000000000000..4155af65f527 --- /dev/null +++ b/plugins/IntentionPowerPak/testSrc/com/siyeh/ipp/forloop/ReplaceForEachLoopWithIndexedForLoopIntentionTest.java @@ -0,0 +1,35 @@ +/* + * 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.siyeh.ipp.forloop; + +import com.siyeh.IntentionPowerPackBundle; +import com.siyeh.ipp.IPPTestCase; + +public class ReplaceForEachLoopWithIndexedForLoopIntentionTest extends IPPTestCase { + public void testLabeledForLoop() { doTest(); } + public void testNormalForeachLoop() { doTest(); } + public void testNewArray() { doTest(); } + + @Override + protected String getIntentionName() { + return IntentionPowerPackBundle.message("replace.for.each.loop.with.indexed.for.loop.intention.name"); + } + + @Override + protected String getRelativePath() { + return "forloop/indexed"; + } +} diff --git a/plugins/git4idea/src/git4idea/GitBinaryContentRevision.java b/plugins/git4idea/src/git4idea/GitBinaryContentRevision.java index acf62daf9c26..9adb39a90dd7 100644 --- a/plugins/git4idea/src/git4idea/GitBinaryContentRevision.java +++ b/plugins/git4idea/src/git4idea/GitBinaryContentRevision.java @@ -22,7 +22,6 @@ import com.intellij.openapi.vcs.changes.BinaryContentRevision; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsFileUtil; import git4idea.util.GitFileUtils; -import git4idea.util.GitUtil; import org.jetbrains.annotations.NotNull; /** diff --git a/plugins/git4idea/src/git4idea/GitBranch.java b/plugins/git4idea/src/git4idea/GitBranch.java index d9e18f73c130..f878b16ea1ee 100644 --- a/plugins/git4idea/src/git4idea/GitBranch.java +++ b/plugins/git4idea/src/git4idea/GitBranch.java @@ -24,7 +24,6 @@ import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; import git4idea.config.GitConfigUtil; import git4idea.history.GitHistoryUtils; -import git4idea.util.GitUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/plugins/git4idea/src/git4idea/GitContentRevision.java b/plugins/git4idea/src/git4idea/GitContentRevision.java index a0043caf9504..40ba200159cf 100644 --- a/plugins/git4idea/src/git4idea/GitContentRevision.java +++ b/plugins/git4idea/src/git4idea/GitContentRevision.java @@ -32,7 +32,6 @@ import com.intellij.vcsUtil.VcsUtil; import git4idea.util.GitFileUtils; import git4idea.history.wholeTree.GitBinaryMultipleContentsRevision; import git4idea.history.wholeTree.GitMultipleContentsRevision; -import git4idea.util.GitUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/plugins/git4idea/src/git4idea/GitFileRevision.java b/plugins/git4idea/src/git4idea/GitFileRevision.java index 7f51742cdbc1..a9a6a3e3683b 100644 --- a/plugins/git4idea/src/git4idea/GitFileRevision.java +++ b/plugins/git4idea/src/git4idea/GitFileRevision.java @@ -28,7 +28,6 @@ import com.intellij.openapi.vcs.impl.ContentRevisionCache; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsFileUtil; import git4idea.util.GitFileUtils; -import git4idea.util.GitUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/plugins/git4idea/src/git4idea/GitRevisionNumber.java b/plugins/git4idea/src/git4idea/GitRevisionNumber.java index 1f107db17ee9..0b7afd0b3bc9 100644 --- a/plugins/git4idea/src/git4idea/GitRevisionNumber.java +++ b/plugins/git4idea/src/git4idea/GitRevisionNumber.java @@ -22,7 +22,6 @@ import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.openapi.vfs.VirtualFile; import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; -import git4idea.util.GitUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/GitRootConverter.java b/plugins/git4idea/src/git4idea/GitRootConverter.java index 30e098ade0dd..ed073ff9e338 100644 --- a/plugins/git4idea/src/git4idea/GitRootConverter.java +++ b/plugins/git4idea/src/git4idea/GitRootConverter.java @@ -19,7 +19,6 @@ package git4idea; import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.containers.HashSet; -import git4idea.util.GitUtil; import java.util.ArrayList; import java.util.List; diff --git a/plugins/git4idea/src/git4idea/util/GitUtil.java b/plugins/git4idea/src/git4idea/GitUtil.java similarity index 99% rename from plugins/git4idea/src/git4idea/util/GitUtil.java rename to plugins/git4idea/src/git4idea/GitUtil.java index c60870eba110..6fa5f09f2b45 100644 --- a/plugins/git4idea/src/git4idea/util/GitUtil.java +++ b/plugins/git4idea/src/git4idea/GitUtil.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package git4idea.util; +package git4idea; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -29,19 +29,17 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import com.intellij.vcsUtil.VcsFileUtil; import com.intellij.vcsUtil.VcsUtil; -import git4idea.GitBranch; -import git4idea.GitVcs; import git4idea.changes.GitChangeUtils; import git4idea.changes.GitCommittedChangeList; import git4idea.commands.GitCommand; import git4idea.commands.GitHandler; import git4idea.commands.GitSimpleHandler; -import git4idea.util.StringScanner; import git4idea.config.GitConfigUtil; import git4idea.i18n.GitBundle; import git4idea.repo.GitRemote; import git4idea.repo.GitRepository; import git4idea.repo.GitRepositoryManager; +import git4idea.util.StringScanner; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -57,7 +55,7 @@ public class GitUtil { /** * The logger instance */ - private final static Logger LOG = Logger.getInstance("#git4idea.util.GitUtil"); + private final static Logger LOG = Logger.getInstance("#git4idea.GitUtil"); /** * Comparator for virtual files by name */ diff --git a/plugins/git4idea/src/git4idea/GitVcs.java b/plugins/git4idea/src/git4idea/GitVcs.java index a8f4654375cb..960ae602b6b9 100644 --- a/plugins/git4idea/src/git4idea/GitVcs.java +++ b/plugins/git4idea/src/git4idea/GitVcs.java @@ -73,7 +73,6 @@ import git4idea.rollback.GitRollbackEnvironment; import git4idea.status.GitChangeProvider; import git4idea.ui.branch.GitBranchWidget; import git4idea.update.GitUpdateEnvironment; -import git4idea.util.GitUtil; import git4idea.vfs.GitRootTracker; import git4idea.vfs.GitRootsListener; import git4idea.vfs.GitVFSListener; diff --git a/plugins/git4idea/src/git4idea/actions/GitAdd.java b/plugins/git4idea/src/git4idea/actions/GitAdd.java index 8085e89207fd..516c131383aa 100644 --- a/plugins/git4idea/src/git4idea/actions/GitAdd.java +++ b/plugins/git4idea/src/git4idea/actions/GitAdd.java @@ -23,7 +23,7 @@ import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.util.GitFileUtils; import git4idea.i18n.GitBundle; diff --git a/plugins/git4idea/src/git4idea/actions/GitInit.java b/plugins/git4idea/src/git4idea/actions/GitInit.java index 7ec5c87b2be4..1709c05d89c9 100644 --- a/plugins/git4idea/src/git4idea/actions/GitInit.java +++ b/plugins/git4idea/src/git4idea/actions/GitInit.java @@ -32,8 +32,8 @@ import com.intellij.openapi.vcs.VcsDirectoryMapping; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsFileUtil; +import git4idea.GitUtil; import git4idea.commands.Git; -import git4idea.util.GitUtil; import git4idea.GitVcs; import git4idea.i18n.GitBundle; import git4idea.util.GitUIUtil; diff --git a/plugins/git4idea/src/git4idea/actions/GitPull.java b/plugins/git4idea/src/git4idea/actions/GitPull.java index af22bfad8238..d2a370cb67cf 100644 --- a/plugins/git4idea/src/git4idea/actions/GitPull.java +++ b/plugins/git4idea/src/git4idea/actions/GitPull.java @@ -24,7 +24,7 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.update.ActionInfo; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitLineHandler; import git4idea.commands.GitStandardProgressAnalyzer; import git4idea.commands.GitTask; diff --git a/plugins/git4idea/src/git4idea/actions/GitRepositoryAction.java b/plugins/git4idea/src/git4idea/actions/GitRepositoryAction.java index 356dbe04fe32..a9fffc8cc91c 100644 --- a/plugins/git4idea/src/git4idea/actions/GitRepositoryAction.java +++ b/plugins/git4idea/src/git4idea/actions/GitRepositoryAction.java @@ -27,7 +27,7 @@ import com.intellij.openapi.vcs.TransactionRunnable; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsFileUtil; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.i18n.GitBundle; import git4idea.repo.GitRepository; diff --git a/plugins/git4idea/src/git4idea/actions/GitShowAllSubmittedFilesAction.java b/plugins/git4idea/src/git4idea/actions/GitShowAllSubmittedFilesAction.java index 13ea34a7a9dd..ceb6ddaee938 100644 --- a/plugins/git4idea/src/git4idea/actions/GitShowAllSubmittedFilesAction.java +++ b/plugins/git4idea/src/git4idea/actions/GitShowAllSubmittedFilesAction.java @@ -31,7 +31,7 @@ import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ui.UIUtil; import git4idea.GitFileRevision; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.changes.GitChangeUtils; import git4idea.i18n.GitBundle; import git4idea.util.GitUIUtil; diff --git a/plugins/git4idea/src/git4idea/annotate/GitAnnotationProvider.java b/plugins/git4idea/src/git4idea/annotate/GitAnnotationProvider.java index ab0a1b372e21..d9490caf578d 100644 --- a/plugins/git4idea/src/git4idea/annotate/GitAnnotationProvider.java +++ b/plugins/git4idea/src/git4idea/annotate/GitAnnotationProvider.java @@ -32,7 +32,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsUtil; import git4idea.GitFileRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; import git4idea.util.StringScanner; diff --git a/plugins/git4idea/src/git4idea/branch/GitBranchOperation.java b/plugins/git4idea/src/git4idea/branch/GitBranchOperation.java index 13c3bc156406..ae3b8a239dab 100644 --- a/plugins/git4idea/src/git4idea/branch/GitBranchOperation.java +++ b/plugins/git4idea/src/git4idea/branch/GitBranchOperation.java @@ -27,7 +27,7 @@ import com.intellij.util.ui.UIUtil; import git4idea.GitVcs; import git4idea.merge.GitConflictResolver; import git4idea.repo.GitRepository; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import org.jetbrains.annotations.NotNull; import javax.swing.event.HyperlinkEvent; @@ -192,7 +192,8 @@ abstract class GitBranchOperation { String description = "You have to resolve all merge conflicts before checkout.
" + getRollbackProposal(); // suppressing: this message looks ugly if capitalized by words //noinspection DialogTitleCapitalization - ok.set(Messages.OK == Messages.showYesNoDialog(myProject, description, UNMERGED_FILES_ERROR_TITLE, "Rollback", "Don't rollback", Messages.getErrorIcon())); + ok.set(Messages.OK == Messages.showYesNoDialog(myProject, description, UNMERGED_FILES_ERROR_TITLE, "Rollback", "Don't rollback", + Messages.getErrorIcon())); } }); if (ok.get()) { diff --git a/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java b/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java index b4cd83af43b3..b0c3403070f0 100644 --- a/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java +++ b/plugins/git4idea/src/git4idea/branch/GitCheckoutOperation.java @@ -38,6 +38,7 @@ import com.intellij.util.continuation.ContinuationContext; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.VcsUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.commands.*; import git4idea.merge.GitConflictResolver; @@ -45,7 +46,6 @@ import git4idea.repo.GitRepository; import git4idea.stash.GitChangesSaver; import git4idea.update.GitComplexProcess; import git4idea.util.GitUIUtil; -import git4idea.util.GitUtil; import git4idea.util.UntrackedFilesNotifier; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java b/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java index 8317cc9db80b..c37f7eca50a6 100644 --- a/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java +++ b/plugins/git4idea/src/git4idea/changes/GitChangeUtils.java @@ -27,7 +27,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; import git4idea.GitContentRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.commands.GitHandler; import git4idea.commands.GitSimpleHandler; diff --git a/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java b/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java index b898452485ad..439afdf1fa62 100644 --- a/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java +++ b/plugins/git4idea/src/git4idea/changes/GitCommittedChangeListProvider.java @@ -37,7 +37,7 @@ import com.intellij.util.Consumer; import git4idea.GitBranch; import git4idea.GitFileRevision; import git4idea.GitDeprecatedRemote; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitSimpleHandler; import git4idea.history.GitHistoryUtils; import git4idea.history.browser.GitCommit; diff --git a/plugins/git4idea/src/git4idea/changes/GitOutgoingChangesProvider.java b/plugins/git4idea/src/git4idea/changes/GitOutgoingChangesProvider.java index 3e6d81bd64c9..83a7d8ff526b 100644 --- a/plugins/git4idea/src/git4idea/changes/GitOutgoingChangesProvider.java +++ b/plugins/git4idea/src/git4idea/changes/GitOutgoingChangesProvider.java @@ -27,7 +27,7 @@ import com.intellij.util.Consumer; import com.intellij.util.containers.Convertor; import git4idea.GitBranchesSearcher; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitSimpleHandler; import git4idea.history.GitHistoryUtils; import git4idea.history.browser.SHAHash; diff --git a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java index 320ccd75bb75..6ef8e74e2f68 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java +++ b/plugins/git4idea/src/git4idea/checkin/GitCheckinEnvironment.java @@ -39,7 +39,7 @@ import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.VcsFileUtil; import com.intellij.vcsUtil.VcsUtil; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.util.GitFileUtils; import git4idea.commands.GitSimpleHandler; diff --git a/plugins/git4idea/src/git4idea/commands/GitBinaryHandler.java b/plugins/git4idea/src/git4idea/commands/GitBinaryHandler.java index 589175ae7e58..df3b5b125300 100644 --- a/plugins/git4idea/src/git4idea/commands/GitBinaryHandler.java +++ b/plugins/git4idea/src/git4idea/commands/GitBinaryHandler.java @@ -21,7 +21,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/config/GitConfigUtil.java b/plugins/git4idea/src/git4idea/config/GitConfigUtil.java index 1483f76fb815..0e42072e2505 100644 --- a/plugins/git4idea/src/git4idea/config/GitConfigUtil.java +++ b/plugins/git4idea/src/git4idea/config/GitConfigUtil.java @@ -19,7 +19,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; import org.jetbrains.annotations.NonNls; diff --git a/plugins/git4idea/src/git4idea/diff/GitDiffProvider.java b/plugins/git4idea/src/git4idea/diff/GitDiffProvider.java index ee1fe916c4d4..0ff4989def66 100644 --- a/plugins/git4idea/src/git4idea/diff/GitDiffProvider.java +++ b/plugins/git4idea/src/git4idea/diff/GitDiffProvider.java @@ -30,7 +30,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsUtil; import git4idea.GitContentRevision; import git4idea.GitFileRevision; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.history.GitHistoryUtils; import git4idea.i18n.GitBundle; diff --git a/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java b/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java index e2813f2bee73..3225167b10aa 100644 --- a/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java +++ b/plugins/git4idea/src/git4idea/history/GitHistoryProvider.java @@ -29,7 +29,7 @@ import com.intellij.util.Processor; import com.intellij.util.ui.ColumnInfo; import git4idea.GitFileRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.actions.GitShowAllSubmittedFilesAction; import git4idea.changes.GitChangeUtils; diff --git a/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java b/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java index bca7f9501d55..3c79476025e1 100644 --- a/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java +++ b/plugins/git4idea/src/git4idea/history/GitHistoryUtils.java @@ -39,7 +39,7 @@ import com.intellij.util.concurrency.Semaphore; import git4idea.GitBranch; import git4idea.GitFileRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.*; import git4idea.config.GitConfigUtil; import git4idea.history.browser.GitCommit; diff --git a/plugins/git4idea/src/git4idea/history/GitLogRecord.java b/plugins/git4idea/src/git4idea/history/GitLogRecord.java index 6dbc53552186..4436abf6769d 100644 --- a/plugins/git4idea/src/git4idea/history/GitLogRecord.java +++ b/plugins/git4idea/src/git4idea/history/GitLogRecord.java @@ -27,7 +27,7 @@ import com.intellij.util.ArrayUtil; import com.intellij.vcsUtil.VcsUtil; import git4idea.GitContentRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitHandler; import git4idea.history.wholeTree.AbstractHash; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/history/browser/ChangesFilter.java b/plugins/git4idea/src/git4idea/history/browser/ChangesFilter.java index 15fe7c898733..d7903c386f19 100644 --- a/plugins/git4idea/src/git4idea/history/browser/ChangesFilter.java +++ b/plugins/git4idea/src/git4idea/history/browser/ChangesFilter.java @@ -21,7 +21,7 @@ import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.changes.FilePathsHelper; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.PairProcessor; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/plugins/git4idea/src/git4idea/history/wholeTree/SelectRepositoryAndShowLogAction.java b/plugins/git4idea/src/git4idea/history/wholeTree/SelectRepositoryAndShowLogAction.java index 09f7dbf6f756..2f3c716f5bdf 100644 --- a/plugins/git4idea/src/git4idea/history/wholeTree/SelectRepositoryAndShowLogAction.java +++ b/plugins/git4idea/src/git4idea/history/wholeTree/SelectRepositoryAndShowLogAction.java @@ -45,7 +45,7 @@ import com.intellij.ui.content.ContentManager; import com.intellij.util.Function; import com.intellij.util.SmartList; import com.intellij.util.ui.AdjustComponentWhenShown; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.config.GitVersion; import git4idea.history.browser.GitProjectLogManager; diff --git a/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java b/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java index 3b18a9305502..779546da35e0 100644 --- a/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java +++ b/plugins/git4idea/src/git4idea/merge/GitMergeProvider.java @@ -30,7 +30,7 @@ import com.intellij.vcsUtil.VcsRunnable; import com.intellij.vcsUtil.VcsUtil; import git4idea.GitFileRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.util.GitFileUtils; import git4idea.commands.GitSimpleHandler; diff --git a/plugins/git4idea/src/git4idea/merge/MergeChangeCollector.java b/plugins/git4idea/src/git4idea/merge/MergeChangeCollector.java index cf665ac70280..84e169624db4 100644 --- a/plugins/git4idea/src/git4idea/merge/MergeChangeCollector.java +++ b/plugins/git4idea/src/git4idea/merge/MergeChangeCollector.java @@ -23,7 +23,7 @@ import com.intellij.openapi.vcs.update.FileGroup; import com.intellij.openapi.vcs.update.UpdatedFiles; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; diff --git a/plugins/git4idea/src/git4idea/push/GitPushDialog.java b/plugins/git4idea/src/git4idea/push/GitPushDialog.java index 402299c515fb..96159428b801 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushDialog.java +++ b/plugins/git4idea/src/git4idea/push/GitPushDialog.java @@ -26,7 +26,7 @@ import com.intellij.ui.components.JBLoadingPanel; import com.intellij.util.Consumer; import com.intellij.util.ui.UIUtil; import git4idea.GitBranch; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.repo.GitRemote; import git4idea.repo.GitRepository; import git4idea.repo.GitRepositoryManager; diff --git a/plugins/git4idea/src/git4idea/push/GitPushLog.java b/plugins/git4idea/src/git4idea/push/GitPushLog.java index fb357851a8c1..f8ada332cb7b 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushLog.java +++ b/plugins/git4idea/src/git4idea/push/GitPushLog.java @@ -31,7 +31,7 @@ import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; import git4idea.GitBranch; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.history.browser.GitCommit; import git4idea.repo.GitRepository; import git4idea.util.GitUIUtil; diff --git a/plugins/git4idea/src/git4idea/push/GitPushResult.java b/plugins/git4idea/src/git4idea/push/GitPushResult.java index 9c31ce88756e..5cb5542a358f 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushResult.java +++ b/plugins/git4idea/src/git4idea/push/GitPushResult.java @@ -31,7 +31,7 @@ import com.intellij.openapi.vcs.update.UpdateInfoTree; import com.intellij.openapi.vcs.update.UpdatedFiles; import git4idea.GitBranch; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.merge.MergeChangeCollector; import git4idea.repo.GitRepository; diff --git a/plugins/git4idea/src/git4idea/push/GitPushSpec.java b/plugins/git4idea/src/git4idea/push/GitPushSpec.java index 7006754ba301..8389b5b9a248 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushSpec.java +++ b/plugins/git4idea/src/git4idea/push/GitPushSpec.java @@ -19,7 +19,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vcs.VcsException; import git4idea.GitBranch; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.branch.GitBranchPair; import git4idea.repo.GitRemote; import git4idea.repo.GitRepository; diff --git a/plugins/git4idea/src/git4idea/push/GitPusher.java b/plugins/git4idea/src/git4idea/push/GitPusher.java index 46b54972c073..fa9d72351f48 100644 --- a/plugins/git4idea/src/git4idea/push/GitPusher.java +++ b/plugins/git4idea/src/git4idea/push/GitPusher.java @@ -25,9 +25,9 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.update.UpdatedFiles; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ui.UIUtil; +import git4idea.GitUtil; import git4idea.commands.Git; import git4idea.GitBranch; -import git4idea.util.GitUtil; import git4idea.GitVcs; import git4idea.branch.GitBranchPair; import git4idea.commands.GitCommandResult; diff --git a/plugins/git4idea/src/git4idea/push/GitRejectedPushUpdateDialog.java b/plugins/git4idea/src/git4idea/push/GitRejectedPushUpdateDialog.java index f2d8eabab233..d4611481830e 100644 --- a/plugins/git4idea/src/git4idea/push/GitRejectedPushUpdateDialog.java +++ b/plugins/git4idea/src/git4idea/push/GitRejectedPushUpdateDialog.java @@ -20,7 +20,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.ui.components.JBLabel; import com.intellij.util.ui.UIUtil; import git4idea.GitBranch; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.config.UpdateMethod; import git4idea.repo.GitRepository; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/rebase/GitRebaseUtils.java b/plugins/git4idea/src/git4idea/rebase/GitRebaseUtils.java index f92c4d75d29a..6afa4b40bc0c 100644 --- a/plugins/git4idea/src/git4idea/rebase/GitRebaseUtils.java +++ b/plugins/git4idea/src/git4idea/rebase/GitRebaseUtils.java @@ -20,7 +20,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import org.jetbrains.annotations.Nullable; import java.io.BufferedReader; diff --git a/plugins/git4idea/src/git4idea/rebase/GitRebaser.java b/plugins/git4idea/src/git4idea/rebase/GitRebaser.java index 0914a7383d47..1ee4146473ca 100644 --- a/plugins/git4idea/src/git4idea/rebase/GitRebaser.java +++ b/plugins/git4idea/src/git4idea/rebase/GitRebaser.java @@ -22,7 +22,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.commands.*; import git4idea.merge.GitConflictResolver; diff --git a/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java b/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java index 9fb659685a6c..82f35fc056f4 100644 --- a/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java +++ b/plugins/git4idea/src/git4idea/rollback/GitRollbackEnvironment.java @@ -27,7 +27,7 @@ import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.vcsUtil.VcsFileUtil; import com.intellij.vcsUtil.VcsUtil; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.util.GitFileUtils; import git4idea.commands.GitHandlerUtil; diff --git a/plugins/git4idea/src/git4idea/status/GitChangeProvider.java b/plugins/git4idea/src/git4idea/status/GitChangeProvider.java index 7da110893e5b..ae35fc82ad35 100644 --- a/plugins/git4idea/src/git4idea/status/GitChangeProvider.java +++ b/plugins/git4idea/src/git4idea/status/GitChangeProvider.java @@ -36,7 +36,7 @@ import com.intellij.openapi.vcs.changes.VcsModifiableDirtyScope; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitContentRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.changes.GitChangeUtils; import git4idea.config.GitVersion; diff --git a/plugins/git4idea/src/git4idea/status/GitChangesCollector.java b/plugins/git4idea/src/git4idea/status/GitChangesCollector.java index 8669ddbd916a..92058bc189d0 100644 --- a/plugins/git4idea/src/git4idea/status/GitChangesCollector.java +++ b/plugins/git4idea/src/git4idea/status/GitChangesCollector.java @@ -23,7 +23,7 @@ import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vcs.changes.ChangeListManager; import com.intellij.openapi.vcs.changes.VcsDirtyScope; import com.intellij.openapi.vfs.VirtualFile; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import org.jetbrains.annotations.NotNull; import java.io.File; diff --git a/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java b/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java index 42a2d15074fe..b719ffc5b672 100644 --- a/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java +++ b/plugins/git4idea/src/git4idea/status/GitOldChangesCollector.java @@ -26,7 +26,7 @@ import com.intellij.openapi.vcs.changes.VcsDirtyScope; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitContentRevision; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.changes.GitChangeUtils; import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; diff --git a/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java b/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java index 1ccf37005178..8880d86b2cc0 100644 --- a/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java +++ b/plugins/git4idea/src/git4idea/ui/GitConvertFilesDialog.java @@ -24,7 +24,7 @@ import com.intellij.ui.*; import com.intellij.util.ui.tree.TreeUtil; import com.intellij.vcsUtil.VcsFileUtil; import git4idea.DialogManager; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.config.GitVcsSettings; import git4idea.i18n.GitBundle; diff --git a/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java b/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java index 4c73b972aac9..4e45aed7a5b4 100644 --- a/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java +++ b/plugins/git4idea/src/git4idea/ui/branch/GitMultiRootBranchConfig.java @@ -16,7 +16,7 @@ package git4idea.ui.branch; import git4idea.GitBranch; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.branch.GitBranchesCollection; import git4idea.repo.GitRepository; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/update/GitMergeUpdater.java b/plugins/git4idea/src/git4idea/update/GitMergeUpdater.java index e270122f511f..7d4f42b7afdf 100644 --- a/plugins/git4idea/src/git4idea/update/GitMergeUpdater.java +++ b/plugins/git4idea/src/git4idea/update/GitMergeUpdater.java @@ -28,7 +28,7 @@ import com.intellij.openapi.vcs.changes.ui.ChangeListViewerDialog; import com.intellij.openapi.vcs.update.UpdatedFiles; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ui.UIUtil; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.branch.GitBranchPair; import git4idea.commands.*; import git4idea.merge.GitConflictResolver; diff --git a/plugins/git4idea/src/git4idea/update/GitUpdateEnvironment.java b/plugins/git4idea/src/git4idea/update/GitUpdateEnvironment.java index 69cc5c2a349f..b3a662ee9f33 100644 --- a/plugins/git4idea/src/git4idea/update/GitUpdateEnvironment.java +++ b/plugins/git4idea/src/git4idea/update/GitUpdateEnvironment.java @@ -27,7 +27,7 @@ import com.intellij.openapi.vcs.update.UpdateEnvironment; import com.intellij.openapi.vcs.update.UpdateSession; import com.intellij.openapi.vcs.update.UpdatedFiles; import com.intellij.openapi.vfs.VirtualFile; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.config.GitVcsSettings; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java b/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java index 2db9d9f47248..e597477eeb21 100644 --- a/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java +++ b/plugins/git4idea/src/git4idea/update/GitUpdateLocallyModifiedDialog.java @@ -23,7 +23,7 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.VcsUtil; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.commands.GitCommand; import git4idea.commands.GitSimpleHandler; import git4idea.util.StringScanner; diff --git a/plugins/git4idea/src/git4idea/update/GitUpdater.java b/plugins/git4idea/src/git4idea/update/GitUpdater.java index 055d3fe829ef..ff64539a3a0c 100644 --- a/plugins/git4idea/src/git4idea/update/GitUpdater.java +++ b/plugins/git4idea/src/git4idea/update/GitUpdater.java @@ -24,7 +24,7 @@ import com.intellij.openapi.vcs.update.UpdatedFiles; import com.intellij.openapi.vfs.VirtualFile; import git4idea.GitBranch; import git4idea.GitRevisionNumber; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.branch.GitBranchPair; import git4idea.config.GitConfigUtil; diff --git a/plugins/git4idea/src/git4idea/validators/GitNewBranchNameValidator.java b/plugins/git4idea/src/git4idea/validators/GitNewBranchNameValidator.java index 2e2dda9333d1..607e749b0208 100644 --- a/plugins/git4idea/src/git4idea/validators/GitNewBranchNameValidator.java +++ b/plugins/git4idea/src/git4idea/validators/GitNewBranchNameValidator.java @@ -17,7 +17,7 @@ package git4idea.validators; import com.intellij.openapi.ui.InputValidatorEx; import git4idea.GitBranch; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.branch.GitBranchesCollection; import git4idea.repo.GitRepository; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/vfs/GitRootTracker.java b/plugins/git4idea/src/git4idea/vfs/GitRootTracker.java index 16fc19c62306..a4b9b156c156 100644 --- a/plugins/git4idea/src/git4idea/vfs/GitRootTracker.java +++ b/plugins/git4idea/src/git4idea/vfs/GitRootTracker.java @@ -43,7 +43,7 @@ import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.i18n.GitBundle; import org.jetbrains.annotations.NotNull; diff --git a/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java b/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java index 796422f43542..99d84c60c9b4 100644 --- a/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java +++ b/plugins/git4idea/src/git4idea/vfs/GitVFSListener.java @@ -29,8 +29,8 @@ import com.intellij.ui.AppUIUtil; import com.intellij.util.ui.UIUtil; import com.intellij.vcsUtil.VcsFileUtil; import com.intellij.vcsUtil.VcsUtil; +import git4idea.GitUtil; import git4idea.commands.Git; -import git4idea.util.GitUtil; import git4idea.GitVcs; import git4idea.util.GitFileUtils; import git4idea.i18n.GitBundle; diff --git a/plugins/git4idea/tests/git4idea/history/GitLogParserTest.java b/plugins/git4idea/tests/git4idea/history/GitLogParserTest.java index e7aa71c4fe86..6c048bca9e8b 100644 --- a/plugins/git4idea/tests/git4idea/history/GitLogParserTest.java +++ b/plugins/git4idea/tests/git4idea/history/GitLogParserTest.java @@ -23,7 +23,7 @@ import com.intellij.openapi.vcs.VcsException; import com.intellij.openapi.vcs.changes.Change; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.LightVirtualFile; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.tests.GitTest; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/plugins/git4idea/tests/git4idea/tests/GitUtilsTest.java b/plugins/git4idea/tests/git4idea/tests/GitUtilsTest.java index 93d08e2dab04..7e90f054e25c 100644 --- a/plugins/git4idea/tests/git4idea/tests/GitUtilsTest.java +++ b/plugins/git4idea/tests/git4idea/tests/GitUtilsTest.java @@ -15,7 +15,7 @@ */ package git4idea.tests; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import org.junit.Assert; import org.junit.Test; diff --git a/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java b/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java index 9619adee4361..1903933b61e2 100644 --- a/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java +++ b/plugins/github/src/org/jetbrains/plugins/github/GithubShareAction.java @@ -28,7 +28,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.containers.HashSet; import git4idea.GitDeprecatedRemote; -import git4idea.util.GitUtil; +import git4idea.GitUtil; import git4idea.GitVcs; import git4idea.actions.BasicAction; import git4idea.actions.GitInit; diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/SvnBundle.properties b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/SvnBundle.properties index 81b1a3b00e96..52d5016d1f5a 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/SvnBundle.properties +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/SvnBundle.properties @@ -402,7 +402,7 @@ integrate.configuration.source1.label=Source 1: integrate.configuration.description.label=Integrate differences between sources into working copy (compare Source 2 to Source 1) source.url.could.not.be.empty.error.message=Source url could not be empty no.differences.between.sources.error.message=There are no differences between source and the same source -configure.revision.specified.radio=Specified +configure.revision.specified.radio=Specified\: configure.revision.head.radio=HEAD update.configuration.specific.url=Update/Switch to specific &url: progress.text.import=Importing {0} diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/dialogs/browser/CheckoutOptionsDialog.form b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/dialogs/browser/CheckoutOptionsDialog.form index 94f5ea9ea796..d5322c45c13c 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/dialogs/browser/CheckoutOptionsDialog.form +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/dialogs/browser/CheckoutOptionsDialog.form @@ -2,14 +2,15 @@
- + - + + @@ -17,25 +18,14 @@ - - - - - - - - - - - @@ -43,38 +33,27 @@ - - + - - - - - - - - - + - - + - @@ -83,8 +62,7 @@ - - + @@ -99,11 +77,18 @@ - - + + + + + + + + + diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/revision/SvnSelectRevisionPanel.form b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/revision/SvnSelectRevisionPanel.form index d8ac27cf3fc9..4954fc621b00 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/revision/SvnSelectRevisionPanel.form +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/revision/SvnSelectRevisionPanel.form @@ -1,16 +1,16 @@ - + - + - + diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/MultipleRootEditorWithSplitter.java b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/MultipleRootEditorWithSplitter.java index 193d46797cdc..83beea8b4614 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/MultipleRootEditorWithSplitter.java +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/MultipleRootEditorWithSplitter.java @@ -20,6 +20,7 @@ import com.intellij.openapi.ui.Splitter; import com.intellij.openapi.vcs.FilePath; import com.intellij.openapi.vcs.impl.VcsPathPresenter; import com.intellij.ui.ColoredListCellRenderer; +import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.components.JBList; import com.intellij.util.ui.AdjustComponentWhenShown; @@ -47,15 +48,14 @@ public class MultipleRootEditorWithSplitter extends JPanel { super(new BorderLayout()); final Splitter splitter = new Splitter(false, 0.5f); - splitter.setShowDividerControls(true); + splitter.setHonorComponentsMinimumSize(false); add(splitter, BorderLayout.CENTER); myList = new JBList(); final Color borderColor = UIUtil.getBorderColor(); - myList.setBorder(BorderFactory.createLineBorder(borderColor)); myConfigureRootPanel = new JPanel(); myConfigureRootPanel.setBorder(BorderFactory.createLineBorder(borderColor)); - splitter.setFirstComponent(myList); + splitter.setFirstComponent(ScrollPaneFactory.createScrollPane(myList)); splitter.setSecondComponent(myConfigureRootPanel); final CardLayout layout = new CardLayout(); diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnRevisionPanel.form b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnRevisionPanel.form index 1a33562eb278..c962a93e7f01 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnRevisionPanel.form +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnRevisionPanel.form @@ -3,7 +3,7 @@ - + diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdatePanel.form b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdatePanel.form index 225aac4d4bba..5022047f0006 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdatePanel.form +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdatePanel.form @@ -1,6 +1,6 @@ - + @@ -10,13 +10,13 @@ - + - + @@ -24,13 +24,13 @@ - + - + @@ -39,7 +39,7 @@ - + @@ -47,7 +47,7 @@ - + diff --git a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdateRootOptionsPanel.form b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdateRootOptionsPanel.form index 59fcc82cb739..227181cd208f 100644 --- a/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdateRootOptionsPanel.form +++ b/plugins/svn4ideaOld/src/org/jetbrains/idea/svn/update/SvnUpdateRootOptionsPanel.form @@ -3,12 +3,12 @@ - + - + @@ -16,72 +16,92 @@ - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java b/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java index 7a0803b70538..69ef61ec6121 100644 --- a/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java +++ b/plugins/ui-designer/src/com/intellij/uiDesigner/FormEditingUtil.java @@ -186,12 +186,56 @@ public final class FormEditingUtil { } } + private static final int EMPTY_COMPONENT_SIZE = 5; + + private static Component getDeepestEmptyComponentAt(JComponent parent, Point location) { + int size = parent.getComponentCount(); + + for (int i = 0; i < size; i++) { + Component child = parent.getComponent(i); + + if (child.isShowing()) { + if (child.getWidth() < EMPTY_COMPONENT_SIZE || child.getHeight() < EMPTY_COMPONENT_SIZE) { + Point childLocation = child.getLocationOnScreen(); + Rectangle bounds = new Rectangle(); + + bounds.x = childLocation.x; + bounds.y = childLocation.y; + bounds.width = child.getWidth(); + bounds.height = child.getHeight(); + bounds.grow(child.getWidth() < EMPTY_COMPONENT_SIZE ? EMPTY_COMPONENT_SIZE : 0, + child.getHeight() < EMPTY_COMPONENT_SIZE ? EMPTY_COMPONENT_SIZE : 0); + + if (bounds.contains(location)) { + return child; + } + } + + if (child instanceof JComponent) { + Component result = getDeepestEmptyComponentAt((JComponent)child, location); + + if (result != null) { + return result; + } + } + } + } + + return null; + } + /** * @param x in editor pane coordinates * @param y in editor pane coordinates */ public static RadComponent getRadComponentAt(final RadRootContainer rootContainer, final int x, final int y){ - Component c = SwingUtilities.getDeepestComponentAt(rootContainer.getDelegee(), x, y); + Point location = new Point(x, y); + SwingUtilities.convertPointToScreen(location, rootContainer.getDelegee()); + Component c = getDeepestEmptyComponentAt(rootContainer.getDelegee(), location); + + if (c == null) { + c = SwingUtilities.getDeepestComponentAt(rootContainer.getDelegee(), x, y); + } RadComponent result = null; @@ -310,9 +354,9 @@ public final class FormEditingUtil { final ArrayList result = new ArrayList(); iterate( editor.getRootContainer(), - new ComponentVisitor(){ + new ComponentVisitor() { public boolean visit(final RadComponent component) { - if(component.isSelected()){ + if (component.isSelected()) { result.add(component); } return true; @@ -793,26 +837,28 @@ public final class FormEditingUtil { iterate(component, new ComponentVisitor() { public boolean visit(final IComponent component) { - for(IProperty prop: component.getModifiedProperties()) { + for (IProperty prop : component.getModifiedProperties()) { Object value = prop.getPropertyValue(component); if (value instanceof StringDescriptor) { - if (!visitor.visit(component, (StringDescriptor) value)) { + if (!visitor.visit(component, (StringDescriptor)value)) { return false; } } } if (component.getParentContainer() instanceof ITabbedPane) { - StringDescriptor tabTitle = ((ITabbedPane) component.getParentContainer()).getTabProperty(component, ITabbedPane.TAB_TITLE_PROPERTY); + StringDescriptor tabTitle = + ((ITabbedPane)component.getParentContainer()).getTabProperty(component, ITabbedPane.TAB_TITLE_PROPERTY); if (tabTitle != null && !visitor.visit(component, tabTitle)) { return false; } - StringDescriptor tabToolTip = ((ITabbedPane) component.getParentContainer()).getTabProperty(component, ITabbedPane.TAB_TOOLTIP_PROPERTY); + StringDescriptor tabToolTip = + ((ITabbedPane)component.getParentContainer()).getTabProperty(component, ITabbedPane.TAB_TOOLTIP_PROPERTY); if (tabToolTip != null && !visitor.visit(component, tabToolTip)) { return false; } } if (component instanceof IContainer) { - final StringDescriptor borderTitle = ((IContainer) component).getBorderTitle(); + final StringDescriptor borderTitle = ((IContainer)component).getBorderTitle(); if (borderTitle != null && !visitor.visit(component, borderTitle)) { return false; } diff --git a/resources-en/src/fileTemplates/includes/File Header.java.ft b/resources-en/src/fileTemplates/includes/File Header.java.ft index b9d9307cacc9..4b498f034061 100644 --- a/resources-en/src/fileTemplates/includes/File Header.java.ft +++ b/resources-en/src/fileTemplates/includes/File Header.java.ft @@ -1,5 +1,5 @@ /** - * Created by IntelliJ IDEA. + * Created with IntelliJ IDEA. * User: ${USER} * Date: ${DATE} * Time: ${TIME}