Merge remote branch 'origin/master'

This commit is contained in:
Dmitry Jemerov
2012-01-23 19:49:46 +01:00
124 changed files with 1816 additions and 376 deletions
@@ -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");
}
@@ -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);
}
}
@@ -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<JavaAnonymousClassTreeElement> 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<JavaAnonymousClassTreeElement> result = new ArrayList<JavaAnonymousClassTreeElement>(elements.length);
for (PsiElement element : elements) {
result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element, ((JavaClassTreeElement)node).getParents()));
result.add(new JavaAnonymousClassTreeElement((PsiAnonymousClass)element, new HashSet<PsiClass>()));
}
return result;
}
@@ -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) {
@@ -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<PsiElement> elements = new ArrayList<PsiElement>();
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;
}
}
@@ -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;
@@ -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();
}
@@ -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{
@@ -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<MessageHandler> myMessageHandlers = new ArrayList<MessageHandler>();
@@ -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;
@@ -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<File> classpath, Collection<File> platformCp, Map<File, String> chunkSourcePath, OutputFilesSink outputSink)
@@ -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<String> options, Collection<File> files, Collection<File> classpath, Collection<File> platformCp, Collection<File> sourcePath, Map<File, Set<File>> 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);
}
}
@@ -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<String> options, Collection<File> files, Collection<File> classpath, Collection<File> platformCp, Collection<File> sourcePath, Map<File, Set<File>> outs, DiagnosticOutputConsumer diagnosticSink, OutputFileConsumer outputSink) {
return JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, outputSink);
return false; // todo
}
}
@@ -23,6 +23,8 @@ class JavacFileManager extends ForwardingJavaFileManager<StandardJavaFileManager
private Map<File, Set<File>> myOutputsMap = Collections.emptyMap();
interface Context {
boolean isCanceled();
StandardJavaFileManager getStandardFileManager();
void consumeOutputFile(@NotNull OutputFileObject obj);
@@ -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<File> sourcePath,
Map<File, Set<File>> 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;
}
@@ -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;
}
}
}
@@ -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)
}
@@ -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<String> options, Collection<File> files, Collection<File> classpath, Collection<File> platformCp, Collection<File> sourcePath, Map<File, Set<File>> 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<? extends JavaFileObject> 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<File> toFiles(List<String> paths) {
final List<File> files = new ArrayList<File>(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<String> options = request.getOptionList();
final List<File> files = toFiles(request.getFileList());
final List<File> cp = toFiles(request.getClasspathList());
final List<File> platformCp = toFiles(request.getPlatformClasspathList());
final List<File> srcPath = toFiles(request.getSourcepathList());
final Map<File, Set<File>> outs = new HashMap<File, Set<File>>();
for (JavacRemoteProto.Message.Request.OutputGroup outputGroup : request.getOutputList()) {
final Set<File> srcRoots = new HashSet<File>();
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);
}
}
}
}
@@ -50,16 +50,8 @@ public class JavacServerClient extends SimpleProtobufClient<JavacServerResponseH
final JavacRemoteProto.Message.Request.Builder requestBuilder = JavacRemoteProto.Message.Request.newBuilder();
requestBuilder.setRequestType(type);
final JavacRemoteProto.Message.Request request = requestBuilder.build();
final JavacRemoteProto.Message msg = toMessage(requestId, request);
final JavacRemoteProto.Message msg = JavacProtoUtil.toMessage(requestId, request);
return sendMessage(requestId, msg, responseHandler, cancelAction);
}
private 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();
}
private static JavacRemoteProto.Message.UUID toProtoUUID(UUID requestId) {
return JavacRemoteProto.Message.UUID.newBuilder().setMostSigBits(requestId.getMostSignificantBits()).setLeastSigBits(requestId.getLeastSignificantBits()).build();
}
}
@@ -176,7 +176,7 @@ class ServerMessageHandler extends SimpleChannelHandler {
ctx.sendUpstream(e);
}
private class CompilationTask implements Runnable, BuildCanceledStatus {
private class CompilationTask implements Runnable, CanceledStatus {
private final UUID mySessionId;
private final ChannelHandlerContext myChannelContext;
@@ -8,10 +8,7 @@ import org.jetbrains.jps.Library;
import org.jetbrains.jps.Module;
import org.jetbrains.jps.Project;
import org.jetbrains.jps.Sdk;
import org.jetbrains.jps.api.BuildParameters;
import org.jetbrains.jps.api.BuildType;
import org.jetbrains.jps.api.GlobalLibrary;
import org.jetbrains.jps.api.SdkLibrary;
import org.jetbrains.jps.api.*;
import org.jetbrains.jps.idea.IdeaProjectLoader;
import org.jetbrains.jps.incremental.*;
import org.jetbrains.jps.incremental.messages.BuildMessage;
@@ -116,7 +113,7 @@ class ServerState {
}
}
public void startBuild(String projectPath, Set<String> modules, Collection<String> paths, final BuildParameters params, final MessageHandler msgHandler, BuildCanceledStatus cs) throws Throwable{
public void startBuild(String projectPath, Set<String> modules, Collection<String> paths, final BuildParameters params, final MessageHandler msgHandler, CanceledStatus cs) throws Throwable{
final String projectName = getProjectName(projectPath);
BuildType buildType = params.buildType;
@@ -758,7 +758,7 @@ public class Mappings {
}
}
return false;
return true;
}
public boolean differentiate(final Mappings delta,
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<option name="DEFAULT_COMPILER" value="Javac" />
<resourceExtensions />
<wildcardResourcePatterns>
<entry name="?*.properties" />
<entry name="?*.xml" />
<entry name="?*.gif" />
<entry name="?*.png" />
<entry name="?*.jpeg" />
<entry name="?*.jpg" />
<entry name="?*.html" />
<entry name="?*.dtd" />
<entry name="?*.tld" />
<entry name="?*.ftl" />
</wildcardResourcePatterns>
<annotationProcessing enabled="false" useClasspath="true" />
</component>
</project>
@@ -0,0 +1,5 @@
<component name="CopyrightManager">
<settings default="">
<module2copyright />
</settings>
</component>
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" useUTFGuessing="true" native2AsciiForPropertiesFiles="false" />
</project>
@@ -0,0 +1,87 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" />
<option name="OPTION_SCOPE" value="protected" />
<option name="OPTION_HIERARCHY" value="true" />
<option name="OPTION_NAVIGATOR" value="true" />
<option name="OPTION_INDEX" value="true" />
<option name="OPTION_SEPARATE_INDEX" value="true" />
<option name="OPTION_DOCUMENT_TAG_USE" value="false" />
<option name="OPTION_DOCUMENT_TAG_AUTHOR" value="false" />
<option name="OPTION_DOCUMENT_TAG_VERSION" value="false" />
<option name="OPTION_DOCUMENT_TAG_DEPRECATED" value="true" />
<option name="OPTION_DEPRECATED_LIST" value="true" />
<option name="OTHER_OPTIONS" value="" />
<option name="HEAP_SIZE" />
<option name="LOCALE" />
<option name="OPEN_IN_BROWSER" value="true" />
</component>
<component name="ModuleEditorState">
<option name="LAST_EDITED_MODULE_NAME" />
<option name="LAST_EDITED_TAB_NAME" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA jdk" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="SvnConfiguration" maxAnnotateRevisions="500">
<option name="USER" value="" />
<option name="PASSWORD" value="" />
<option name="mySSHConnectionTimeout" value="30000" />
<option name="mySSHReadTimeout" value="30000" />
<option name="LAST_MERGED_REVISION" />
<option name="MERGE_DRY_RUN" value="false" />
<option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
<option name="UPDATE_LOCK_ON_DEMAND" value="false" />
<option name="IGNORE_SPACES_IN_MERGE" value="false" />
<option name="DETECT_NESTED_COPIES" value="true" />
<option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
<option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
<option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
<option name="FORCE_UPDATE" value="false" />
<myIsUseDefaultProxy>false</myIsUseDefaultProxy>
</component>
<component name="masterDetails">
<states>
<state key="ArtifactsStructureConfigurable.UI">
<settings>
<artifact-editor />
<splitter-proportions />
</settings>
</state>
<state key="FacetStructureConfigurable.UI">
<settings>
<splitter-proportions />
</settings>
</state>
<state key="GlobalLibrariesConfigurable.UI">
<settings>
<splitter-proportions />
</settings>
</state>
<state key="ModuleStructureConfigurable.UI">
<settings>
<splitter-proportions />
</settings>
</state>
<state key="ProjectJDKs.UI">
<settings>
<last-edited>IDEA jdk</last-edited>
<splitter-proportions>
<option name="proportions">
<list>
<option value="0.20000002" />
</list>
</option>
</splitter-proportions>
</settings>
</state>
<state key="ProjectLibrariesConfigurable.UI">
<settings>
<splitter-proportions />
</settings>
</state>
</states>
</component>
</project>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/NonIncremental2.iml" filepath="$PROJECT_DIR$/NonIncremental2.iml" />
</modules>
</component>
</project>
@@ -0,0 +1,5 @@
<component name="DependencyValidationManager">
<state>
<option name="SKIP_IMPORT_STATEMENTS" value="false" />
</state>
</component>
@@ -0,0 +1,125 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="" />
</component>
</project>
@@ -0,0 +1,285 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="05996828-fff6-46c5-943e-6d57c3378e16" name="Default" comment="" />
<ignored path="nonIncremental2.iws" />
<ignored path=".idea/workspace.xml" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
</component>
<component name="DaemonCodeAnalyzer">
<disable_hints />
</component>
<component name="DebuggerManager">
<breakpoint_any>
<breakpoint>
<option name="NOTIFY_CAUGHT" value="true" />
<option name="NOTIFY_UNCAUGHT" value="true" />
<option name="ENABLED" value="false" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint>
<option name="NOTIFY_CAUGHT" value="true" />
<option name="NOTIFY_UNCAUGHT" value="true" />
<option name="ENABLED" value="false" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
</breakpoint_any>
<breakpoint_rules />
<ui_properties />
</component>
<component name="FavoritesManager">
<favorites_list name="nonIncremental2" />
</component>
<component name="Git.Settings">
<option name="CHECKOUT_INCLUDE_TAGS" value="false" />
<option name="UPDATE_CHANGES_POLICY" value="STASH" />
<option name="LINE_SEPARATORS_CONVERSION" value="ASK" />
</component>
<component name="MavenRunner">
<option name="jreName" value="#JAVA_INTERNAL" />
</component>
<component name="ProjectFrameBounds">
<option name="y" value="25" />
<option name="width" value="1282" />
<option name="height" value="755" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
<OptionsSetting value="true" id="Checkout" />
<OptionsSetting value="true" id="Update" />
<OptionsSetting value="true" id="Status" />
<OptionsSetting value="true" id="Edit" />
<ConfirmationsSetting value="0" id="Add" />
<ConfirmationsSetting value="0" id="Remove" />
</component>
<component name="ProjectReloadState">
<option name="STATE" value="0" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1" splitterProportion="0.5">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
</navigator>
<panes>
<pane id="Scope" />
<pane id="PackagesPane" />
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="nonIncremental2" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="GoToFile.includeJavaFiles" value="false" />
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
<property name="MemberChooser.sorted" value="false" />
<property name="MemberChooser.showClasses" value="true" />
<property name="GoToClass.includeLibraries" value="false" />
<property name="MemberChooser.copyJavadoc" value="false" />
</component>
<component name="RunManager">
<configuration default="true" type="Remote" factoryName="Remote">
<option name="USE_SOCKET_TRANSPORT" value="true" />
<option name="SERVER_MODE" value="false" />
<option name="SHMEM_ADDRESS" value="javadebug" />
<option name="HOST" value="localhost" />
<option name="PORT" value="5005" />
<method>
<option name="AntTarget" enabled="false" />
<option name="BuildArtifacts" enabled="false" />
<option name="Maven.BeforeRunTask" enabled="false" />
</method>
</configuration>
<configuration default="true" type="Applet" factoryName="Applet">
<module name="" />
<option name="MAIN_CLASS_NAME" />
<option name="HTML_FILE_NAME" />
<option name="HTML_USED" value="false" />
<option name="WIDTH" value="400" />
<option name="HEIGHT" value="300" />
<option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
<option name="VM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<method>
<option name="AntTarget" enabled="false" />
<option name="BuildArtifacts" enabled="false" />
<option name="Make" enabled="true" />
<option name="Maven.BeforeRunTask" enabled="false" />
</method>
</configuration>
<configuration default="true" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="ENABLE_SWING_INSPECTOR" value="false" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<module name="" />
<envs />
<method>
<option name="AntTarget" enabled="false" />
<option name="BuildArtifacts" enabled="false" />
<option name="Make" enabled="true" />
<option name="Maven.BeforeRunTask" enabled="false" />
</method>
</configuration>
<configuration default="true" type="JUnit" factoryName="JUnit">
<module name="" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PACKAGE_NAME" />
<option name="MAIN_CLASS_NAME" />
<option name="METHOD_NAME" />
<option name="TEST_OBJECT" value="class" />
<option name="VM_PARAMETERS" />
<option name="PARAMETERS" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="ENV_VARIABLES" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="TEST_SEARCH_SCOPE">
<value defaultName="moduleWithDependencies" />
</option>
<envs />
<patterns />
<method>
<option name="AntTarget" enabled="false" />
<option name="BuildArtifacts" enabled="false" />
<option name="Make" enabled="true" />
<option name="Maven.BeforeRunTask" enabled="false" />
</method>
</configuration>
<list size="0" />
<configuration name="&lt;template&gt;" type="WebApp" default="true" selected="false">
<Host>localhost</Host>
<Port>5050</Port>
</configuration>
</component>
<component name="ShelveChangesManager" show_recycled="false" />
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<created>1327316965641</created>
<updated>1327316965641</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="0" y="25" width="1282" height="755" extended-state="0" />
<editor active="false" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.24959481" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="VcsManagerConfiguration">
<option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
<option name="CHECK_NEW_TODO" value="true" />
<option name="myTodoPanelSettings">
<value>
<are-packages-shown value="false" />
<are-modules-shown value="false" />
<flatten-packages value="false" />
<is-autoscroll-to-source value="false" />
</value>
</option>
<option name="PERFORM_UPDATE_IN_BACKGROUND" value="true" />
<option name="PERFORM_COMMIT_IN_BACKGROUND" value="true" />
<option name="PERFORM_EDIT_IN_BACKGROUND" value="true" />
<option name="PERFORM_CHECKOUT_IN_BACKGROUND" value="true" />
<option name="PERFORM_ADD_REMOVE_IN_BACKGROUND" value="true" />
<option name="PERFORM_ROLLBACK_IN_BACKGROUND" value="false" />
<option name="CHECK_LOCALLY_CHANGED_CONFLICTS_IN_BACKGROUND" value="false" />
<option name="ENABLE_BACKGROUND_PROCESSES" value="false" />
<option name="CHANGED_ON_SERVER_INTERVAL" value="60" />
<option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="SHORT_DIFF_HORISONTALLY" value="true" />
<option name="SHORT_DIFF_EXTRA_LINES" value="2" />
<option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
<option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
<option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
<option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
<option name="OPTIMIZE_IMPORTS_BEFORE_PROJECT_COMMIT" value="false" />
<option name="CHECK_FILES_UP_TO_DATE_BEFORE_COMMIT" value="false" />
<option name="REFORMAT_BEFORE_PROJECT_COMMIT" value="false" />
<option name="REFORMAT_BEFORE_FILE_COMMIT" value="false" />
<option name="FILE_HISTORY_DIALOG_COMMENTS_SPLITTER_PROPORTION" value="0.8" />
<option name="FILE_HISTORY_DIALOG_SPLITTER_PROPORTION" value="0.5" />
<option name="ACTIVE_VCS_NAME" />
<option name="UPDATE_GROUP_BY_PACKAGES" value="false" />
<option name="UPDATE_GROUP_BY_CHANGELIST" value="false" />
<option name="SHOW_FILE_HISTORY_AS_TREE" value="false" />
<option name="FILE_HISTORY_SPLITTER_PROPORTION" value="0.6" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager />
</component>
</project>
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
@@ -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();
}
@@ -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();
}
}
@@ -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<Class, Object> myInterfaceToLockMap = new HashMap<Class, Object>();
private final Map<Class, Class> myInterfaceToClassMap = new HashMap<Class, Class>();
private final Map<Class, Object> myInterfaceToLockMap = new THashMap<Class, Object>();
private final Map<Class, Class> myInterfaceToClassMap = new THashMap<Class, Class>();
private final ArrayList<Class> myComponentInterfaces = new ArrayList<Class>(); // keeps order of component's registration
private final Map<String, BaseComponent> myNameToComponent = new HashMap<String, BaseComponent>();
private final Map<String, BaseComponent> myNameToComponent = new THashMap<String, BaseComponent>();
private final List<ComponentConfig> myComponentConfigs = new ArrayList<ComponentConfig>();
private final List<Object> myImplementations = new ArrayList<Object>();
private final Map<Class, ComponentConfig> myComponentClassToConfig = new java.util.HashMap<Class, ComponentConfig>();
private final Map<Class, ComponentConfig> myComponentClassToConfig = new THashMap<Class, ComponentConfig>();
private boolean myClassesLoaded = false;
private void loadClasses() {
@@ -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<AreaListener> AREA_LISTENER_EXTENSION_POINT = new ExtensionPointName<AreaListener>("com.intellij.arealistener");
private static final Map<AreaInstance,ExtensionsAreaImpl> ourAreaInstance2area = new HashMap<AreaInstance, ExtensionsAreaImpl>();
private static final Map<AreaInstance,ExtensionsAreaImpl> ourAreaInstance2area = new THashMap<AreaInstance, ExtensionsAreaImpl>();
private static ExtensionsAreaImpl ourRootArea = createRootArea();
private static final MultiMap<String, AreaInstance> ourAreaClass2instances = new MultiMap<String, AreaInstance>();
private static final Map<AreaInstance,String> ourAreaInstance2class = new HashMap<AreaInstance, String>();
private static final Map<String,AreaClassConfiguration> ourAreaClass2Configuration = new HashMap<String, AreaClassConfiguration>();
private static final Map<AreaInstance,String> ourAreaInstance2class = new THashMap<AreaInstance, String>();
private static final Map<String,AreaClassConfiguration> ourAreaClass2Configuration = new THashMap<String, AreaClassConfiguration>();
private static ExtensionsAreaImpl createRootArea() {
ExtensionsAreaImpl rootArea = new ExtensionsAreaImpl(null, null, null, ourLogger);
@@ -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<String,HighlightDisplayKey> ourNameToKeyMap = new HashMap<String, HighlightDisplayKey>();
private static final HashMap<String,HighlightDisplayKey> ourIdToKeyMap = new HashMap<String, HighlightDisplayKey>();
private static final Map<HighlightDisplayKey, String> ourKeyToDisplayNameMap = new HashMap<HighlightDisplayKey, String>();
private static final Map<HighlightDisplayKey, String> ourKeyToAlternativeIDMap = new HashMap<HighlightDisplayKey, String>();
private static final Map<String,HighlightDisplayKey> ourNameToKeyMap = new THashMap<String, HighlightDisplayKey>();
private static final Map<String,HighlightDisplayKey> ourIdToKeyMap = new THashMap<String, HighlightDisplayKey>();
private static final Map<HighlightDisplayKey, String> ourKeyToDisplayNameMap = new THashMap<HighlightDisplayKey, String>();
private static final Map<HighlightDisplayKey, String> ourKeyToAlternativeIDMap = new THashMap<HighlightDisplayKey, String>();
private final String myName;
private final String myID;
@@ -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<UrlClassLoader> 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");
@@ -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<String, ToolsImpl> myTools = new HashMap<String, ToolsImpl>();
private Map<String, ToolsImpl> myTools = new THashMap<String, ToolsImpl>();
private Map<String, Boolean> myDisplayLevelMap;
private Map<String, Element> myDeinstalledInspectionsSettings = new TreeMap<String, Element>();
@@ -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<NavBarItem, Map<ImageType, BufferedImage>> myCache = new HashMap<NavBarItem, Map<ImageType, BufferedImage>>();
private Map<NavBarItem, Map<ImageType, BufferedImage>> myCache = new THashMap<NavBarItem, Map<ImageType, BufferedImage>>();
private enum ImageType {
INACTIVE, NEXT_ACTIVE, ACTIVE, INACTIVE_FLOATING, NEXT_ACTIVE_FLOATING, ACTIVE_FLOATING,
@@ -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<String> 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;
}
@@ -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<JTextField> 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<JTextField>(new JTextField(), null);
myTargetDirectoryField = new TextFieldWithHistoryWithBrowseButton();
final List<String> 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() {
@@ -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<ID<?, ?>, Pair<UpdatableIndex<?, ?, FileContent>, InputFilter>> myIndices = new HashMap<ID<?, ?>, Pair<UpdatableIndex<?, ?, FileContent>, InputFilter>>();
private final Map<ID<?, ?>, Semaphore> myUnsavedDataIndexingSemaphores = new HashMap<ID<?,?>, Semaphore>();
private final Map<ID<?, ?>, Pair<UpdatableIndex<?, ?, FileContent>, InputFilter>> myIndices = new THashMap<ID<?, ?>, Pair<UpdatableIndex<?, ?, FileContent>, InputFilter>>();
private final Map<ID<?, ?>, Semaphore> myUnsavedDataIndexingSemaphores = new THashMap<ID<?,?>, Semaphore>();
private final TObjectIntHashMap<ID<?, ?>> myIndexIdToVersionMap = new TObjectIntHashMap<ID<?, ?>>();
private final Set<ID<?, ?>> myNotRequiringContentIndices = new HashSet<ID<?, ?>>();
private final Set<ID<?, ?>> myRequiringContentIndices = new HashSet<ID<?, ?>>();
private final Set<FileType> myNoLimitCheckTypes = new HashSet<FileType>();
private final Set<ID<?, ?>> myNotRequiringContentIndices = new THashSet<ID<?, ?>>();
private final Set<ID<?, ?>> myRequiringContentIndices = new THashSet<ID<?, ?>>();
private final Set<FileType> myNoLimitCheckTypes = new THashSet<FileType>();
private final PerIndexDocumentVersionMap myLastIndexedDocStamps = new PerIndexDocumentVersionMap();
private final ChangedFilesCollector myChangedFilesCollector;
private final List<IndexableFileSet> myIndexableSets = ContainerUtil.createEmptyCOWList();
private final Map<IndexableFileSet, Project> myIndexableSetToProjectMap = new HashMap<IndexableFileSet, Project>();
private final Map<IndexableFileSet, Project> myIndexableSetToProjectMap = new THashMap<IndexableFileSet, Project>();
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<ID<?, ?>, AtomicInteger> ourRebuildStatus = new HashMap<ID<?,?>, AtomicInteger>();
private static final Map<ID<?, ?>, AtomicInteger> ourRebuildStatus = new THashMap<ID<?,?>, AtomicInteger>();
private final VirtualFileManagerEx myVfManager;
private final FileDocumentManager myFileDocumentManager;
private final FileTypeManager myFileTypeManager;
private final ConcurrentHashSet<ID<?, ?>> myUpToDateIndices = new ConcurrentHashSet<ID<?, ?>>();
private final Map<Document, PsiFile> myTransactionMap = new HashMap<Document, PsiFile>();
private final Map<Document, PsiFile> myTransactionMap = new THashMap<Document, PsiFile>();
private static final int ALREADY_PROCESSED = 0x02;
@Nullable private final String myConfigPath;
@@ -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 <code>FixedSizeButton</code> with specified size.
* @throws java.lang.IllegalArgumentException if <code>size</code> isn't
* positive integer number.
*
* @throws java.lang.IllegalArgumentException
* if <code>size</code> 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();
}
}
@@ -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;
}
}
@@ -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<TextFieldWithHistory> {
public TextFieldWithHistoryWithBrowseButton() {
super(new TextFieldWithHistory(), null);
}
@Override
public void addBrowseFolderListener(@Nullable String title,
@Nullable String description,
@Nullable Project project,
FileChooserDescriptor fileChooserDescriptor,
TextComponentAccessor<TextFieldWithHistory> 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<TextFieldWithHistory> accessor,
boolean autoRemoveOnHide) {
super.addBrowseFolderListener(title, description, project, fileChooserDescriptor, accessor, autoRemoveOnHide);
FileChooserFactory.getInstance().installFileCompletion(getChildComponent().getTextEditor(), fileChooserDescriptor, false, project);
}
}
@@ -224,12 +224,16 @@ public class VirtualFileDiffElement extends DiffElement<VirtualFile> {
@Override
public void refresh(boolean userInitiated) {
refreshFile(userInitiated, myFile);
}
public static void refreshFile(boolean userInitiated, VirtualFile virtualFile) {
if (userInitiated) {
final List<Document> docsToSave = new ArrayList<Document>();
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<VirtualFile> {
}, 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);
}
}
@@ -292,6 +292,11 @@ public class OptionsEditor extends JPanel implements DataProvider, Place.Navigat
return myTree.select(configurable);
}
@NotNull
public List<Configurable> getPathToRoot(@NotNull Configurable configurable) {
return myTree.getPathToRoot(configurable);
}
private float readProportion(final float defaultValue, final String propertyName) {
float proportion = defaultValue;
try {
@@ -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<String, VirtualFileSystemEntry> myRoots = new HashMap<String, VirtualFileSystemEntry>();
private final Map<Integer, VirtualFileSystemEntry> myRootsById = new HashMap<Integer, VirtualFileSystemEntry>();
private final Map<String, VirtualFileSystemEntry> myRoots = new THashMap<String, VirtualFileSystemEntry>();
private final TIntObjectHashMap<VirtualFileSystemEntry> myRootsById = new TIntObjectHashMap<VirtualFileSystemEntry>();
private VirtualFileSystemEntry myFakeRoot;
private final Object INPUT_LOCK = new Object();
@@ -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=<html>Enable Command+MouseWheel changes font size</html>
checkbox.enable.ctrl.mousewheel.changes.font.size=<html>Change font size (Zoom) with Ctrl+MouseWheel</html>
checkbox.enable.ctrl.mousewheel.changes.font.size.macos=<html>Change font size (Zoom) with Command+MouseWheel</html>
checkbox.enable.drag.n.drop.functionality.in.editor=<html>Enable Drag'n'Drop functionality in editor</html>
checkbox.honor.camelhumps.words.settings.on.double.click=<html>Honor "CamelHumps" words settings when selecting on<br/>double click</html>
group.smart.keys=Smart Keys
@@ -364,7 +364,7 @@
<patternDialectProvider implementation="com.intellij.packageDependencies.ui.ProjectPatternProvider" id="file"/>
<customScopesProvider implementation="com.intellij.packageDependencies.DefaultScopesProvider"/>
<customScopesProvider implementation="com.intellij.packageDependencies.ChangeListsScopesProvider"/>
<customScopesProvider implementation="com.intellij.packageDependencies.ChangeListsScopesProvider" order="last"/>
<refactoring.elementListenerProvider implementation="com.intellij.packageDependencies.ui.RefactoringScopeElementListenerProvider"/>
<highlightVisitor implementation="com.intellij.codeInsight.daemon.impl.DefaultHighlightVisitor"/>
@@ -118,18 +118,8 @@ class ClassPath {
try {
int i;
if (myCanUseCache) {
List<Loader> 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<Loader>();
myCache.iterateLoaders(name, myLoaderCollector, loaders, this);
if (!name.endsWith("/")) {
loaders = new SmartList<Loader>(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<Resource, String, ClassPath> {
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, List<Loader>, Object> {
@Override
Object process(Loader loader, List<Loader> parameter, Object parameter2) {
parameter.add(loader);
return null;
}
}
}
@@ -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<List<Loader>> myClassPackagesCache = new TIntObjectHashMap<List<Loader>>();
private final TIntObjectHashMap<List<Loader>> myResourcePackagesCache = new TIntObjectHashMap<List<Loader>>();
private final TIntHashSet myResourceIndex = new TIntHashSet();
private static final boolean doDebug = false;
private final DebugInfo myDebugInfo;
private final TIntObjectHashMap<Object> myResourcePackagesCache = new TIntObjectHashMap<Object>();
private final TIntObjectHashMap<Object> myClassPackagesCache = new TIntObjectHashMap<Object>();
private THashMap<String, Set<Loader>> myResources2LoadersTempMap = new THashMap<String, Set<Loader>>();
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<Loader> loaders = getLoaders(resourcePath);
if (!loaders.contains(loader)) { // TODO Make linked hash set instead?
loaders.add(loader);
}
}
if (doDebug) myDebugInfo.addResourceEntry(resourcePath, loader);
public List<Loader> getLoaders(String resourcePath) {
boolean isClassFile = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION);
final int idx = resourcePath.lastIndexOf('/');
String packageName = idx > 0 ? resourcePath.substring(0, idx) : "";
TIntObjectHashMap<List<Loader>> map = isClassFile ? myClassPackagesCache : myResourcePackagesCache;
String packageName = getPackageName(resourcePath);
TIntObjectHashMap<Object> map = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION) ?
myClassPackagesCache : myResourcePackagesCache;
int hash = packageName.hashCode();
List<Loader> list = map.get(hash);
if (list == null) {
list = new SmartList<Loader>();
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 <ResultType, ParameterType, ParameterType2> {
abstract @Nullable ResultType process(Loader loader, ParameterType parameter, ParameterType2 parameter2);
}
@Nullable <ResultType, ParameterType, ParameterType2> ResultType iterateLoaders(
String resourcePath,
LoaderIterator<ResultType, ParameterType, ParameterType2> iterator,
ParameterType parameter,
ParameterType2 parameter2) {
TIntObjectHashMap<Object> 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<Loader> loaders = myResources2LoadersTempMap.get(name);
if (loaders == null) myResources2LoadersTempMap.put(name, loaders = new THashSet<Loader>());
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<Loader> 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<Loader> 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<String, Set<Loader>> 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<String, Set<Loader>> 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<String, List<Loader>> myClassPackagesCache = new HashMap<String, List<Loader>>();
private final HashMap<String, List<Loader>> myResourcePackagesCache = new HashMap<String, List<Loader>>();
private final TIntHashSet myResourceIndex = new TIntHashSet();
private List<Loader> getLoaders(String resourcePath) {
boolean isClassFile = resourcePath.endsWith(UrlClassLoader.CLASS_EXTENSION);
final int idx = resourcePath.lastIndexOf('/');
String packageName = idx > 0 ? resourcePath.substring(0, idx) : "";
Map<String, List<Loader>> map = isClassFile ? myClassPackagesCache : myResourcePackagesCache;
List<Loader> list = map.get(packageName);
if (list == null) {
list = new SmartList<Loader>();
map.put(packageName, list);
}
return list;
}
private void addResourceEntry(String resourcePath, Loader loader) {
final List<Loader> 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<Loader> 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));
}
}
}
@@ -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);
}
}
@@ -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<String, Resource> myResources = new HashMap<String, Resource>();
private final Map<String, Resource> myResources = new THashMap<String, Resource>();
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 {
@@ -0,0 +1,10 @@
package com.siyeh.ipp.forloop.indexed;
class LabeledForLoop {
int[] getArr() {
Label:
<caret>for (int x: getArr()) {}
return new int[]{1};
}
}
@@ -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};
}
}
@@ -0,0 +1,8 @@
package com.siyeh.ipp.forloop.indexed;
class NewArray {
void foo() {
<caret>for (int k : new int[3]) {
}
}
}
@@ -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];
}
}
}
@@ -0,0 +1,9 @@
package com.siyeh.ipp.forloop.indexed;
class NormalForEachLoop {
void foo(int[] is) {
<caret>for (int i : is) {
System.out.println(i);
}
}
}
@@ -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);
}
}
}
@@ -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";
}
}
@@ -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;
/**
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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
*/
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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.<br/>" + 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()) {
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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;

Some files were not shown because too many files have changed in this diff Show More