diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index 9dd764011b14..6a6ef6bc66af 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -23,9 +23,11 @@ import com.intellij.execution.process.OSProcessHandler; import com.intellij.execution.process.ProcessAdapter; import com.intellij.execution.process.ProcessEvent; import com.intellij.execution.process.ProcessOutputTypes; +import com.intellij.notification.Notification; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.PathMacros; import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.compiler.CompilerManager; import com.intellij.openapi.components.ApplicationComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; @@ -40,15 +42,20 @@ import com.intellij.openapi.roots.ModuleRootListener; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.libraries.LibraryTablesRegistrar; +import com.intellij.openapi.ui.MessageType; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.ShutDownTracker; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vfs.JarFileSystem; -import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.encoding.EncodingManager; +import com.intellij.openapi.vfs.newvfs.BulkFileListener; +import com.intellij.openapi.vfs.newvfs.events.VFileEvent; +import com.intellij.problems.Problem; +import com.intellij.problems.WolfTheProblemSolver; +import com.intellij.util.Alarm; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.messages.MessageBusConnection; import com.intellij.util.net.NetUtils; @@ -68,6 +75,7 @@ import java.util.*; import java.util.concurrent.Future; import java.util.concurrent.RunnableFuture; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; /** * @author Eugene Zhuravlev @@ -87,6 +95,8 @@ public class CompileServerManager implements ApplicationComponent{ } }); private final ProjectManager myProjectManager; + private static final int MAKE_TRIGGER_DELAY = 5 * 1000 /*5 seconds*/; + private final Map myAutomakeFutures = new HashMap(); public CompileServerManager(final ProjectManager projectManager) { myProjectManager = projectManager; @@ -101,6 +111,50 @@ public class CompileServerManager implements ApplicationComponent{ mySystemDirectory = system; projectManager.addProjectManagerListener(new ProjectWatcher()); + final MessageBusConnection conn = ApplicationManager.getApplication().getMessageBus().connect(); + conn.subscribe(VirtualFileManager.VFS_CHANGES, new BulkFileListener() { + private final Alarm myAlarm = new Alarm(Alarm.ThreadToUse.SHARED_THREAD); + private final AtomicBoolean myAutoMakeInProgress = new AtomicBoolean(false); + @Override + public void before(List events) { + } + + @Override + public void after(List events) { + if (shouldTriggerMake(events)) { + scheduleMake(new Runnable() { + @Override + public void run() { + if (!myAutoMakeInProgress.getAndSet(true)) { + try { + runAutoMake(); + } + finally { + myAutoMakeInProgress.set(false); + } + } + else { + scheduleMake(this); + } + } + }); + } + } + + private void scheduleMake(Runnable runnable) { + myAlarm.cancelAllRequests(); + myAlarm.addRequest(runnable, MAKE_TRIGGER_DELAY); + } + + private boolean shouldTriggerMake(List events) { + for (VFileEvent event : events) { + if (event.isFromRefresh() || event.getRequestor() instanceof SavingRequestor) { + return true; + } + } + return false; + } + }); ShutDownTracker.getInstance().registerShutdownTask(new Runnable() { @Override @@ -198,8 +252,60 @@ public class CompileServerManager implements ApplicationComponent{ } } + private void runAutoMake() { + final Project[] openProjects = ProjectManager.getInstance().getOpenProjects(); + if (openProjects.length > 0) { + final List futures = new ArrayList(); + for (final Project project : openProjects) { + if (project.isDefault()) { + continue; + } + final CompilerWorkspaceConfiguration config = CompilerWorkspaceConfiguration.getInstance(project); + if (!config.USE_COMPILE_SERVER || !config.MAKE_PROJECT_ON_SAVE) { + continue; + } + final RequestFuture future = submitCompilationTask( + project, false, true, Collections.emptyList(), Collections.emptyList(), new AutoMakeResponseHandler(project) + ); + if (future != null) { + futures.add(future); + synchronized (myAutomakeFutures) { + myAutomakeFutures.put(future, project); + } + } + } + try { + for (RequestFuture future : futures) { + try { + future.get(); + } + catch (InterruptedException ignored) { + } + catch (java.util.concurrent.ExecutionException ignored) { + } + } + } + finally { + synchronized (myAutomakeFutures) { + myAutomakeFutures.keySet().removeAll(futures); + } + } + } + } + + public void cancelAutoMakeTasks(Project project) { + synchronized (myAutomakeFutures) { + for (Map.Entry entry : myAutomakeFutures.entrySet()) { + if (entry.getValue().equals(project)) { + entry.getKey().cancel(true); + } + } + } + } + @Nullable - public RequestFuture submitCompilationTask(final String projectId, final boolean isRebuild, final boolean isMake, final Collection modules, final Collection paths, final JpsServerResponseHandler handler) { + public RequestFuture submitCompilationTask(final Project project, final boolean isRebuild, final boolean isMake, final Collection modules, final Collection paths, final JpsServerResponseHandler handler) { + final String projectId = project.getLocation(); final Ref futureRef = new Ref(null); final RunnableFuture future = myTaskExecutor.submit(new Runnable() { public void run() { @@ -547,6 +653,88 @@ public class CompileServerManager implements ApplicationComponent{ return builder.toString(); } + private static class AutoMakeResponseHandler extends JpsServerResponseHandler { + private JpsRemoteProto.Message.Response.BuildEvent.Status myBuildStatus; + private final Project myProject; + private final WolfTheProblemSolver myWolf; + + public AutoMakeResponseHandler(Project project) { + myProject = project; + myBuildStatus = JpsRemoteProto.Message.Response.BuildEvent.Status.SUCCESS; + myWolf = WolfTheProblemSolver.getInstance(project); + } + + @Override + public boolean handleBuildEvent(JpsRemoteProto.Message.Response.BuildEvent event) { + final JpsRemoteProto.Message.Response.BuildEvent.Type type = event.getEventType(); + if (type == JpsRemoteProto.Message.Response.BuildEvent.Type.FILES_GENERATED) { + for (JpsRemoteProto.Message.Response.BuildEvent.GeneratedFile gf : event.getGeneratedFilesList()) { + } + } + if (type == JpsRemoteProto.Message.Response.BuildEvent.Type.BUILD_COMPLETED) { + if (event.hasCompletionStatus()) { + myBuildStatus = event.getCompletionStatus(); + } + return true; + } + return false; + } + + @Override + public void handleCompileMessage(JpsRemoteProto.Message.Response.CompileMessage compileResponse) { + final JpsRemoteProto.Message.Response.CompileMessage.Kind kind = compileResponse.getKind(); + if (kind == JpsRemoteProto.Message.Response.CompileMessage.Kind.ERROR) { + informWolf(myProject, compileResponse); + } + } + + @Override + public void handleFailure(JpsRemoteProto.Message.Failure failure) { + CompilerManager.NOTIFICATION_GROUP.createNotification("Auto make failure: " + failure.getDescription(), MessageType.INFO); + } + + @Override + public void sessionTerminated() { + String statusMessage = "Auto make completed"; + switch (myBuildStatus) { + case SUCCESS: + statusMessage = "Auto make completed successfully"; + break; + case UP_TO_DATE: + statusMessage = "All files are up-to-date"; + break; + case ERRORS: + statusMessage = "Auto make completed with errors"; + break; + case CANCELED: + statusMessage = "Auto make has been canceled"; + break; + } + final Notification notification = CompilerManager.NOTIFICATION_GROUP.createNotification(statusMessage, MessageType.INFO); + if (!myProject.isDisposed()) { + notification.notify(myProject); + } + } + + private void informWolf(Project project, JpsRemoteProto.Message.Response.CompileMessage message) { + final String srcPath = message.getSourceFilePath(); + if (srcPath != null && !project.isDisposed()) { + final VirtualFile vFile = LocalFileSystem.getInstance().findFileByPath(srcPath); + if (vFile != null) { + final int line = (int)message.getLine(); + final int column = (int)message.getColumn(); + if (line > 0 && column > 0) { + final Problem problem = myWolf.convertToProblem(vFile, line, column, new String[]{message.getText()}); + myWolf.weHaveGotProblems(vFile, Collections.singletonList(problem)); + } + else { + myWolf.queue(vFile); + } + } + } + } + } + private class ProjectWatcher extends ProjectManagerAdapter { private final Map myConnections = new HashMap(); diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java index 38a4c9a8c716..7cf748d5bf3c 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/CompileDriver.java @@ -30,7 +30,6 @@ import com.intellij.compiler.make.DependencyCache; import com.intellij.compiler.progress.CompilerTask; import com.intellij.diagnostic.IdeErrorsDialog; import com.intellij.diagnostic.PluginException; -import com.intellij.notification.NotificationGroup; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ModalityState; import com.intellij.openapi.application.Result; @@ -103,7 +102,6 @@ import java.util.*; import java.util.concurrent.ExecutionException; public class CompileDriver { - private static final NotificationGroup NOTIFICATION_GROUP = NotificationGroup.logOnlyGroup("Compiler"); private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.impl.CompileDriver"); // to be used in tests only for debug output @@ -425,9 +423,10 @@ public class CompileDriver { moduleNames.add(module.getName()); } } - final CompileServerManager jpsServerManager = CompileServerManager.getInstance(); + final CompileServerManager csManager = CompileServerManager.getInstance(); final MessageBus messageBus = myProject.getMessageBus(); - return jpsServerManager.submitCompilationTask(myProject.getLocation(), compileContext.isRebuild(), compileContext.isMake(), moduleNames, paths, new JpsServerResponseHandler() { + csManager.cancelAutoMakeTasks(myProject); + return csManager.submitCompilationTask(myProject, compileContext.isRebuild(), compileContext.isMake(), moduleNames, paths, new JpsServerResponseHandler() { @Override public void handleCompileMessage(JpsRemoteProto.Message.Response.CompileMessage compilerMessage) { @@ -807,7 +806,7 @@ public class CompileDriver { ToolWindowManager.getInstance(myProject).notifyByBalloon(ToolWindowId.MESSAGES_WINDOW, messageType, statusMessage); } - NOTIFICATION_GROUP.createNotification(_status == ExitStatus.UP_TO_DATE ? "Compilation: all files are up to date" : statusMessage, messageType).notify(myProject); + CompilerManager.NOTIFICATION_GROUP.createNotification(_status == ExitStatus.UP_TO_DATE ? "Compilation: all files are up to date" : statusMessage, messageType).notify(myProject); if (_status != ExitStatus.UP_TO_DATE && compileContext.getMessageCount(null) > 0) { compileContext.addMessage(CompilerMessageCategory.INFORMATION, statusMessage, null, -1, -1); diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form b/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form index 3438552c1290..cd0fd7b13e98 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerOptionsPanel.form @@ -1,6 +1,6 @@
- + @@ -10,7 +10,7 @@ - + @@ -93,6 +93,14 @@ + + + + + + + + diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java index 272086fd3903..ba0b854714f3 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -25,6 +25,8 @@ import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; @@ -40,6 +42,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura private JLabel myPatternLegendLabel; private JCheckBox myCbAutoShowFirstError; private JCheckBox myCbUseCompileServer; + private JCheckBox myCbMakeProjectOnSave; public CompilerUIConfigurable(final Project project) { myProject = project; @@ -49,6 +52,12 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura "/ — path separator; /**/ — any number of directories; " + "<dir_name>:<pattern> — restrict to source roots with the specified name" + ""); + myCbUseCompileServer.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + myCbMakeProjectOnSave.setEnabled(myCbUseCompileServer.isSelected()); + } + }); } public void reset() { @@ -60,6 +69,8 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura myCbClearOutputDirectory.setSelected(workspaceConfiguration.CLEAR_OUTPUT_DIRECTORY); myCbAssertNotNull.setSelected(workspaceConfiguration.ASSERT_NOT_NULL); myCbUseCompileServer.setSelected(workspaceConfiguration.USE_COMPILE_SERVER); + myCbMakeProjectOnSave.setSelected(workspaceConfiguration.MAKE_PROJECT_ON_SAVE); + myCbMakeProjectOnSave.setEnabled(workspaceConfiguration.USE_COMPILE_SERVER); configuration.convertPatterns(); @@ -86,6 +97,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura workspaceConfiguration.CLEAR_OUTPUT_DIRECTORY = myCbClearOutputDirectory.isSelected(); workspaceConfiguration.ASSERT_NOT_NULL = myCbAssertNotNull.isSelected(); workspaceConfiguration.USE_COMPILE_SERVER = myCbUseCompileServer.isSelected(); + workspaceConfiguration.MAKE_PROJECT_ON_SAVE = myCbMakeProjectOnSave.isSelected(); configuration.removeResourceFilePatterns(); String extensionString = myResourcePatternsField.getText().trim(); @@ -143,6 +155,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura isModified |= ComparingUtils.isModified(myCbAutoShowFirstError, workspaceConfiguration.AUTO_SHOW_ERRORS_IN_EDITOR); isModified |= ComparingUtils.isModified(myCbAssertNotNull, workspaceConfiguration.ASSERT_NOT_NULL); isModified |= ComparingUtils.isModified(myCbUseCompileServer, workspaceConfiguration.USE_COMPILE_SERVER); + isModified |= ComparingUtils.isModified(myCbMakeProjectOnSave, workspaceConfiguration.MAKE_PROJECT_ON_SAVE); final CompilerConfigurationImpl compilerConfiguration = (CompilerConfigurationImpl)CompilerConfiguration.getInstance(myProject); isModified |= ComparingUtils.isModified(myCbClearOutputDirectory, workspaceConfiguration.CLEAR_OUTPUT_DIRECTORY); diff --git a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java index 873229311115..4292b6420bfd 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java +++ b/java/compiler/openapi/src/com/intellij/compiler/CompilerWorkspaceConfiguration.java @@ -41,6 +41,7 @@ public class CompilerWorkspaceConfiguration implements PersistentStateComponent< public boolean CLEAR_OUTPUT_DIRECTORY = true; public boolean ASSERT_NOT_NULL = true; public boolean USE_COMPILE_SERVER = false; + public boolean MAKE_PROJECT_ON_SAVE = false; public static CompilerWorkspaceConfiguration getInstance(Project project) { return ServiceManager.getService(project, CompilerWorkspaceConfiguration.class); diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java index 01539f475a28..0b4284a8d7a6 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.compiler; +import com.intellij.notification.NotificationGroup; import com.intellij.openapi.Disposable; import com.intellij.openapi.components.ServiceManager; import com.intellij.openapi.fileTypes.FileType; @@ -34,6 +35,8 @@ import java.util.Set; */ public abstract class CompilerManager { public static final Key CONTENT_ID_KEY = Key.create("COMPILATION_CONTENT_ID_CUSTOM_KEY"); + public static final NotificationGroup NOTIFICATION_GROUP = NotificationGroup.logOnlyGroup("Compiler"); + /** * Returns the compiler manager instance for the specified project. * diff --git a/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java b/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java index 8774292a3550..38c344f16fba 100644 --- a/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java +++ b/java/testFramework/src/com/intellij/testFramework/fixtures/LightCodeInsightFixtureTestCase.java @@ -24,10 +24,7 @@ import com.intellij.openapi.roots.LanguageLevelModuleExtension; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.pom.java.LanguageLevel; import com.intellij.psi.*; -import com.intellij.testFramework.IdeaTestCase; -import com.intellij.testFramework.LightProjectDescriptor; -import com.intellij.testFramework.PlatformTestUtil; -import com.intellij.testFramework.UsefulTestCase; +import com.intellij.testFramework.*; import com.intellij.testFramework.fixtures.impl.LightTempDirTestFixtureImpl; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -55,6 +52,11 @@ public abstract class LightCodeInsightFixtureTestCase extends UsefulTestCase{ IdeaTestCase.initPlatformPrefix(); } + @SuppressWarnings("JUnitTestCaseWithNonTrivialConstructors") + public LightCodeInsightFixtureTestCase(String classToTest, String prefix) { + PlatformTestCase.initPlatformPrefix(classToTest, prefix); + } + @Override protected void setUp() throws Exception { super.setUp(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/BuildParameters.java b/jps/jps-builders/src/org/jetbrains/jps/api/BuildParameters.java deleted file mode 100644 index f25d17fde118..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/api/BuildParameters.java +++ /dev/null @@ -1,17 +0,0 @@ -package org.jetbrains.jps.api; - -/** -* @author Eugene Zhuravlev -* Date: 9/10/11 -*/ -public class BuildParameters { - public BuildType buildType = BuildType.MAKE; - public boolean useInProcessJavac = true; - - public BuildParameters() { - } - - public BuildParameters(BuildType buildType) { - this.buildType = buildType; - } -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/api/JpsServerResponseHandler.java b/jps/jps-builders/src/org/jetbrains/jps/api/JpsServerResponseHandler.java index 2254ae8de1b5..38f80e3d9b25 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/api/JpsServerResponseHandler.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/JpsServerResponseHandler.java @@ -7,7 +7,7 @@ import org.jetbrains.jps.client.ProtobufResponseHandler; * @author Eugene Zhuravlev * Date: 8/15/11 */ -public class JpsServerResponseHandler implements ProtobufResponseHandler { +public abstract class JpsServerResponseHandler implements ProtobufResponseHandler { public final boolean handleMessage(MessageLite msg) throws Exception { final JpsRemoteProto.Message message = (JpsRemoteProto.Message)msg; @@ -40,15 +40,11 @@ public class JpsServerResponseHandler implements ProtobufResponseHandler { * @param event * @return true if session should be terminated, false otherwise */ - public boolean handleBuildEvent(JpsRemoteProto.Message.Response.BuildEvent event) { - return false; - } + public abstract boolean handleBuildEvent(JpsRemoteProto.Message.Response.BuildEvent event); - public void handleCompileMessage(JpsRemoteProto.Message.Response.CompileMessage compileResponse) { - } + public abstract void handleCompileMessage(JpsRemoteProto.Message.Response.CompileMessage compileResponse); - public void handleFailure(JpsRemoteProto.Message.Failure failure) { - } + public abstract void handleFailure(JpsRemoteProto.Message.Failure failure); public void sessionTerminated() { } diff --git a/java/compiler/impl/src/com/intellij/compiler/SequentialTaskExecutor.java b/jps/jps-builders/src/org/jetbrains/jps/api/SequentialTaskExecutor.java similarity index 97% rename from java/compiler/impl/src/com/intellij/compiler/SequentialTaskExecutor.java rename to jps/jps-builders/src/org/jetbrains/jps/api/SequentialTaskExecutor.java index d095a296aeda..38ce49434cab 100644 --- a/java/compiler/impl/src/com/intellij/compiler/SequentialTaskExecutor.java +++ b/jps/jps-builders/src/org/jetbrains/jps/api/SequentialTaskExecutor.java @@ -1,4 +1,4 @@ -package com.intellij.compiler; +package org.jetbrains.jps.api; import java.util.Queue; import java.util.concurrent.FutureTask; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 769dbd61dbb2..cfba0719cf25 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -29,6 +29,7 @@ import java.util.concurrent.ExecutionException; */ public class IncProjectBuilder { private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.IncProjectBuilder"); + public static final String JPS_SERVER_NAME = "JPS BUILD"; private static final String CANCELED_MESSAGE = "The build has been canceled"; @@ -56,7 +57,7 @@ public class IncProjectBuilder { myCancelStatus = cs; myProductionChunks = new ProjectChunks(pd.project, ClasspathKind.PRODUCTION_COMPILE); myTestChunks = new ProjectChunks(pd.project, ClasspathKind.TEST_COMPILE); - myTotalModulesWork = (float) pd.rootsIndex.getTotalModuleCount() * 2; /* multiply by 2 to reflect production and test sources */ + myTotalModulesWork = (float)pd.rootsIndex.getTotalModuleCount() * 2; /* multiply by 2 to reflect production and test sources */ myTotalBuilderCount = builderRegistry.getTotalBuilderCount(); } @@ -74,10 +75,9 @@ public class IncProjectBuilder { catch (ProjectBuildException e) { if (e.getCause() instanceof PersistentEnumerator.CorruptedException) { // force rebuild - myMessageDispatcher.processMessage(new CompilerMessage( - JPS_SERVER_NAME, BuildMessage.Kind.INFO, - "Internal caches are corrupted or have outdated format, forcing project rebuild: " + e.getMessage()) - ); + myMessageDispatcher.processMessage(new CompilerMessage(JPS_SERVER_NAME, BuildMessage.Kind.INFO, + "Internal caches are corrupted or have outdated format, forcing project rebuild: " + + e.getMessage())); flushContext(context); context = createContext(new AllProjectScope(scope.getProject(), true), false, true); runBuild(context); @@ -122,6 +122,7 @@ public class IncProjectBuilder { } private static boolean ourClenupFailed = false; + private static void cleanupJavacNameTable() { try { if (JavaBuilder.USE_EMBEDDED_JAVAC && !ourClenupFailed) { @@ -168,9 +169,8 @@ public class IncProjectBuilder { final FSState fsState = myProjectDescriptor.fsState; final ModuleRootsIndex rootsIndex = myProjectDescriptor.rootsIndex; final BuildDataManager dataManager = myProjectDescriptor.dataManager; - return new CompileContext( - scope, isMake, isProjectRebuild, myProductionChunks, myTestChunks, fsState, dataManager, tsStorage, myMessageDispatcher, rootsIndex, myCancelStatus - ); + return new CompileContext(scope, isMake, isProjectRebuild, myProductionChunks, myTestChunks, fsState, dataManager, tsStorage, + myMessageDispatcher, rootsIndex, myCancelStatus); } private void cleanOutputRoots(CompileContext context) throws ProjectBuildException { @@ -235,7 +235,9 @@ public class IncProjectBuilder { } } else { - context.processMessage(new CompilerMessage(JPS_SERVER_NAME, BuildMessage.Kind.WARNING, "Output path " + outputRoot.getPath() + " intersects with a source root. The output cannot be cleaned.")); + context.processMessage(new CompilerMessage(JPS_SERVER_NAME, BuildMessage.Kind.WARNING, "Output path " + + outputRoot.getPath() + + " intersects with a source root. The output cannot be cleaned.")); } } @@ -262,7 +264,7 @@ public class IncProjectBuilder { } } - private void buildChunk(CompileContext context, ModuleChunk chunk) throws ProjectBuildException{ + private void buildChunk(CompileContext context, ModuleChunk chunk) throws ProjectBuildException { try { context.ensureFSStateInitialized(chunk); if (context.isMake()) { @@ -275,7 +277,8 @@ public class IncProjectBuilder { allChunkRemovedSources.addAll(deletedPaths); final String moduleName = module.getName().toLowerCase(Locale.US); - final SourceToOutputMapping sourceToOutputStorage = context.getDataManager().getSourceToOutputMap(moduleName, context.isCompilingTests()); + final SourceToOutputMapping sourceToOutputStorage = + context.getDataManager().getSourceToOutputMap(moduleName, context.isCompilingTests()); // actually delete outputs associated with removed paths for (String deletedSource : deletedPaths) { // deleting outputs corresponding to non-existing source @@ -383,12 +386,13 @@ public class IncProjectBuilder { while (nextPassRequired); } - private static void syncOutputFiles(CompileContext context, ModuleChunk chunk) throws ProjectBuildException { + private static void syncOutputFiles(final CompileContext context, ModuleChunk chunk) throws ProjectBuildException { final BuildDataManager dataManager = context.getDataManager(); final boolean compilingTests = context.isCompilingTests(); try { context.processFilesToRecompile(chunk, new FileProcessor() { private final Map storageMap = new HashMap(); + @Override public boolean apply(Module module, File file, String sourceRoot) throws Exception { SourceToOutputMapping srcToOut = storageMap.get(module); @@ -398,6 +402,23 @@ public class IncProjectBuilder { } final String srcPath = FileUtil.toSystemIndependentName(file.getPath()); final Collection outputs = srcToOut.getState(srcPath); + + if (LOG.isDebugEnabled()) { + if (outputs != null && context.isMake()) { + LOG.info("Cleaning output files:"); + final String[] buffer = new String[outputs.size()]; + int i = 0; + for (String output : outputs) { + buffer[i++] = output; + } + Arrays.sort(buffer); + for (String output : buffer) { + LOG.info(output); + } + LOG.info("End of files"); + } + } + if (outputs != null) { for (String output : outputs) { FileUtil.delete(new File(output)); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 21fcda8832f1..91310a34b29e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -3,6 +3,7 @@ package org.jetbrains.jps.incremental.java; import com.intellij.compiler.notNullVerification.NotNullVerifyingInstrumenter; import com.intellij.execution.process.BaseOSProcessHandler; import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.io.FileUtil; @@ -34,7 +35,8 @@ import org.objectweb.asm.ClassWriter; import org.objectweb.asm.Opcodes; import org.objectweb.asm.commons.EmptyVisitor; -import javax.tools.*; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; import java.io.*; import java.net.MalformedURLException; import java.net.ServerSocket; @@ -49,6 +51,8 @@ import java.util.concurrent.ExecutorService; * Date: 9/21/11 */ public class JavaBuilder extends ModuleLevelBuilder { + private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.java.JavaBuilder"); + public static final String BUILDER_NAME = "java"; private static final String JAVA_EXTENSION = ".java"; private static final String FORM_EXTENSION = ".form"; @@ -171,6 +175,21 @@ public class JavaBuilder extends ModuleLevelBuilder { } } + if (LOG.isDebugEnabled()) { + if (filesToCompile.size() > 0 && context.isMake()) { + LOG.info("Compiling files:"); + final String[] buffer = new String[filesToCompile.size()]; + int i = 0; + for (final File f : filesToCompile) { + buffer[i++] = FileUtil.toSystemIndependentName(f.getCanonicalPath()); + } + Arrays.sort(buffer); + for (final String s : buffer) { + LOG.info(s); + } + LOG.info("End of files"); + } + } return compile(context, chunk, filesToCompile, formsToCompile); } @@ -199,7 +218,7 @@ public class JavaBuilder extends ModuleLevelBuilder { while (true) { final File candidate = new File(srcRoot, relPath); if (candidate.exists()) { - return candidate.isFile()? candidate : null; + return candidate.isFile() ? candidate : null; } final int index = relPath.lastIndexOf('/'); if (index <= 0) { @@ -209,7 +228,8 @@ public class JavaBuilder extends ModuleLevelBuilder { } } - private ExitCode compile(final CompileContext context, ModuleChunk chunk, Collection files, Collection forms) throws Exception { + private ExitCode compile(final CompileContext context, ModuleChunk chunk, Collection files, Collection forms) + throws Exception { ExitCode exitCode = ExitCode.OK; final boolean hasSourcesToCompile = !files.isEmpty() || !forms.isEmpty(); @@ -222,8 +242,10 @@ public class JavaBuilder extends ModuleLevelBuilder { final boolean addNotNullAssertions = context.getProject().getCompilerConfiguration().isAddNotNullAssertions(); - final Collection classpath = paths.getCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/); - final Collection platformCp = paths.getPlatformCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/); + final Collection classpath = + paths.getCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/); + final Collection platformCp = + paths.getPlatformCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/); final Map> outs = buildOutputDirectoriesMap(context, chunk); // begin compilation round @@ -233,11 +255,9 @@ public class JavaBuilder extends ModuleLevelBuilder { DELTA_MAPPINGS_CALLBACK_KEY.set(context, delta.getCallback()); try { if (hasSourcesToCompile) { - final Set sourcePath = TEMPORARY_SOURCE_ROOTS_KEY.get(context,Collections.emptySet()); + final Set sourcePath = TEMPORARY_SOURCE_ROOTS_KEY.get(context, Collections.emptySet()); - final boolean compiledOk = compileJava( - files, classpath, platformCp, sourcePath, outs, context, diagnosticSink, outputSink - ); + final boolean compiledOk = compileJava(files, classpath, platformCp, sourcePath, outs, context, diagnosticSink, outputSink); final Map chunkSourcePath = ProjectPaths.getSourceRootsWithDependents(chunk, context.isCompilingTests()); final ClassLoader compiledClassesLoader = createInstrumentationClassLoader(classpath, platformCp, chunkSourcePath, outputSink); @@ -266,7 +286,8 @@ public class JavaBuilder extends ModuleLevelBuilder { throw new ProjectBuildException("Compilation failed: internal java compiler error"); } if (diagnosticSink.getErrorCount() > 0) { - throw new ProjectBuildException("Compilation failed: errors: " + diagnosticSink.getErrorCount() + "; warnings: " + diagnosticSink.getWarningCount()); + throw new ProjectBuildException( + "Compilation failed: errors: " + diagnosticSink.getErrorCount() + "; warnings: " + diagnosticSink.getWarningCount()); } } } @@ -291,17 +312,26 @@ public class JavaBuilder extends ModuleLevelBuilder { return exitCode; } - private boolean compileJava(Collection files, Collection classpath, Collection platformCp, Collection sourcePath, Map> outs, CompileContext context, DiagnosticOutputConsumer diagnosticSink, final OutputFileConsumer outputSink) throws Exception { + private boolean compileJava(Collection files, + Collection classpath, + Collection platformCp, + Collection sourcePath, + Map> outs, + CompileContext context, + DiagnosticOutputConsumer diagnosticSink, + final OutputFileConsumer outputSink) throws Exception { final List options = getCompilationOptions(context); final ClassProcessingConsumer classesConsumer = new ClassProcessingConsumer(context, outputSink); try { final boolean rc; if (USE_EMBEDDED_JAVAC) { - rc = JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, classesConsumer, context.getCancelStatus()); + rc = JavacMain + .compile(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, classesConsumer, context.getCancelStatus()); } else { final JavacServerClient client = ensureJavacServerLaunched(context); - final RequestFuture future = client.sendCompileRequest(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, classesConsumer); + final RequestFuture future = + client.sendCompileRequest(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, classesConsumer); try { future.get(); } @@ -331,9 +361,8 @@ public class JavaBuilder extends ModuleLevelBuilder { final int port = findFreePort(); final int heapSize = getJavacServerHeapSize(context); - final BaseOSProcessHandler processHandler = JavacServerBootstrap.launchJavacServer( - vmExecPath, heapSize, port, Paths.getSystemRoot(), getCompilationVMOptions(context) - ); + final BaseOSProcessHandler processHandler = + JavacServerBootstrap.launchJavacServer(vmExecPath, heapSize, port, Paths.getSystemRoot(), getCompilationVMOptions(context)); final JavacServerClient client = new JavacServerClient(); try { client.connect(hostString, port); @@ -355,7 +384,7 @@ public class JavaBuilder extends ModuleLevelBuilder { finally { //workaround for linux : calling close() immediately after opening socket //may result that socket is not closed - synchronized(serverSocket) { + synchronized (serverSocket) { try { serverSocket.wait(1); } @@ -386,8 +415,10 @@ public class JavaBuilder extends ModuleLevelBuilder { return heapSize; } - private static ClassLoader createInstrumentationClassLoader(Collection classpath, Collection platformCp, Map chunkSourcePath, OutputFilesSink outputSink) - throws MalformedURLException { + private static ClassLoader createInstrumentationClassLoader(Collection classpath, + Collection platformCp, + Map chunkSourcePath, + OutputFilesSink outputSink) throws MalformedURLException { final List urls = new ArrayList(); for (Collection cp : Arrays.asList(platformCp, classpath)) { for (File file : cp) { @@ -448,9 +479,9 @@ public class JavaBuilder extends ModuleLevelBuilder { boolean isEncodingSet = false; if (customArgs != null) { final StringTokenizer tokenizer = new StringTokenizer(customArgs, " \t\r\n"); - while(tokenizer.hasMoreTokens()) { + while (tokenizer.hasMoreTokens()) { final String token = tokenizer.nextToken(); - if ("-g".equals(token) || "-deprecation".equals(token) || "-nowarn".equals(token) || "-verbose".equals(token)){ + if ("-g".equals(token) || "-deprecation".equals(token) || "-nowarn".equals(token) || "-verbose".equals(token)) { continue; } if (token.startsWith("-J-")) { @@ -534,13 +565,12 @@ public class JavaBuilder extends ModuleLevelBuilder { } } - private static void instrumentForms( - CompileContext context, - ModuleChunk chunk, - final Map chunkSourcePath, - final ClassLoader loader, - Collection formsToInstrument, - OutputFilesSink outputSink) throws ProjectBuildException { + private static void instrumentForms(CompileContext context, + ModuleChunk chunk, + final Map chunkSourcePath, + final ClassLoader loader, + Collection formsToInstrument, + OutputFilesSink outputSink) throws ProjectBuildException { final Map class2form = new HashMap(); final SourceToFormMapping sourceToFormMap = context.getDataManager().getSourceToFormMap(); @@ -550,9 +580,8 @@ public class JavaBuilder extends ModuleLevelBuilder { compiledClassNames.put(fileObject.getClassName(), fileObject); } - final MyNestedFormLoader nestedFormsLoader = new MyNestedFormLoader( - chunkSourcePath, ProjectPaths.getOutputPathsWithDependents(chunk, context.isCompilingTests()) - ); + final MyNestedFormLoader nestedFormsLoader = + new MyNestedFormLoader(chunkSourcePath, ProjectPaths.getOutputPathsWithDependents(chunk, context.isCompilingTests())); for (File formFile : formsToInstrument) { final LwRootContainer rootContainer; @@ -574,17 +603,20 @@ public class JavaBuilder extends ModuleLevelBuilder { final OutputFileObject outputClassFile = findClassFile(compiledClassNames, classToBind); if (outputClassFile == null) { - context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.WARNING, "Class to bind does not exist: " + classToBind, formFile.getAbsolutePath())); + context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.WARNING, "Class to bind does not exist: " + classToBind, + formFile.getAbsolutePath())); continue; } final File alreadyProcessedForm = class2form.get(classToBind); if (alreadyProcessedForm != null) { - context.processMessage(new CompilerMessage( - BUILDER_NAME, BuildMessage.Kind.WARNING, - formFile.getAbsolutePath() + ": The form is bound to the class " + classToBind + ".\nAnother form " + alreadyProcessedForm.getAbsolutePath() + " is also bound to this class", - formFile.getAbsolutePath()) - ); + context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.WARNING, formFile.getAbsolutePath() + + ": The form is bound to the class " + + classToBind + + ".\nAnother form " + + alreadyProcessedForm.getAbsolutePath() + + " is also bound to this class", + formFile.getAbsolutePath())); continue; } @@ -593,7 +625,8 @@ public class JavaBuilder extends ModuleLevelBuilder { boolean success = true; try { final OutputFileObject.Content originalContent = outputClassFile.getContent(); - final ClassReader classReader = new ClassReader(originalContent.getBuffer(), originalContent.getOffset(), originalContent.getLength()); + final ClassReader classReader = + new ClassReader(originalContent.getBuffer(), originalContent.getOffset(), originalContent.getLength()); final int version = getClassFileVersion(classReader); final InstrumenterClassWriter classWriter = new InstrumenterClassWriter(getAsmClassWriterFlags(version), loader); @@ -605,7 +638,8 @@ public class JavaBuilder extends ModuleLevelBuilder { final FormErrorInfo[] warnings = codeGenerator.getWarnings(); for (final FormErrorInfo warning : warnings) { - context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.WARNING, warning.getErrorMessage(), formFile.getAbsolutePath())); + context.processMessage( + new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.WARNING, warning.getErrorMessage(), formFile.getAbsolutePath())); } final FormErrorInfo[] errors = codeGenerator.getErrors(); @@ -629,7 +663,8 @@ public class JavaBuilder extends ModuleLevelBuilder { } catch (Exception e) { success = false; - context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, "Forms instrumentation failed" + e.getMessage(), formFile.getAbsolutePath())); + context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, "Forms instrumentation failed" + e.getMessage(), + formFile.getAbsolutePath())); } finally { if (!success) { @@ -713,13 +748,12 @@ public class JavaBuilder extends ModuleLevelBuilder { kind = BuildMessage.Kind.INFO; } final JavaFileObject source = diagnostic.getSource(); - final File sourceFile = source != null? Paths.convertToFile(source.toUri()) : null; - final String srcPath = sourceFile != null? FileUtil.toSystemIndependentName(sourceFile.getPath()) : null; - myContext.processMessage(new CompilerMessage( - BUILDER_NAME, kind, diagnostic.getMessage(Locale.US), srcPath, - diagnostic.getStartPosition(), diagnostic.getEndPosition(), diagnostic.getPosition(), - diagnostic.getLineNumber(), diagnostic.getColumnNumber() - )); + final File sourceFile = source != null ? Paths.convertToFile(source.toUri()) : null; + final String srcPath = sourceFile != null ? FileUtil.toSystemIndependentName(sourceFile.getPath()) : null; + myContext.processMessage( + new CompilerMessage(BUILDER_NAME, kind, diagnostic.getMessage(Locale.US), srcPath, diagnostic.getStartPosition(), + diagnostic.getEndPosition(), diagnostic.getPosition(), diagnostic.getLineNumber(), + diagnostic.getColumnNumber())); } public int getErrorCount() { @@ -762,7 +796,7 @@ public class JavaBuilder extends ModuleLevelBuilder { public OutputFileObject.Content lookupClassBytes(String className) { synchronized (myCompiledClasses) { final OutputFileObject object = myCompiledClasses.get(className); - return object != null? object.getContent() : null; + return object != null ? object.getContent() : null; } } @@ -979,7 +1013,7 @@ public class JavaBuilder extends ModuleLevelBuilder { public ClassProcessingConsumer(CompileContext compileContext, OutputFileConsumer sink) { myCompileContext = compileContext; - myDelegateOutputFileSink = sink != null? sink : new OutputFileConsumer() { + myDelegateOutputFileSink = sink != null ? sink : new OutputFileConsumer() { public void save(@NotNull OutputFileObject fileObject) { throw new RuntimeException("Output sink for compiler was not specified"); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/AbstractStateStorage.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/AbstractStateStorage.java index 6da5a613e651..9b7ba49e1749 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/AbstractStateStorage.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/AbstractStateStorage.java @@ -34,7 +34,9 @@ public abstract class AbstractStateStorage { public void dropMemoryCache() { synchronized (myDataLock) { - myMap.dropMemoryCaches(); + if (myMap.isDirty()) { + myMap.dropMemoryCaches(); + } } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java b/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java index 419fbae35b45..0b49fee14964 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ServerMessageHandler.java @@ -4,6 +4,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.Ref; import org.jboss.netty.channel.*; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.api.*; import org.jetbrains.jps.incremental.MessageHandler; @@ -13,8 +14,9 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.PrintStream; import java.util.*; -import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; +import java.util.concurrent.RunnableFuture; /** * @author Eugene Zhuravlev @@ -23,7 +25,8 @@ import java.util.concurrent.ExecutorService; class ServerMessageHandler extends SimpleChannelHandler { private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.server.ServerMessageHandler"); - private final ConcurrentHashMap myBuildsInProgress = new ConcurrentHashMap(); + private final Map myTaskExecutors = new HashMap(); + private final List> myBuildsInProgress = Collections.synchronizedList(new LinkedList>()); private final ExecutorService myBuildsExecutor; private final Server myServer; @@ -60,10 +63,16 @@ class ServerMessageHandler extends SimpleChannelHandler { case CANCEL_BUILD_COMMAND: final JpsRemoteProto.Message.Request.CancelBuildCommand cancelCommand = request.getCancelBuildCommand(); final UUID targetSessionId = ProtoUtil.fromProtoUUID(cancelCommand.getTargetSessionId()); - for (CompilationTask task : myBuildsInProgress.values()) { - if (task.getSessionId().equals(targetSessionId)) { - task.cancel(); - break; + synchronized (myBuildsInProgress) { + for (Iterator> it = myBuildsInProgress.iterator(); it.hasNext(); ) { + final Pair pair = it.next(); + final CompilationTask task = pair.second; + if (task.getSessionId().equals(targetSessionId)) { + it.remove(); + task.cancel(); + pair.first.cancel(true); + break; + } } } reply = ProtoUtil.toMessage(sessionId, ProtoUtil.createCommandCompletedEvent(null)); @@ -91,19 +100,30 @@ class ServerMessageHandler extends SimpleChannelHandler { // todo pay attention to policy myBuildsExecutor.submit(new Runnable() { public void run() { - for (Map.Entry entry : myBuildsInProgress.entrySet()) { - final CompilationTask task = entry.getValue(); - task.cancel(); + final List futures = new ArrayList(); + + synchronized (myBuildsInProgress) { + for (Iterator> it = myBuildsInProgress.iterator(); it.hasNext(); ) { + final Pair pair = it.next(); + it.remove(); + pair.second.cancel(); + final RunnableFuture future = pair.first; + futures.add(future); + future.cancel(true); + } } facade.clearCahedState(); - while (!myBuildsInProgress.isEmpty()) { + // wait until really stopped + for (RunnableFuture future : futures) { try { - Thread.sleep(100L); + future.get(); } catch (InterruptedException ignored) { } + catch (ExecutionException ignored) { + } } myServer.stop(); @@ -149,19 +169,15 @@ class ServerMessageHandler extends SimpleChannelHandler { switch (compileType) { // todo - case CLEAN: case MAKE: case FORCED_COMPILATION: case REBUILD: { - final CompilationTask task = new CompilationTask(sessionId, channelContext, projectId, compileRequest.getModuleNameList(), compileRequest.getFilePathList()); - if (myBuildsInProgress.putIfAbsent(projectId, task) == null) { - task.getBuildParams().buildType = convertCompileType(compileType); - task.getBuildParams().useInProcessJavac = true; - myBuildsExecutor.submit(task); - } - else { - return ProtoUtil.toMessage(sessionId, ProtoUtil.createFailure("Project is being compiled already")); - } + final BuildType buildType = convertCompileType(compileType); + final CompilationTask task = new CompilationTask( + sessionId, channelContext, projectId, buildType, compileRequest.getModuleNameList(), compileRequest.getFilePathList() + ); + final RunnableFuture future = getCompileTaskExecutor(projectId).submit(task); + myBuildsInProgress.add(new Pair(future, task)); return null; } @@ -170,6 +186,23 @@ class ServerMessageHandler extends SimpleChannelHandler { } } + @NotNull + private SequentialTaskExecutor getCompileTaskExecutor(String projectId) { + synchronized (myTaskExecutors) { + SequentialTaskExecutor executor = myTaskExecutors.get(projectId); + if (executor == null) { + executor = new SequentialTaskExecutor(new SequentialTaskExecutor.AsyncTaskExecutor() { + @Override + public void submit(Runnable runnable) { + myBuildsExecutor.submit(runnable); + } + }); + myTaskExecutors.put(projectId, executor); + } + return executor; + } + } + public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { if (this == ctx.getPipeline().getLast()) { LOG.error(e); @@ -182,22 +215,23 @@ class ServerMessageHandler extends SimpleChannelHandler { private final UUID mySessionId; private final ChannelHandlerContext myChannelContext; private final String myProjectPath; + private final BuildType myBuildType; private final Collection myPaths; private final Set myModules; - private final BuildParameters myParams; private volatile boolean myCanceled = false; - public CompilationTask(UUID sessionId, ChannelHandlerContext channelContext, String projectId, Collection modules, Collection paths) { + public CompilationTask(UUID sessionId, + ChannelHandlerContext channelContext, + String projectId, + BuildType buildType, + Collection modules, + Collection paths) { mySessionId = sessionId; myChannelContext = channelContext; myProjectPath = projectId; + myBuildType = buildType; myPaths = paths; myModules = new HashSet(modules); - myParams = new BuildParameters(); - } - - public BuildParameters getBuildParams() { - return myParams; } public UUID getSessionId() { @@ -214,7 +248,7 @@ class ServerMessageHandler extends SimpleChannelHandler { final Ref hasErrors = new Ref(false); final Ref markedFilesUptodate = new Ref(false); try { - ServerState.getInstance().startBuild(myProjectPath, myModules, myPaths, myParams, new MessageHandler() { + ServerState.getInstance().startBuild(myProjectPath, myBuildType, myModules, myPaths, new MessageHandler() { public void processMessage(BuildMessage buildMessage) { final JpsRemoteProto.Message.Response response; if (buildMessage instanceof FileGeneratedEvent) { @@ -299,7 +333,16 @@ class ServerMessageHandler extends SimpleChannelHandler { finally { Channels.write(myChannelContext.getChannel(), lastMessage).addListener(new ChannelFutureListener() { public void operationComplete(ChannelFuture future) throws Exception { - myBuildsInProgress.remove(myProjectPath); + final UUID sessionId = getSessionId(); + synchronized (myBuildsInProgress) { + for (Iterator> it = myBuildsInProgress.iterator(); it.hasNext(); ) { + final CompilationTask task = it.next().second; + if (sessionId.equals(task.getSessionId())) { + it.remove(); + break; + } + } + } } }); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java b/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java index 6fedae65e1a3..b82fe1449b28 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/ServerState.java @@ -9,7 +9,10 @@ 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.*; +import org.jetbrains.jps.api.BuildType; +import org.jetbrains.jps.api.CanceledStatus; +import org.jetbrains.jps.api.GlobalLibrary; +import org.jetbrains.jps.api.SdkLibrary; import org.jetbrains.jps.idea.IdeaProjectLoader; import org.jetbrains.jps.incremental.*; import org.jetbrains.jps.incremental.messages.BuildMessage; @@ -116,15 +119,15 @@ class ServerState { } } - public void startBuild(String projectPath, Set modules, Collection paths, final BuildParameters params, final MessageHandler msgHandler, CanceledStatus cs) throws Throwable{ + public void startBuild(String projectPath, BuildType buildType, Set modules, Collection paths, final MessageHandler msgHandler, CanceledStatus cs) throws Throwable{ + final String projectName = getProjectName(projectPath); - BuildType buildType = params.buildType; ProjectDescriptor pd; synchronized (myConfigurationLock) { pd = myProjects.get(projectPath); if (pd == null) { - final Project project = loadProject(projectPath, params); + final Project project = loadProject(projectPath); final FSState fsState = new FSState(false); ProjectTimestamps timestamps = null; BuildDataManager dataManager = null; @@ -262,7 +265,7 @@ class ServerState { return name; } - private Project loadProject(String projectPath, BuildParameters params) { + private Project loadProject(String projectPath) { final Project project = new Project(); // setup JDKs and global libraries final MethodClosure fakeClosure = new MethodClosure(new Object(), "hashCode"); diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java index 923de0d09adc..d2e63772a39e 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -19,7 +19,7 @@ import com.intellij.openapi.diagnostic.Logger; import junit.framework.TestCase; import junitx.framework.FileAssert; import org.apache.log4j.Level; -import org.apache.log4j.xml.DOMConfigurator; +import org.apache.log4j.PropertyConfigurator; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.Project; @@ -34,6 +34,7 @@ import org.jetbrains.jps.incremental.storage.ProjectTimestamps; import org.jetbrains.jps.server.ProjectDescriptor; import java.io.*; +import java.util.Properties; /** * Created by IntelliJ IDEA. @@ -43,6 +44,24 @@ import java.io.*; * To change this template use File | Settings | File Templates. */ public abstract class IncrementalTestCase extends TestCase { + private static class RootStripper { + private String root; + + void setRoot(final String root) { + this.root = root; + } + + String strip(final String s){ + if (s.startsWith(root)) { + return s.substring(root.length()); + } + + return s; + } + } + + private static RootStripper stripper = new RootStripper(); + private final String groupName; private final String tempDir = System.getProperty("java.io.tmpdir"); @@ -55,7 +74,9 @@ public abstract class IncrementalTestCase extends TestCase { } @Override - protected void setUp() throws Exception { + protected void setUp() throws Exception { + super.setUp(); + baseDir = "jps/testData" + File.separator + "incremental" + File.separator; for (int i = 0; ; i++) { @@ -71,6 +92,7 @@ public abstract class IncrementalTestCase extends TestCase { @Override protected void tearDown() throws Exception { + super.tearDown(); // delete(new File(workDir)); } @@ -81,7 +103,7 @@ public abstract class IncrementalTestCase extends TestCase { final String result = Character.toLowerCase(name.charAt("test".length())) + name.substring("test".length() + 1); - return prefix + File.separator + groupName + File.separator + result; + return prefix + groupName + File.separator + result; } private String getBaseDir() { @@ -94,20 +116,27 @@ public abstract class IncrementalTestCase extends TestCase { private void delete(final File file) throws Exception { if (file.isDirectory()) { - for (File f : file.listFiles()) { - delete(f); + final File[] files = file.listFiles(); + + if (files != null) { + for (File f : files) { + delete(f); + } } } if (!file.delete()) throw new IOException("could not delete file or directory " + file.getPath()); - } - private void copy(final File input, final File output) throws Exception { + private static void copy(final File input, final File output) throws Exception { if (input.isDirectory()) { if (output.mkdirs()) { - for (File f : input.listFiles()) { - copy(f, new File(output.getPath() + File.separator + f.getName())); + final File[] files = input.listFiles(); + + if (files != null) { + for (File f : files) { + copy(f, new File(output.getPath() + File.separator + f.getName())); + } } } else { @@ -117,12 +146,15 @@ public abstract class IncrementalTestCase extends TestCase { else if (input.isFile()) { final FileReader in = new FileReader(input); final FileWriter out = new FileWriter(output); - int c; - while ((c = in.read()) != -1) out.write(c); - - in.close(); - out.close(); + try { + int c; + while ((c = in.read()) != -1) out.write(c); + } + finally { + in.close(); + out.close(); + } } } @@ -157,61 +189,66 @@ public abstract class IncrementalTestCase extends TestCase { } private void initLoggers() { - final String logFile = getWorkDir() + File.separator + "log.xml"; + final Properties properties = new Properties(); - if (new File(logFile).exists()) { - DOMConfigurator.configure(logFile); - } + properties.setProperty("log4j.rootCategory", "INFO, A1"); + properties.setProperty("log4j.appender.A1", "org.apache.log4j.FileAppender"); + properties.setProperty("log4j.appender.A1.file", getWorkDir() + ".log"); + properties.setProperty("log4j.appender.A1.layout", "org.apache.log4j.PatternLayout"); + properties.setProperty("log4j.appender.A1.layout.ConversionPattern", "%m%n"); + + PropertyConfigurator.configure(properties); Logger.setFactory(new Logger.Factory() { @Override public Logger getLoggerInstance(String category) { final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(category); + final boolean affectedLogger = category.equals("#org.jetbrains.jps.incremental.java.JavaBuilder") || + category.equals("#org.jetbrains.jps.incremental.IncProjectBuilder"); + + final String root = getWorkDir() + File.separator; + final int pos = root.length(); + return new Logger() { @Override public boolean isDebugEnabled() { - return logger.isDebugEnabled(); + return affectedLogger; } @Override public void debug(@NonNls String message) { - logger.debug(message); } @Override public void debug(@Nullable Throwable t) { - logger.debug("", t); } @Override public void debug(@NonNls String message, @Nullable Throwable t) { - logger.debug(message, t); } @Override public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) { - logger.debug(message, t); } @Override public void info(@NonNls String message) { - logger.info(message); + if (affectedLogger) { + logger.info(stripper.strip(message)); + } } @Override public void info(@NonNls String message, @Nullable Throwable t) { - logger.info(message, t); } @Override public void warn(@NonNls String message, @Nullable Throwable t) { - logger.warn(message, t); } @Override public void setLevel(Level level) { - logger.setLevel(level); } }; } @@ -219,6 +256,8 @@ public abstract class IncrementalTestCase extends TestCase { } public void doTest() throws Exception { + stripper.setRoot(getWorkDir() + File.separator); + initLoggers(); final String projectPath = getWorkDir() + File.separator + ".idea"; diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java index b60661c8948d..b6fcaa713052 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMaplet.java @@ -108,7 +108,9 @@ public class PersistentMaplet implements Maplet { public void flush(boolean memoryCachesOnly) { if (memoryCachesOnly) { - myMap.dropMemoryCaches(); + if (myMap.isDirty()) { + myMap.dropMemoryCaches(); + } } else { myMap.force(); diff --git a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java index b62eb72f2b76..3cfc2966da50 100644 --- a/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java +++ b/jps/model/src/org/jetbrains/ether/dependencyView/PersistentMultiMaplet.java @@ -169,7 +169,9 @@ class PersistentMultiMaplet implements MultiMaplet { public void flush(boolean memoryCachesOnly) { if (memoryCachesOnly) { - myMap.dropMemoryCaches(); + if (myMap.isDirty()) { + myMap.dropMemoryCaches(); + } } else { myMap.force(); diff --git a/jps/testData/incremental/annotations/addAnnotationTarget.log b/jps/testData/incremental/annotations/addAnnotationTarget.log index a78a6242db5f..1ed3ead62078 100644 --- a/jps/testData/incremental/annotations/addAnnotationTarget.log +++ b/jps/testData/incremental/annotations/addAnnotationTarget.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddAnnotationTarget -End of request -digraph X { - AddAnnotationTarget[label="AddAnnotationTarget"]; -} -digraph X { - AddAnnotationTarget[label="AddAnnotationTarget"]; -} -Propagated modules: -module AddAnnotationTarget -End of propagated Cleaning output files: out/production/AddAnnotationTarget/A.class End of files diff --git a/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log b/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log index 92241f48e6d0..603d8374f148 100644 --- a/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log +++ b/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddAnnotationTypeMemberWithDefaultValue -End of request -digraph X { - AddAnnotationTypeMemberWithDefaultValue[label="AddAnnotationTypeMemberWithDefaultValue"]; -} -digraph X { - AddAnnotationTypeMemberWithDefaultValue[label="AddAnnotationTypeMemberWithDefaultValue"]; -} -Propagated modules: -module AddAnnotationTypeMemberWithDefaultValue -End of propagated Cleaning output files: out/production/AddAnnotationTypeMemberWithDefaultValue/A.class End of files diff --git a/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log b/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log index 8dafa1879f59..49cb601e8f5c 100644 --- a/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log +++ b/jps/testData/incremental/annotations/addAnnotationTypeMemberWithDefaultValue2.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddAnnotationTypeMemberWithDefaultValue2 -End of request -digraph X { - AddAnnotationTypeMemberWithDefaultValue2[label="AddAnnotationTypeMemberWithDefaultValue2"]; -} -digraph X { - AddAnnotationTypeMemberWithDefaultValue2[label="AddAnnotationTypeMemberWithDefaultValue2"]; -} -Propagated modules: -module AddAnnotationTypeMemberWithDefaultValue2 -End of propagated Cleaning output files: out/production/AddAnnotationTypeMemberWithDefaultValue2/A.class End of files diff --git a/jps/testData/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log b/jps/testData/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log index bab8795c20d1..ae1ba8229118 100644 --- a/jps/testData/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log +++ b/jps/testData/incremental/annotations/addAnnotationTypeMemberWithoutDefaultValue.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddAnnotationTypeMemberWithoutDefaultValue -End of request -digraph X { - AddAnnotationTypeMemberWithoutDefaultValue[label="AddAnnotationTypeMemberWithoutDefaultValue"]; -} -digraph X { - AddAnnotationTypeMemberWithoutDefaultValue[label="AddAnnotationTypeMemberWithoutDefaultValue"]; -} -Propagated modules: -module AddAnnotationTypeMemberWithoutDefaultValue -End of propagated Cleaning output files: out/production/AddAnnotationTypeMemberWithoutDefaultValue/A.class End of files diff --git a/jps/testData/incremental/annotations/addDefaultToAnnotationMember.log b/jps/testData/incremental/annotations/addDefaultToAnnotationMember.log index 5d7c06246f5b..23ce9c877dd6 100644 --- a/jps/testData/incremental/annotations/addDefaultToAnnotationMember.log +++ b/jps/testData/incremental/annotations/addDefaultToAnnotationMember.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddDefaultToAnnotationMember -End of request -digraph X { - AddDefaultToAnnotationMember[label="AddDefaultToAnnotationMember"]; -} -digraph X { - AddDefaultToAnnotationMember[label="AddDefaultToAnnotationMember"]; -} -Propagated modules: -module AddDefaultToAnnotationMember -End of propagated Cleaning output files: out/production/AddDefaultToAnnotationMember/A.class End of files diff --git a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy.log b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy.log index d9f764870e9a..d564e130c4ce 100644 --- a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy.log +++ b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeAnnotationRetentionPolicy -End of request -digraph X { - ChangeAnnotationRetentionPolicy[label="ChangeAnnotationRetentionPolicy"]; -} -digraph X { - ChangeAnnotationRetentionPolicy[label="ChangeAnnotationRetentionPolicy"]; -} -Propagated modules: -module ChangeAnnotationRetentionPolicy -End of propagated Cleaning output files: out/production/ChangeAnnotationRetentionPolicy/A.class End of files diff --git a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy1.log b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy1.log index 6fc9ab459fbe..663bc7e129ec 100644 --- a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy1.log +++ b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeAnnotationRetentionPolicy1 -End of request -digraph X { - ChangeAnnotationRetentionPolicy1[label="ChangeAnnotationRetentionPolicy1"]; -} -digraph X { - ChangeAnnotationRetentionPolicy1[label="ChangeAnnotationRetentionPolicy1"]; -} -Propagated modules: -module ChangeAnnotationRetentionPolicy1 -End of propagated Cleaning output files: out/production/ChangeAnnotationRetentionPolicy1/A.class End of files diff --git a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy2.log b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy2.log index 8a67248afd2a..e8b679581808 100644 --- a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy2.log +++ b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy2.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeAnnotationRetentionPolicy2 -End of request -digraph X { - ChangeAnnotationRetentionPolicy2[label="ChangeAnnotationRetentionPolicy2"]; -} -digraph X { - ChangeAnnotationRetentionPolicy2[label="ChangeAnnotationRetentionPolicy2"]; -} -Propagated modules: -module ChangeAnnotationRetentionPolicy2 -End of propagated Cleaning output files: out/production/ChangeAnnotationRetentionPolicy2/A.class End of files diff --git a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy3.log b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy3.log index d6676661c84c..80b747122d64 100644 --- a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy3.log +++ b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy3.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeAnnotationRetentionPolicy3 -End of request -digraph X { - ChangeAnnotationRetentionPolicy3[label="ChangeAnnotationRetentionPolicy3"]; -} -digraph X { - ChangeAnnotationRetentionPolicy3[label="ChangeAnnotationRetentionPolicy3"]; -} -Propagated modules: -module ChangeAnnotationRetentionPolicy3 -End of propagated Cleaning output files: out/production/ChangeAnnotationRetentionPolicy3/A.class End of files diff --git a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy4.log b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy4.log index 9bec9cf77de9..f1fc6c5a98f0 100644 --- a/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy4.log +++ b/jps/testData/incremental/annotations/changeAnnotationRetentionPolicy4.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeAnnotationRetentionPolicy4 -End of request -digraph X { - ChangeAnnotationRetentionPolicy4[label="ChangeAnnotationRetentionPolicy4"]; -} -digraph X { - ChangeAnnotationRetentionPolicy4[label="ChangeAnnotationRetentionPolicy4"]; -} -Propagated modules: -module ChangeAnnotationRetentionPolicy4 -End of propagated Cleaning output files: out/production/ChangeAnnotationRetentionPolicy4/A.class End of files diff --git a/jps/testData/incremental/annotations/changeAnnotationTypeMemberType.log b/jps/testData/incremental/annotations/changeAnnotationTypeMemberType.log index 803e7f42f5ce..007115c6e26d 100644 --- a/jps/testData/incremental/annotations/changeAnnotationTypeMemberType.log +++ b/jps/testData/incremental/annotations/changeAnnotationTypeMemberType.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeAnnotationTypeMemberType -End of request -digraph X { - ChangeAnnotationTypeMemberType[label="ChangeAnnotationTypeMemberType"]; -} -digraph X { - ChangeAnnotationTypeMemberType[label="ChangeAnnotationTypeMemberType"]; -} -Propagated modules: -module ChangeAnnotationTypeMemberType -End of propagated Cleaning output files: out/production/ChangeAnnotationTypeMemberType/A.class End of files diff --git a/jps/testData/incremental/annotations/conservativeNonIncremental.log b/jps/testData/incremental/annotations/conservativeNonIncremental.log index c95ecd1ccf06..63a3d986d1cd 100644 --- a/jps/testData/incremental/annotations/conservativeNonIncremental.log +++ b/jps/testData/incremental/annotations/conservativeNonIncremental.log @@ -1,34 +1,3 @@ -Request to make modules: -module a1 -module a2 -module b21 -module b22 -module conservativeNonIncremental -End of request -digraph X { - a1[label="a1"]; - conservativeNonIncremental -> a1; - a2[label="a2"]; - conservativeNonIncremental -> a2; - b21[label="b21"]; - a2 -> b21; - b22[label="b22"]; - a2 -> b22; - conservativeNonIncremental[label="conservativeNonIncremental"]; -} -digraph X { - a1[label="a1"]; - conservativeNonIncremental -> a1; - conservativeNonIncremental[label="conservativeNonIncremental"]; - a2[label="a2"]; - b21[label="b21"]; - b22[label="b22"]; -} -Propagated modules: -module a2 -module b21 -module b22 -End of propagated Cleaning output files: out/production/a2/A2.class End of files diff --git a/jps/testData/incremental/annotations/conservativeNonIncremental1.log b/jps/testData/incremental/annotations/conservativeNonIncremental1.log index c95ecd1ccf06..63a3d986d1cd 100644 --- a/jps/testData/incremental/annotations/conservativeNonIncremental1.log +++ b/jps/testData/incremental/annotations/conservativeNonIncremental1.log @@ -1,34 +1,3 @@ -Request to make modules: -module a1 -module a2 -module b21 -module b22 -module conservativeNonIncremental -End of request -digraph X { - a1[label="a1"]; - conservativeNonIncremental -> a1; - a2[label="a2"]; - conservativeNonIncremental -> a2; - b21[label="b21"]; - a2 -> b21; - b22[label="b22"]; - a2 -> b22; - conservativeNonIncremental[label="conservativeNonIncremental"]; -} -digraph X { - a1[label="a1"]; - conservativeNonIncremental -> a1; - conservativeNonIncremental[label="conservativeNonIncremental"]; - a2[label="a2"]; - b21[label="b21"]; - b22[label="b22"]; -} -Propagated modules: -module a2 -module b21 -module b22 -End of propagated Cleaning output files: out/production/a2/A2.class End of files diff --git a/jps/testData/incremental/annotations/metaAnnotationChanged.log b/jps/testData/incremental/annotations/metaAnnotationChanged.log index 2440bc6f7d42..7437ac4a0841 100644 --- a/jps/testData/incremental/annotations/metaAnnotationChanged.log +++ b/jps/testData/incremental/annotations/metaAnnotationChanged.log @@ -1,15 +1,3 @@ -Request to make modules: -module MetaAnnotationChanged -End of request -digraph X { - MetaAnnotationChanged[label="MetaAnnotationChanged"]; -} -digraph X { - MetaAnnotationChanged[label="MetaAnnotationChanged"]; -} -Propagated modules: -module MetaAnnotationChanged -End of propagated Cleaning output files: out/production/MetaAnnotationChanged/A1.class out/production/MetaAnnotationChanged/C1.class diff --git a/jps/testData/incremental/annotations/metaAnnotationChangedCascade.log b/jps/testData/incremental/annotations/metaAnnotationChangedCascade.log index b6b616c4ea30..d60bdd3c194f 100644 --- a/jps/testData/incremental/annotations/metaAnnotationChangedCascade.log +++ b/jps/testData/incremental/annotations/metaAnnotationChangedCascade.log @@ -1,15 +1,3 @@ -Request to make modules: -module MetaAnnotationChangedCascade -End of request -digraph X { - MetaAnnotationChangedCascade[label="MetaAnnotationChangedCascade"]; -} -digraph X { - MetaAnnotationChangedCascade[label="MetaAnnotationChangedCascade"]; -} -Propagated modules: -module MetaAnnotationChangedCascade -End of propagated Cleaning output files: out/production/MetaAnnotationChangedCascade/A.class out/production/MetaAnnotationChangedCascade/C.class diff --git a/jps/testData/incremental/annotations/metaAnnotationChangedCascade2.log b/jps/testData/incremental/annotations/metaAnnotationChangedCascade2.log index 0371c479fb76..87b463342969 100644 --- a/jps/testData/incremental/annotations/metaAnnotationChangedCascade2.log +++ b/jps/testData/incremental/annotations/metaAnnotationChangedCascade2.log @@ -1,15 +1,3 @@ -Request to make modules: -module MetaAnnotationChangedCascade2 -End of request -digraph X { - MetaAnnotationChangedCascade2[label="MetaAnnotationChangedCascade2"]; -} -digraph X { - MetaAnnotationChangedCascade2[label="MetaAnnotationChangedCascade2"]; -} -Propagated modules: -module MetaAnnotationChangedCascade2 -End of propagated Cleaning output files: out/production/MetaAnnotationChangedCascade2/A.class out/production/MetaAnnotationChangedCascade2/C.class diff --git a/jps/testData/incremental/annotations/removeAnnotationTarget.log b/jps/testData/incremental/annotations/removeAnnotationTarget.log index 2b19a1be58c9..f5c8b58cce81 100644 --- a/jps/testData/incremental/annotations/removeAnnotationTarget.log +++ b/jps/testData/incremental/annotations/removeAnnotationTarget.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveAnnotationTarget -End of request -digraph X { - RemoveAnnotationTarget[label="RemoveAnnotationTarget"]; -} -digraph X { - RemoveAnnotationTarget[label="RemoveAnnotationTarget"]; -} -Propagated modules: -module RemoveAnnotationTarget -End of propagated Cleaning output files: out/production/RemoveAnnotationTarget/A.class End of files diff --git a/jps/testData/incremental/annotations/removeAnnotationTypeMember.log b/jps/testData/incremental/annotations/removeAnnotationTypeMember.log index cc6d51e8fdcc..676f5e9254fe 100644 --- a/jps/testData/incremental/annotations/removeAnnotationTypeMember.log +++ b/jps/testData/incremental/annotations/removeAnnotationTypeMember.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveAnnotationTypeMember -End of request -digraph X { - RemoveAnnotationTypeMember[label="RemoveAnnotationTypeMember"]; -} -digraph X { - RemoveAnnotationTypeMember[label="RemoveAnnotationTypeMember"]; -} -Propagated modules: -module RemoveAnnotationTypeMember -End of propagated Cleaning output files: out/production/RemoveAnnotationTypeMember/A.class End of files diff --git a/jps/testData/incremental/annotations/removeAnnotationTypeMember1.log b/jps/testData/incremental/annotations/removeAnnotationTypeMember1.log index 2b5f4a1c755e..87294a57786f 100644 --- a/jps/testData/incremental/annotations/removeAnnotationTypeMember1.log +++ b/jps/testData/incremental/annotations/removeAnnotationTypeMember1.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveAnnotationTypeMember1 -End of request -digraph X { - RemoveAnnotationTypeMember1[label="RemoveAnnotationTypeMember1"]; -} -digraph X { - RemoveAnnotationTypeMember1[label="RemoveAnnotationTypeMember1"]; -} -Propagated modules: -module RemoveAnnotationTypeMember1 -End of propagated Cleaning output files: out/production/RemoveAnnotationTypeMember1/A.class End of files diff --git a/jps/testData/incremental/annotations/removeDefaultFromAnnotationMember.log b/jps/testData/incremental/annotations/removeDefaultFromAnnotationMember.log index f466d8e175fa..93b95599f247 100644 --- a/jps/testData/incremental/annotations/removeDefaultFromAnnotationMember.log +++ b/jps/testData/incremental/annotations/removeDefaultFromAnnotationMember.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveDefaultFromAnnotationMember -End of request -digraph X { - RemoveDefaultFromAnnotationMember[label="RemoveDefaultFromAnnotationMember"]; -} -digraph X { - RemoveDefaultFromAnnotationMember[label="RemoveDefaultFromAnnotationMember"]; -} -Propagated modules: -module RemoveDefaultFromAnnotationMember -End of propagated Cleaning output files: out/production/RemoveDefaultFromAnnotationMember/A.class End of files diff --git a/jps/testData/incremental/changeName/changeClassName.log b/jps/testData/incremental/changeName/changeClassName.log index 22f3d95b999c..32731d5fc930 100644 --- a/jps/testData/incremental/changeName/changeClassName.log +++ b/jps/testData/incremental/changeName/changeClassName.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeClassName -End of request -digraph X { - ChangeClassName[label="ChangeClassName"]; -} -digraph X { - ChangeClassName[label="ChangeClassName"]; -} -Propagated modules: -module ChangeClassName -End of propagated Cleaning output files: out/production/ChangeClassName/A.class End of files diff --git a/jps/testData/incremental/classModifiers/addStatic.log b/jps/testData/incremental/classModifiers/addStatic.log index 55e555bc57b1..dd63cde21ee2 100644 --- a/jps/testData/incremental/classModifiers/addStatic.log +++ b/jps/testData/incremental/classModifiers/addStatic.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddStatic -End of request -digraph X { - AddStatic[label="AddStatic"]; -} -digraph X { - AddStatic[label="AddStatic"]; -} -Propagated modules: -module AddStatic -End of propagated Cleaning output files: out/production/AddStatic/A$B.class out/production/AddStatic/A.class diff --git a/jps/testData/incremental/classModifiers/decAccess.log b/jps/testData/incremental/classModifiers/decAccess.log index 9623f5a3e270..4d2049c0f302 100644 --- a/jps/testData/incremental/classModifiers/decAccess.log +++ b/jps/testData/incremental/classModifiers/decAccess.log @@ -1,15 +1,3 @@ -Request to make modules: -module DecAccess -End of request -digraph X { - DecAccess[label="DecAccess"]; -} -digraph X { - DecAccess[label="DecAccess"]; -} -Propagated modules: -module DecAccess -End of propagated Cleaning output files: out/production/DecAccess/impl/Service.class End of files diff --git a/jps/testData/incremental/classModifiers/dropAbstract.log b/jps/testData/incremental/classModifiers/dropAbstract.log index cddf208220f5..d473eadc2478 100644 --- a/jps/testData/incremental/classModifiers/dropAbstract.log +++ b/jps/testData/incremental/classModifiers/dropAbstract.log @@ -1,15 +1,3 @@ -Request to make modules: -module dropAbstract -End of request -digraph X { - dropAbstract[label="dropAbstract"]; -} -digraph X { - dropAbstract[label="dropAbstract"]; -} -Propagated modules: -module dropAbstract -End of propagated Cleaning output files: out/production/dropAbstract/A.class End of files diff --git a/jps/testData/incremental/classModifiers/removeStatic.log b/jps/testData/incremental/classModifiers/removeStatic.log index 6842a7036101..f7e25a83b625 100644 --- a/jps/testData/incremental/classModifiers/removeStatic.log +++ b/jps/testData/incremental/classModifiers/removeStatic.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveStatic -End of request -digraph X { - RemoveStatic[label="RemoveStatic"]; -} -digraph X { - RemoveStatic[label="RemoveStatic"]; -} -Propagated modules: -module RemoveStatic -End of propagated Cleaning output files: out/production/RemoveStatic/A$B.class out/production/RemoveStatic/A.class diff --git a/jps/testData/incremental/classModifiers/setAbstract.log b/jps/testData/incremental/classModifiers/setAbstract.log index 35c1dde30b66..80b0fff90302 100644 --- a/jps/testData/incremental/classModifiers/setAbstract.log +++ b/jps/testData/incremental/classModifiers/setAbstract.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetAbstract -End of request -digraph X { - SetAbstract[label="SetAbstract"]; -} -digraph X { - SetAbstract[label="SetAbstract"]; -} -Propagated modules: -module SetAbstract -End of propagated Cleaning output files: out/production/SetAbstract/Service.class End of files diff --git a/jps/testData/incremental/classModifiers/setFinal.log b/jps/testData/incremental/classModifiers/setFinal.log index 527a74fdfc26..00992095f83a 100644 --- a/jps/testData/incremental/classModifiers/setFinal.log +++ b/jps/testData/incremental/classModifiers/setFinal.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetFinal -End of request -digraph X { - SetFinal[label="SetFinal"]; -} -digraph X { - SetFinal[label="SetFinal"]; -} -Propagated modules: -module SetFinal -End of propagated Cleaning output files: out/production/SetFinal/Service.class End of files diff --git a/jps/testData/incremental/classModifiers/setFinal1.log b/jps/testData/incremental/classModifiers/setFinal1.log index 8eb835e93052..abdcc1040829 100644 --- a/jps/testData/incremental/classModifiers/setFinal1.log +++ b/jps/testData/incremental/classModifiers/setFinal1.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetFinal1 -End of request -digraph X { - SetFinal1[label="SetFinal1"]; -} -digraph X { - SetFinal1[label="SetFinal1"]; -} -Propagated modules: -module SetFinal1 -End of propagated Cleaning output files: out/production/SetFinal1/A.class End of files diff --git a/jps/testData/incremental/classProperties/addExtends.log b/jps/testData/incremental/classProperties/addExtends.log index d5a737cd899e..e94fa50cf6af 100644 --- a/jps/testData/incremental/classProperties/addExtends.log +++ b/jps/testData/incremental/classProperties/addExtends.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddExtends -End of request -digraph X { - AddExtends[label="AddExtends"]; -} -digraph X { - AddExtends[label="AddExtends"]; -} -Propagated modules: -module AddExtends -End of propagated Cleaning output files: out/production/AddExtends/Super.class End of files diff --git a/jps/testData/incremental/classProperties/addImplements.log b/jps/testData/incremental/classProperties/addImplements.log index 0fd3d18d783d..ef3d6630bea0 100644 --- a/jps/testData/incremental/classProperties/addImplements.log +++ b/jps/testData/incremental/classProperties/addImplements.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddImplements -End of request -digraph X { - AddImplements[label="AddImplements"]; -} -digraph X { - AddImplements[label="AddImplements"]; -} -Propagated modules: -module AddImplements -End of propagated Cleaning output files: out/production/AddImplements/Super.class End of files diff --git a/jps/testData/incremental/classProperties/changeExtends.log b/jps/testData/incremental/classProperties/changeExtends.log index bca8f3f4ca10..0cba040f482a 100644 --- a/jps/testData/incremental/classProperties/changeExtends.log +++ b/jps/testData/incremental/classProperties/changeExtends.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeExtends -End of request -digraph X { - ChangeExtends[label="ChangeExtends"]; -} -digraph X { - ChangeExtends[label="ChangeExtends"]; -} -Propagated modules: -module ChangeExtends -End of propagated Cleaning output files: out/production/ChangeExtends/Super.class End of files diff --git a/jps/testData/incremental/classProperties/removeExtends.log b/jps/testData/incremental/classProperties/removeExtends.log index b329215b6b1c..cb5d9ea27693 100644 --- a/jps/testData/incremental/classProperties/removeExtends.log +++ b/jps/testData/incremental/classProperties/removeExtends.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveExtends -End of request -digraph X { - RemoveExtends[label="RemoveExtends"]; -} -digraph X { - RemoveExtends[label="RemoveExtends"]; -} -Propagated modules: -module RemoveExtends -End of propagated Cleaning output files: out/production/RemoveExtends/Super.class End of files diff --git a/jps/testData/incremental/classProperties/removeImplements.log b/jps/testData/incremental/classProperties/removeImplements.log index a574ae4d8f9d..9ea4d44171d9 100644 --- a/jps/testData/incremental/classProperties/removeImplements.log +++ b/jps/testData/incremental/classProperties/removeImplements.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveImplements -End of request -digraph X { - RemoveImplements[label="RemoveImplements"]; -} -digraph X { - RemoveImplements[label="RemoveImplements"]; -} -Propagated modules: -module RemoveImplements -End of propagated Cleaning output files: out/production/RemoveImplements/Super.class End of files diff --git a/jps/testData/incremental/classProperties/removeImplements2.log b/jps/testData/incremental/classProperties/removeImplements2.log index 030818acf8fd..cdb3573bb10c 100644 --- a/jps/testData/incremental/classProperties/removeImplements2.log +++ b/jps/testData/incremental/classProperties/removeImplements2.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveImplements2 -End of request -digraph X { - RemoveImplements2[label="RemoveImplements2"]; -} -digraph X { - RemoveImplements2[label="RemoveImplements2"]; -} -Propagated modules: -module RemoveImplements2 -End of propagated Cleaning output files: out/production/RemoveImplements2/Test.class End of files diff --git a/jps/testData/incremental/classProperties/removeImplements3.log b/jps/testData/incremental/classProperties/removeImplements3.log index 4b59d4dd189e..e307e161f794 100644 --- a/jps/testData/incremental/classProperties/removeImplements3.log +++ b/jps/testData/incremental/classProperties/removeImplements3.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveImplements3 -End of request -digraph X { - RemoveImplements3[label="RemoveImplements3"]; -} -digraph X { - RemoveImplements3[label="RemoveImplements3"]; -} -Propagated modules: -module RemoveImplements3 -End of propagated Cleaning output files: out/production/RemoveImplements3/Test.class End of files diff --git a/jps/testData/incremental/common/anonymous.log b/jps/testData/incremental/common/anonymous.log index e8161f5abd9f..2c24cef9b7e0 100644 --- a/jps/testData/incremental/common/anonymous.log +++ b/jps/testData/incremental/common/anonymous.log @@ -1,15 +1,3 @@ -Request to make modules: -module Anonymous -End of request -digraph X { - Anonymous[label="Anonymous"]; -} -digraph X { - Anonymous[label="Anonymous"]; -} -Propagated modules: -module Anonymous -End of propagated Cleaning output files: out/production/Anonymous/Server.class End of files diff --git a/jps/testData/incremental/common/changeDefinitionToClass.log b/jps/testData/incremental/common/changeDefinitionToClass.log index 3f56f4c3e428..b2d8cb744209 100644 --- a/jps/testData/incremental/common/changeDefinitionToClass.log +++ b/jps/testData/incremental/common/changeDefinitionToClass.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeDefinitionToClass -End of request -digraph X { - ChangeDefinitionToClass[label="ChangeDefinitionToClass"]; -} -digraph X { - ChangeDefinitionToClass[label="ChangeDefinitionToClass"]; -} -Propagated modules: -module ChangeDefinitionToClass -End of propagated Cleaning output files: out/production/ChangeDefinitionToClass/Server.class End of files diff --git a/jps/testData/incremental/common/changeDefinitionToClass2.log b/jps/testData/incremental/common/changeDefinitionToClass2.log index 3cbad4fee276..bca8ab243957 100644 --- a/jps/testData/incremental/common/changeDefinitionToClass2.log +++ b/jps/testData/incremental/common/changeDefinitionToClass2.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeDefinitionToClass2 -End of request -digraph X { - ChangeDefinitionToClass2[label="ChangeDefinitionToClass2"]; -} -digraph X { - ChangeDefinitionToClass2[label="ChangeDefinitionToClass2"]; -} -Propagated modules: -module ChangeDefinitionToClass2 -End of propagated Cleaning output files: out/production/ChangeDefinitionToClass2/Server.class End of files diff --git a/jps/testData/incremental/common/deleteClass.log b/jps/testData/incremental/common/deleteClass.log index 844519bdd14c..8c95468c0b5d 100644 --- a/jps/testData/incremental/common/deleteClass.log +++ b/jps/testData/incremental/common/deleteClass.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteClass -End of request -digraph X { - DeleteClass[label="DeleteClass"]; -} -digraph X { - DeleteClass[label="DeleteClass"]; -} -Propagated modules: -module DeleteClass -End of propagated Cleaning output files: out/production/DeleteClass/packageA/Server.class End of files diff --git a/jps/testData/incremental/common/deleteClass1.log b/jps/testData/incremental/common/deleteClass1.log index 1bf2ba93181d..faea157979b3 100644 --- a/jps/testData/incremental/common/deleteClass1.log +++ b/jps/testData/incremental/common/deleteClass1.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteClass1 -End of request -digraph X { - DeleteClass1[label="DeleteClass1"]; -} -digraph X { - DeleteClass1[label="DeleteClass1"]; -} -Propagated modules: -module DeleteClass1 -End of propagated Cleaning output files: out/production/DeleteClass1/packageA/Server.class End of files diff --git a/jps/testData/incremental/common/deleteClass2.log b/jps/testData/incremental/common/deleteClass2.log index 4defc9d92845..97d294112906 100644 --- a/jps/testData/incremental/common/deleteClass2.log +++ b/jps/testData/incremental/common/deleteClass2.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteClass2 -End of request -digraph X { - DeleteClass2[label="DeleteClass2"]; -} -digraph X { - DeleteClass2[label="DeleteClass2"]; -} -Propagated modules: -module DeleteClass2 -End of propagated Cleaning output files: out/production/DeleteClass2/packageA/Server.class End of files diff --git a/jps/testData/incremental/common/deleteClassPackageDoesntMatchRoot.log b/jps/testData/incremental/common/deleteClassPackageDoesntMatchRoot.log index d4a1e8828c2d..ac0a41b41e31 100644 --- a/jps/testData/incremental/common/deleteClassPackageDoesntMatchRoot.log +++ b/jps/testData/incremental/common/deleteClassPackageDoesntMatchRoot.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteClassPackageDoesntMatchRoot -End of request -digraph X { - DeleteClassPackageDoesntMatchRoot[label="DeleteClassPackageDoesntMatchRoot"]; -} -digraph X { - DeleteClassPackageDoesntMatchRoot[label="DeleteClassPackageDoesntMatchRoot"]; -} -Propagated modules: -module DeleteClassPackageDoesntMatchRoot -End of propagated Cleaning output files: out/production/DeleteClassPackageDoesntMatchRoot/ppp/Server$1.class out/production/DeleteClassPackageDoesntMatchRoot/ppp/Server.class diff --git a/jps/testData/incremental/common/dependencyUpdate.log b/jps/testData/incremental/common/dependencyUpdate.log index 9b86a837c807..8f12ffa5849e 100644 --- a/jps/testData/incremental/common/dependencyUpdate.log +++ b/jps/testData/incremental/common/dependencyUpdate.log @@ -1,15 +1,3 @@ -Request to make modules: -module DependencyUpdate -End of request -digraph X { - DependencyUpdate[label="DependencyUpdate"]; -} -digraph X { - DependencyUpdate[label="DependencyUpdate"]; -} -Propagated modules: -module DependencyUpdate -End of propagated Cleaning output files: out/production/DependencyUpdate/A.class out/production/DependencyUpdate/E.class diff --git a/jps/testData/incremental/common/inner.log b/jps/testData/incremental/common/inner.log index 39b0840452a0..60ac87891740 100644 --- a/jps/testData/incremental/common/inner.log +++ b/jps/testData/incremental/common/inner.log @@ -1,15 +1,3 @@ -Request to make modules: -module Inner -End of request -digraph X { - Inner[label="Inner"]; -} -digraph X { - Inner[label="Inner"]; -} -Propagated modules: -module Inner -End of propagated Cleaning output files: out/production/Inner/Server.class End of files diff --git a/jps/testData/incremental/common/noResourceDelete.log b/jps/testData/incremental/common/noResourceDelete.log index 2bff97f871df..e69de29bb2d1 100644 --- a/jps/testData/incremental/common/noResourceDelete.log +++ b/jps/testData/incremental/common/noResourceDelete.log @@ -1,11 +0,0 @@ -Request to make modules: -module NoResourceDelete -End of request -digraph X { - NoResourceDelete[label="NoResourceDelete"]; -} -digraph X { - NoResourceDelete[label="NoResourceDelete"]; -} -Propagated modules: -End of propagated diff --git a/jps/testData/incremental/common/noSecondFileCompile.log b/jps/testData/incremental/common/noSecondFileCompile.log index 4104557ae5bc..a106cca1cda1 100644 --- a/jps/testData/incremental/common/noSecondFileCompile.log +++ b/jps/testData/incremental/common/noSecondFileCompile.log @@ -1,15 +1,3 @@ -Request to make modules: -module NoSecondFileCompile -End of request -digraph X { - NoSecondFileCompile[label="NoSecondFileCompile"]; -} -digraph X { - NoSecondFileCompile[label="NoSecondFileCompile"]; -} -Propagated modules: -module NoSecondFileCompile -End of propagated Cleaning output files: out/production/NoSecondFileCompile/A.class out/production/NoSecondFileCompile/B.class diff --git a/jps/testData/incremental/common/noSecondFileCompile1.log b/jps/testData/incremental/common/noSecondFileCompile1.log index 5278f1e14b9b..6bbbb4f3a3c0 100644 --- a/jps/testData/incremental/common/noSecondFileCompile1.log +++ b/jps/testData/incremental/common/noSecondFileCompile1.log @@ -1,15 +1,3 @@ -Request to make modules: -module NoSecondFileCompile1 -End of request -digraph X { - NoSecondFileCompile1[label="NoSecondFileCompile1"]; -} -digraph X { - NoSecondFileCompile1[label="NoSecondFileCompile1"]; -} -Propagated modules: -module NoSecondFileCompile1 -End of propagated Cleaning output files: out/production/NoSecondFileCompile1/A.class out/production/NoSecondFileCompile1/B.class diff --git a/jps/testData/incremental/fieldModifiers/setFinal.log b/jps/testData/incremental/fieldModifiers/setFinal.log index 8f240b356882..beac3112423f 100644 --- a/jps/testData/incremental/fieldModifiers/setFinal.log +++ b/jps/testData/incremental/fieldModifiers/setFinal.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetFinal -End of request -digraph X { - SetFinal[label="SetFinal"]; -} -digraph X { - SetFinal[label="SetFinal"]; -} -Propagated modules: -module SetFinal -End of propagated Cleaning output files: out/production/SetFinal/Base.class End of files diff --git a/jps/testData/incremental/fieldModifiers/setPrivate.log b/jps/testData/incremental/fieldModifiers/setPrivate.log index be36d8a7e69d..ed67bc76bd35 100644 --- a/jps/testData/incremental/fieldModifiers/setPrivate.log +++ b/jps/testData/incremental/fieldModifiers/setPrivate.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetPrivate -End of request -digraph X { - SetPrivate[label="SetPrivate"]; -} -digraph X { - SetPrivate[label="SetPrivate"]; -} -Propagated modules: -module SetPrivate -End of propagated Cleaning output files: out/production/SetPrivate/A.class End of files diff --git a/jps/testData/incremental/fieldModifiers/setProtected.log b/jps/testData/incremental/fieldModifiers/setProtected.log index f12c8ce696eb..c65da93eafcc 100644 --- a/jps/testData/incremental/fieldModifiers/setProtected.log +++ b/jps/testData/incremental/fieldModifiers/setProtected.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetProtected -End of request -digraph X { - SetProtected[label="SetProtected"]; -} -digraph X { - SetProtected[label="SetProtected"]; -} -Propagated modules: -module SetProtected -End of propagated Cleaning output files: out/production/SetProtected/A.class End of files diff --git a/jps/testData/incremental/fieldModifiers/setStatic.log b/jps/testData/incremental/fieldModifiers/setStatic.log index 8e1dad665e32..d092468a12a7 100644 --- a/jps/testData/incremental/fieldModifiers/setStatic.log +++ b/jps/testData/incremental/fieldModifiers/setStatic.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetStatic -End of request -digraph X { - SetStatic[label="SetStatic"]; -} -digraph X { - SetStatic[label="SetStatic"]; -} -Propagated modules: -module SetStatic -End of propagated Cleaning output files: out/production/SetStatic/Base.class End of files diff --git a/jps/testData/incremental/fieldModifiers/unsetStatic.log b/jps/testData/incremental/fieldModifiers/unsetStatic.log index 7fbfa41a22f7..2c7cedf1dfa6 100644 --- a/jps/testData/incremental/fieldModifiers/unsetStatic.log +++ b/jps/testData/incremental/fieldModifiers/unsetStatic.log @@ -1,15 +1,3 @@ -Request to make modules: -module UnsetStatic -End of request -digraph X { - UnsetStatic[label="UnsetStatic"]; -} -digraph X { - UnsetStatic[label="UnsetStatic"]; -} -Propagated modules: -module UnsetStatic -End of propagated Cleaning output files: out/production/UnsetStatic/Base.class End of files diff --git a/jps/testData/incremental/fieldModifiers/unsetStaticFinal.log b/jps/testData/incremental/fieldModifiers/unsetStaticFinal.log index b81a9e0f338d..d8065a578cef 100644 --- a/jps/testData/incremental/fieldModifiers/unsetStaticFinal.log +++ b/jps/testData/incremental/fieldModifiers/unsetStaticFinal.log @@ -1,15 +1,3 @@ -Request to make modules: -module UnsetStaticFinal -End of request -digraph X { - UnsetStaticFinal[label="UnsetStaticFinal"]; -} -digraph X { - UnsetStaticFinal[label="UnsetStaticFinal"]; -} -Propagated modules: -module UnsetStaticFinal -End of propagated Cleaning output files: out/production/UnsetStaticFinal/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/constantChain.log b/jps/testData/incremental/fieldProperties/constantChain.log index f2c80891d16c..37245f2de1f0 100644 --- a/jps/testData/incremental/fieldProperties/constantChain.log +++ b/jps/testData/incremental/fieldProperties/constantChain.log @@ -1,15 +1,3 @@ -Request to make modules: -module ConstantChain -End of request -digraph X { - ConstantChain[label="ConstantChain"]; -} -digraph X { - ConstantChain[label="ConstantChain"]; -} -Propagated modules: -module ConstantChain -End of propagated Cleaning output files: out/production/ConstantChain/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/constantChain1.log b/jps/testData/incremental/fieldProperties/constantChain1.log index 8cd3d1aabcb9..c6f55ec9259b 100644 --- a/jps/testData/incremental/fieldProperties/constantChain1.log +++ b/jps/testData/incremental/fieldProperties/constantChain1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ConstantChain1 -End of request -digraph X { - ConstantChain1[label="ConstantChain1"]; -} -digraph X { - ConstantChain1[label="ConstantChain1"]; -} -Propagated modules: -module ConstantChain1 -End of propagated Cleaning output files: out/production/ConstantChain1/A.class End of files diff --git a/jps/testData/incremental/fieldProperties/constantChain2.log b/jps/testData/incremental/fieldProperties/constantChain2.log index 0109b2010c61..53dc6d225b43 100644 --- a/jps/testData/incremental/fieldProperties/constantChain2.log +++ b/jps/testData/incremental/fieldProperties/constantChain2.log @@ -1,15 +1,3 @@ -Request to make modules: -module ConstantChain2 -End of request -digraph X { - ConstantChain2[label="ConstantChain2"]; -} -digraph X { - ConstantChain2[label="ConstantChain2"]; -} -Propagated modules: -module ConstantChain2 -End of propagated Cleaning output files: out/production/ConstantChain2/Client.class out/production/ConstantChain2/Const1.class diff --git a/jps/testData/incremental/fieldProperties/constantRemove.log b/jps/testData/incremental/fieldProperties/constantRemove.log index 12ceb617a9fa..4e67d944fb70 100644 --- a/jps/testData/incremental/fieldProperties/constantRemove.log +++ b/jps/testData/incremental/fieldProperties/constantRemove.log @@ -1,15 +1,3 @@ -Request to make modules: -module ConstantRemove -End of request -digraph X { - ConstantRemove[label="ConstantRemove"]; -} -digraph X { - ConstantRemove[label="ConstantRemove"]; -} -Propagated modules: -module ConstantRemove -End of propagated Cleaning output files: out/production/ConstantRemove/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/constantRemove1.log b/jps/testData/incremental/fieldProperties/constantRemove1.log index 14cc3c6ce5ae..cfa1523a0770 100644 --- a/jps/testData/incremental/fieldProperties/constantRemove1.log +++ b/jps/testData/incremental/fieldProperties/constantRemove1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ConstantRemove1 -End of request -digraph X { - ConstantRemove1[label="ConstantRemove1"]; -} -digraph X { - ConstantRemove1[label="ConstantRemove1"]; -} -Propagated modules: -module ConstantRemove1 -End of propagated Cleaning output files: out/production/ConstantRemove1/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/doubleConstantChange.log b/jps/testData/incremental/fieldProperties/doubleConstantChange.log index b7d359583023..bb4378189fe4 100644 --- a/jps/testData/incremental/fieldProperties/doubleConstantChange.log +++ b/jps/testData/incremental/fieldProperties/doubleConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module DoubleConstantChange -End of request -digraph X { - DoubleConstantChange[label="DoubleConstantChange"]; -} -digraph X { - DoubleConstantChange[label="DoubleConstantChange"]; -} -Propagated modules: -module DoubleConstantChange -End of propagated Cleaning output files: out/production/DoubleConstantChange/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/floatConstantChange.log b/jps/testData/incremental/fieldProperties/floatConstantChange.log index 20f25200a824..718132a749da 100644 --- a/jps/testData/incremental/fieldProperties/floatConstantChange.log +++ b/jps/testData/incremental/fieldProperties/floatConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module FloatConstantChange -End of request -digraph X { - FloatConstantChange[label="FloatConstantChange"]; -} -digraph X { - FloatConstantChange[label="FloatConstantChange"]; -} -Propagated modules: -module FloatConstantChange -End of propagated Cleaning output files: out/production/FloatConstantChange/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/innerConstantChange.log b/jps/testData/incremental/fieldProperties/innerConstantChange.log index ec8b47fe5432..b31a9a446166 100644 --- a/jps/testData/incremental/fieldProperties/innerConstantChange.log +++ b/jps/testData/incremental/fieldProperties/innerConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module InnerConstantChange -End of request -digraph X { - InnerConstantChange[label="InnerConstantChange"]; -} -digraph X { - InnerConstantChange[label="InnerConstantChange"]; -} -Propagated modules: -module InnerConstantChange -End of propagated Cleaning output files: out/production/InnerConstantChange/Server$Inner.class out/production/InnerConstantChange/Server.class diff --git a/jps/testData/incremental/fieldProperties/intConstantChange.log b/jps/testData/incremental/fieldProperties/intConstantChange.log index 9dd0b0fbee53..3d0bb34d29e1 100644 --- a/jps/testData/incremental/fieldProperties/intConstantChange.log +++ b/jps/testData/incremental/fieldProperties/intConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module IntConstantChange -End of request -digraph X { - IntConstantChange[label="IntConstantChange"]; -} -digraph X { - IntConstantChange[label="IntConstantChange"]; -} -Propagated modules: -module IntConstantChange -End of propagated Cleaning output files: out/production/IntConstantChange/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/longConstantChange.log b/jps/testData/incremental/fieldProperties/longConstantChange.log index c10751e2f7b4..5221e155a347 100644 --- a/jps/testData/incremental/fieldProperties/longConstantChange.log +++ b/jps/testData/incremental/fieldProperties/longConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module LongConstantChange -End of request -digraph X { - LongConstantChange[label="LongConstantChange"]; -} -digraph X { - LongConstantChange[label="LongConstantChange"]; -} -Propagated modules: -module LongConstantChange -End of propagated Cleaning output files: out/production/LongConstantChange/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/nonCompileTimeConstant.log b/jps/testData/incremental/fieldProperties/nonCompileTimeConstant.log index ee54a6fe4c59..2a7bf805aa25 100644 --- a/jps/testData/incremental/fieldProperties/nonCompileTimeConstant.log +++ b/jps/testData/incremental/fieldProperties/nonCompileTimeConstant.log @@ -1,15 +1,3 @@ -Request to make modules: -module NonCompileTimeConstant -End of request -digraph X { - NonCompileTimeConstant[label="NonCompileTimeConstant"]; -} -digraph X { - NonCompileTimeConstant[label="NonCompileTimeConstant"]; -} -Propagated modules: -module NonCompileTimeConstant -End of propagated Cleaning output files: out/production/NonCompileTimeConstant/Test.class End of files diff --git a/jps/testData/incremental/fieldProperties/nonIncremental1.log b/jps/testData/incremental/fieldProperties/nonIncremental1.log index 00c785a420df..b32437465961 100644 --- a/jps/testData/incremental/fieldProperties/nonIncremental1.log +++ b/jps/testData/incremental/fieldProperties/nonIncremental1.log @@ -1,15 +1,3 @@ -Request to make modules: -module nonIncremental1 -End of request -digraph X { - nonIncremental1[label="nonIncremental1"]; -} -digraph X { - nonIncremental1[label="nonIncremental1"]; -} -Propagated modules: -module nonIncremental1 -End of propagated Cleaning output files: out/production/nonIncremental1/A/A.class End of files diff --git a/jps/testData/incremental/fieldProperties/nonIncremental2.log b/jps/testData/incremental/fieldProperties/nonIncremental2.log index 003d98cc4518..eafd6302c3f4 100644 --- a/jps/testData/incremental/fieldProperties/nonIncremental2.log +++ b/jps/testData/incremental/fieldProperties/nonIncremental2.log @@ -1,15 +1,3 @@ -Request to make modules: -module NonIncremental2 -End of request -digraph X { - NonIncremental2[label="NonIncremental2"]; -} -digraph X { - NonIncremental2[label="NonIncremental2"]; -} -Propagated modules: -module NonIncremental2 -End of propagated Cleaning output files: out/production/NonIncremental2/A/A.class End of files diff --git a/jps/testData/incremental/fieldProperties/stringConstantChange.log b/jps/testData/incremental/fieldProperties/stringConstantChange.log index 6266a3772dd7..8675bf0b5d42 100644 --- a/jps/testData/incremental/fieldProperties/stringConstantChange.log +++ b/jps/testData/incremental/fieldProperties/stringConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module StringConstantChange -End of request -digraph X { - StringConstantChange[label="StringConstantChange"]; -} -digraph X { - StringConstantChange[label="StringConstantChange"]; -} -Propagated modules: -module StringConstantChange -End of propagated Cleaning output files: out/production/StringConstantChange/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/stringConstantLessAccessible.log b/jps/testData/incremental/fieldProperties/stringConstantLessAccessible.log index 055934535261..15ce632a5a8e 100644 --- a/jps/testData/incremental/fieldProperties/stringConstantLessAccessible.log +++ b/jps/testData/incremental/fieldProperties/stringConstantLessAccessible.log @@ -1,15 +1,3 @@ -Request to make modules: -module StringConstantLessAccessible -End of request -digraph X { - StringConstantLessAccessible[label="StringConstantLessAccessible"]; -} -digraph X { - StringConstantLessAccessible[label="StringConstantLessAccessible"]; -} -Propagated modules: -module StringConstantLessAccessible -End of propagated Cleaning output files: out/production/StringConstantLessAccessible/Server.class End of files diff --git a/jps/testData/incremental/fieldProperties/typeChange.log b/jps/testData/incremental/fieldProperties/typeChange.log index f3fabd3f9e24..4a06eb6add44 100644 --- a/jps/testData/incremental/fieldProperties/typeChange.log +++ b/jps/testData/incremental/fieldProperties/typeChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module TypeChange -End of request -digraph X { - TypeChange[label="TypeChange"]; -} -digraph X { - TypeChange[label="TypeChange"]; -} -Propagated modules: -module TypeChange -End of propagated Cleaning output files: out/production/TypeChange/A.class End of files diff --git a/jps/testData/incremental/fieldProperties/typeChange1.log b/jps/testData/incremental/fieldProperties/typeChange1.log index dbb5d35d2e00..bdcd7816f25f 100644 --- a/jps/testData/incremental/fieldProperties/typeChange1.log +++ b/jps/testData/incremental/fieldProperties/typeChange1.log @@ -1,15 +1,3 @@ -Request to make modules: -module TypeChange1 -End of request -digraph X { - TypeChange1[label="TypeChange1"]; -} -digraph X { - TypeChange1[label="TypeChange1"]; -} -Propagated modules: -module TypeChange1 -End of propagated Cleaning output files: out/production/TypeChange1/A.class End of files diff --git a/jps/testData/incremental/fieldProperties/typeChange2.log b/jps/testData/incremental/fieldProperties/typeChange2.log index 458532df01c7..16d8fdfae833 100644 --- a/jps/testData/incremental/fieldProperties/typeChange2.log +++ b/jps/testData/incremental/fieldProperties/typeChange2.log @@ -1,15 +1,3 @@ -Request to make modules: -module TypeChange2 -End of request -digraph X { - TypeChange2[label="TypeChange2"]; -} -digraph X { - TypeChange2[label="TypeChange2"]; -} -Propagated modules: -module TypeChange2 -End of propagated Cleaning output files: out/production/TypeChange2/A.class End of files diff --git a/jps/testData/incremental/generics/addMethodToBase.log b/jps/testData/incremental/generics/addMethodToBase.log index 3467a8d4f144..750a8ba24d1c 100644 --- a/jps/testData/incremental/generics/addMethodToBase.log +++ b/jps/testData/incremental/generics/addMethodToBase.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddMethodToBase -End of request -digraph X { - AddMethodToBase[label="AddMethodToBase"]; -} -digraph X { - AddMethodToBase[label="AddMethodToBase"]; -} -Propagated modules: -module AddMethodToBase -End of propagated Cleaning output files: out/production/AddMethodToBase/C.class End of files diff --git a/jps/testData/incremental/generics/addParameterizedMethodToBase.log b/jps/testData/incremental/generics/addParameterizedMethodToBase.log index 1f94028f729b..f78d66a0c5be 100644 --- a/jps/testData/incremental/generics/addParameterizedMethodToBase.log +++ b/jps/testData/incremental/generics/addParameterizedMethodToBase.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddParameterizedMethodToBase -End of request -digraph X { - AddParameterizedMethodToBase[label="AddParameterizedMethodToBase"]; -} -digraph X { - AddParameterizedMethodToBase[label="AddParameterizedMethodToBase"]; -} -Propagated modules: -module AddParameterizedMethodToBase -End of propagated Cleaning output files: out/production/AddParameterizedMethodToBase/C.class End of files diff --git a/jps/testData/incremental/generics/changeBound.log b/jps/testData/incremental/generics/changeBound.log index 338f9afdab59..3b25d7d3e4d6 100644 --- a/jps/testData/incremental/generics/changeBound.log +++ b/jps/testData/incremental/generics/changeBound.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeBound -End of request -digraph X { - ChangeBound[label="ChangeBound"]; -} -digraph X { - ChangeBound[label="ChangeBound"]; -} -Propagated modules: -module ChangeBound -End of propagated Cleaning output files: out/production/ChangeBound/A.class End of files diff --git a/jps/testData/incremental/generics/changeBound1.log b/jps/testData/incremental/generics/changeBound1.log index e61a27a84bd2..330345e30517 100644 --- a/jps/testData/incremental/generics/changeBound1.log +++ b/jps/testData/incremental/generics/changeBound1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeBound1 -End of request -digraph X { - ChangeBound1[label="ChangeBound1"]; -} -digraph X { - ChangeBound1[label="ChangeBound1"]; -} -Propagated modules: -module ChangeBound1 -End of propagated Cleaning output files: out/production/ChangeBound1/A.class End of files diff --git a/jps/testData/incremental/generics/changeBoundClass1.log b/jps/testData/incremental/generics/changeBoundClass1.log index da7458dc3464..17367db9e004 100644 --- a/jps/testData/incremental/generics/changeBoundClass1.log +++ b/jps/testData/incremental/generics/changeBoundClass1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeBoundClass1 -End of request -digraph X { - ChangeBoundClass1[label="ChangeBoundClass1"]; -} -digraph X { - ChangeBoundClass1[label="ChangeBoundClass1"]; -} -Propagated modules: -module ChangeBoundClass1 -End of propagated Cleaning output files: out/production/ChangeBoundClass1/Value.class End of files diff --git a/jps/testData/incremental/generics/changeBoundInterface1.log b/jps/testData/incremental/generics/changeBoundInterface1.log index 4e25c52aecca..12bb7baa88a7 100644 --- a/jps/testData/incremental/generics/changeBoundInterface1.log +++ b/jps/testData/incremental/generics/changeBoundInterface1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeBoundInterface1 -End of request -digraph X { - ChangeBoundInterface1[label="ChangeBoundInterface1"]; -} -digraph X { - ChangeBoundInterface1[label="ChangeBoundInterface1"]; -} -Propagated modules: -module ChangeBoundInterface1 -End of propagated Cleaning output files: out/production/ChangeBoundInterface1/I.class End of files diff --git a/jps/testData/incremental/generics/changeBoundedClass.log b/jps/testData/incremental/generics/changeBoundedClass.log index 2b4be8f227cc..2b416bd218f6 100644 --- a/jps/testData/incremental/generics/changeBoundedClass.log +++ b/jps/testData/incremental/generics/changeBoundedClass.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeBoundedClass -End of request -digraph X { - ChangeBoundedClass[label="ChangeBoundedClass"]; -} -digraph X { - ChangeBoundedClass[label="ChangeBoundedClass"]; -} -Propagated modules: -module ChangeBoundedClass -End of propagated Cleaning output files: out/production/ChangeBoundedClass/Value.class End of files diff --git a/jps/testData/incremental/generics/changeExtends.log b/jps/testData/incremental/generics/changeExtends.log index bca8f3f4ca10..0cba040f482a 100644 --- a/jps/testData/incremental/generics/changeExtends.log +++ b/jps/testData/incremental/generics/changeExtends.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeExtends -End of request -digraph X { - ChangeExtends[label="ChangeExtends"]; -} -digraph X { - ChangeExtends[label="ChangeExtends"]; -} -Propagated modules: -module ChangeExtends -End of propagated Cleaning output files: out/production/ChangeExtends/Super.class End of files diff --git a/jps/testData/incremental/generics/changeExtends1.log b/jps/testData/incremental/generics/changeExtends1.log index c423d70b0e53..14aaae4ec145 100644 --- a/jps/testData/incremental/generics/changeExtends1.log +++ b/jps/testData/incremental/generics/changeExtends1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeExtends1 -End of request -digraph X { - ChangeExtends1[label="ChangeExtends1"]; -} -digraph X { - ChangeExtends1[label="ChangeExtends1"]; -} -Propagated modules: -module ChangeExtends1 -End of propagated Cleaning output files: out/production/ChangeExtends1/Super.class End of files diff --git a/jps/testData/incremental/generics/changeExtends2.log b/jps/testData/incremental/generics/changeExtends2.log index a93c3f5b849a..ef64a1b81584 100644 --- a/jps/testData/incremental/generics/changeExtends2.log +++ b/jps/testData/incremental/generics/changeExtends2.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeExtends2 -End of request -digraph X { - ChangeExtends2[label="ChangeExtends2"]; -} -digraph X { - ChangeExtends2[label="ChangeExtends2"]; -} -Propagated modules: -module ChangeExtends2 -End of propagated Cleaning output files: out/production/ChangeExtends2/Super.class End of files diff --git a/jps/testData/incremental/generics/changeImplements.log b/jps/testData/incremental/generics/changeImplements.log index 70dfd576b004..7e15fe4e2aac 100644 --- a/jps/testData/incremental/generics/changeImplements.log +++ b/jps/testData/incremental/generics/changeImplements.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeImplements -End of request -digraph X { - ChangeImplements[label="ChangeImplements"]; -} -digraph X { - ChangeImplements[label="ChangeImplements"]; -} -Propagated modules: -module ChangeImplements -End of propagated Cleaning output files: out/production/ChangeImplements/Super.class End of files diff --git a/jps/testData/incremental/generics/changeInterfaceTypeParameter.log b/jps/testData/incremental/generics/changeInterfaceTypeParameter.log index da0dfdab97be..cf30b933253e 100644 --- a/jps/testData/incremental/generics/changeInterfaceTypeParameter.log +++ b/jps/testData/incremental/generics/changeInterfaceTypeParameter.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeInterfaceTypeParameter -End of request -digraph X { - ChangeInterfaceTypeParameter[label="ChangeInterfaceTypeParameter"]; -} -digraph X { - ChangeInterfaceTypeParameter[label="ChangeInterfaceTypeParameter"]; -} -Propagated modules: -module ChangeInterfaceTypeParameter -End of propagated Cleaning output files: out/production/ChangeInterfaceTypeParameter/B.class End of files diff --git a/jps/testData/incremental/generics/changeToCovariantMethodInBase.log b/jps/testData/incremental/generics/changeToCovariantMethodInBase.log index dc2f25f5e6e2..1e07b67f5ca7 100644 --- a/jps/testData/incremental/generics/changeToCovariantMethodInBase.log +++ b/jps/testData/incremental/generics/changeToCovariantMethodInBase.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeToCovariantMethodInBase -End of request -digraph X { - ChangeToCovariantMethodInBase[label="ChangeToCovariantMethodInBase"]; -} -digraph X { - ChangeToCovariantMethodInBase[label="ChangeToCovariantMethodInBase"]; -} -Propagated modules: -module ChangeToCovariantMethodInBase -End of propagated Cleaning output files: out/production/ChangeToCovariantMethodInBase/maketest/BaseImplementation.class End of files diff --git a/jps/testData/incremental/generics/changeToCovariantMethodInBase2.log b/jps/testData/incremental/generics/changeToCovariantMethodInBase2.log index 8330333f86ba..982ae9ad2073 100644 --- a/jps/testData/incremental/generics/changeToCovariantMethodInBase2.log +++ b/jps/testData/incremental/generics/changeToCovariantMethodInBase2.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeToCovariantMethodInBase2 -End of request -digraph X { - ChangeToCovariantMethodInBase2[label="ChangeToCovariantMethodInBase2"]; -} -digraph X { - ChangeToCovariantMethodInBase2[label="ChangeToCovariantMethodInBase2"]; -} -Propagated modules: -module ChangeToCovariantMethodInBase2 -End of propagated Cleaning output files: out/production/ChangeToCovariantMethodInBase2/maketest/BaseImplementation.class End of files diff --git a/jps/testData/incremental/generics/changeVarargSignature.log b/jps/testData/incremental/generics/changeVarargSignature.log index cc8206fa38eb..ed8fa0ba750b 100644 --- a/jps/testData/incremental/generics/changeVarargSignature.log +++ b/jps/testData/incremental/generics/changeVarargSignature.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeVarargSignature -End of request -digraph X { - ChangeVarargSignature[label="ChangeVarargSignature"]; -} -digraph X { - ChangeVarargSignature[label="ChangeVarargSignature"]; -} -Propagated modules: -module ChangeVarargSignature -End of propagated Cleaning output files: out/production/ChangeVarargSignature/packageA/Base.class End of files diff --git a/jps/testData/incremental/generics/changeVarargSignature1.log b/jps/testData/incremental/generics/changeVarargSignature1.log index f7963e969a69..753c2bc9937a 100644 --- a/jps/testData/incremental/generics/changeVarargSignature1.log +++ b/jps/testData/incremental/generics/changeVarargSignature1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeVarargSignature1 -End of request -digraph X { - ChangeVarargSignature1[label="ChangeVarargSignature1"]; -} -digraph X { - ChangeVarargSignature1[label="ChangeVarargSignature1"]; -} -Propagated modules: -module ChangeVarargSignature1 -End of propagated Cleaning output files: out/production/ChangeVarargSignature1/packageA/Base.class End of files diff --git a/jps/testData/incremental/generics/covariance.log b/jps/testData/incremental/generics/covariance.log index 4711f8e11697..6d8f820b55be 100644 --- a/jps/testData/incremental/generics/covariance.log +++ b/jps/testData/incremental/generics/covariance.log @@ -1,15 +1,3 @@ -Request to make modules: -module Covariance -End of request -digraph X { - Covariance[label="Covariance"]; -} -digraph X { - Covariance[label="Covariance"]; -} -Propagated modules: -module Covariance -End of propagated Cleaning output files: out/production/Covariance/Derived.class End of files diff --git a/jps/testData/incremental/generics/covariance1.log b/jps/testData/incremental/generics/covariance1.log index 6a0193ef7af8..c99cf41f8b53 100644 --- a/jps/testData/incremental/generics/covariance1.log +++ b/jps/testData/incremental/generics/covariance1.log @@ -1,15 +1,3 @@ -Request to make modules: -module Covariance1 -End of request -digraph X { - Covariance1[label="Covariance1"]; -} -digraph X { - Covariance1[label="Covariance1"]; -} -Propagated modules: -module Covariance1 -End of propagated Cleaning output files: out/production/Covariance1/Derived.class End of files diff --git a/jps/testData/incremental/generics/covariance2.log b/jps/testData/incremental/generics/covariance2.log index 88882c757c8b..39ee7eb811d6 100644 --- a/jps/testData/incremental/generics/covariance2.log +++ b/jps/testData/incremental/generics/covariance2.log @@ -1,15 +1,3 @@ -Request to make modules: -module Covariance2 -End of request -digraph X { - Covariance2[label="Covariance2"]; -} -digraph X { - Covariance2[label="Covariance2"]; -} -Propagated modules: -module Covariance2 -End of propagated Cleaning output files: out/production/Covariance2/IfaceImpl.class End of files diff --git a/jps/testData/incremental/generics/covarianceNoChanges.log b/jps/testData/incremental/generics/covarianceNoChanges.log index 0b0a6f6151aa..b242399b68e7 100644 --- a/jps/testData/incremental/generics/covarianceNoChanges.log +++ b/jps/testData/incremental/generics/covarianceNoChanges.log @@ -1,15 +1,3 @@ -Request to make modules: -module CovarianceNoChanges -End of request -digraph X { - CovarianceNoChanges[label="CovarianceNoChanges"]; -} -digraph X { - CovarianceNoChanges[label="CovarianceNoChanges"]; -} -Propagated modules: -module CovarianceNoChanges -End of propagated Cleaning output files: out/production/CovarianceNoChanges/Derived.class End of files diff --git a/jps/testData/incremental/generics/degenerify.log b/jps/testData/incremental/generics/degenerify.log index 29de6ff5f970..01c3eb2a9538 100644 --- a/jps/testData/incremental/generics/degenerify.log +++ b/jps/testData/incremental/generics/degenerify.log @@ -1,15 +1,3 @@ -Request to make modules: -module Degenerify -End of request -digraph X { - Degenerify[label="Degenerify"]; -} -digraph X { - Degenerify[label="Degenerify"]; -} -Propagated modules: -module Degenerify -End of propagated Cleaning output files: out/production/Degenerify/A.class End of files diff --git a/jps/testData/incremental/generics/degenerify1.log b/jps/testData/incremental/generics/degenerify1.log index 217f83583ef4..42977e5685e9 100644 --- a/jps/testData/incremental/generics/degenerify1.log +++ b/jps/testData/incremental/generics/degenerify1.log @@ -1,15 +1,3 @@ -Request to make modules: -module Degenerify1 -End of request -digraph X { - Degenerify1[label="Degenerify1"]; -} -digraph X { - Degenerify1[label="Degenerify1"]; -} -Propagated modules: -module Degenerify1 -End of propagated Cleaning output files: out/production/Degenerify1/A.class End of files diff --git a/jps/testData/incremental/generics/fieldTypeChange.log b/jps/testData/incremental/generics/fieldTypeChange.log index eef44be92bc6..5be524a56aa3 100644 --- a/jps/testData/incremental/generics/fieldTypeChange.log +++ b/jps/testData/incremental/generics/fieldTypeChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module FieldTypeChange -End of request -digraph X { - FieldTypeChange[label="FieldTypeChange"]; -} -digraph X { - FieldTypeChange[label="FieldTypeChange"]; -} -Propagated modules: -module FieldTypeChange -End of propagated Cleaning output files: out/production/FieldTypeChange/Server.class End of files diff --git a/jps/testData/incremental/generics/overrideAnnotatedAnonymous.log b/jps/testData/incremental/generics/overrideAnnotatedAnonymous.log index 473a89b7785f..413d41ad6d40 100644 --- a/jps/testData/incremental/generics/overrideAnnotatedAnonymous.log +++ b/jps/testData/incremental/generics/overrideAnnotatedAnonymous.log @@ -1,15 +1,3 @@ -Request to make modules: -module OverrideAnnotatedAnonymous -End of request -digraph X { - OverrideAnnotatedAnonymous[label="OverrideAnnotatedAnonymous"]; -} -digraph X { - OverrideAnnotatedAnonymous[label="OverrideAnnotatedAnonymous"]; -} -Propagated modules: -module OverrideAnnotatedAnonymous -End of propagated Cleaning output files: out/production/OverrideAnnotatedAnonymous/packageA/Base.class End of files diff --git a/jps/testData/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log b/jps/testData/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log index cbce20fe05e4..4be3d1f3669d 100644 --- a/jps/testData/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log +++ b/jps/testData/incremental/generics/overrideAnnotatedAnonymousNotRecompile.log @@ -1,15 +1,3 @@ -Request to make modules: -module OverrideAnnotatedAnonymousNotRecompile -End of request -digraph X { - OverrideAnnotatedAnonymousNotRecompile[label="OverrideAnnotatedAnonymousNotRecompile"]; -} -digraph X { - OverrideAnnotatedAnonymousNotRecompile[label="OverrideAnnotatedAnonymousNotRecompile"]; -} -Propagated modules: -module OverrideAnnotatedAnonymousNotRecompile -End of propagated Cleaning output files: out/production/OverrideAnnotatedAnonymousNotRecompile/packageA/Base.class End of files diff --git a/jps/testData/incremental/generics/overrideAnnotatedInner.log b/jps/testData/incremental/generics/overrideAnnotatedInner.log index 0c6d63e0880e..d929ed129282 100644 --- a/jps/testData/incremental/generics/overrideAnnotatedInner.log +++ b/jps/testData/incremental/generics/overrideAnnotatedInner.log @@ -1,15 +1,3 @@ -Request to make modules: -module OverrideAnnotatedInner -End of request -digraph X { - OverrideAnnotatedInner[label="OverrideAnnotatedInner"]; -} -digraph X { - OverrideAnnotatedInner[label="OverrideAnnotatedInner"]; -} -Propagated modules: -module OverrideAnnotatedInner -End of propagated Cleaning output files: out/production/OverrideAnnotatedInner/packageA/Base.class End of files diff --git a/jps/testData/incremental/generics/paramTypes.log b/jps/testData/incremental/generics/paramTypes.log index eb93e0c84734..b7e8cd79a17c 100644 --- a/jps/testData/incremental/generics/paramTypes.log +++ b/jps/testData/incremental/generics/paramTypes.log @@ -1,15 +1,3 @@ -Request to make modules: -module ParamTypes -End of request -digraph X { - ParamTypes[label="ParamTypes"]; -} -digraph X { - ParamTypes[label="ParamTypes"]; -} -Propagated modules: -module ParamTypes -End of propagated Cleaning output files: out/production/ParamTypes/Server.class End of files diff --git a/jps/testData/incremental/generics/returnType.log b/jps/testData/incremental/generics/returnType.log index 9fcfbbd3ba68..5a3832a0218e 100644 --- a/jps/testData/incremental/generics/returnType.log +++ b/jps/testData/incremental/generics/returnType.log @@ -1,15 +1,3 @@ -Request to make modules: -module ReturnType -End of request -digraph X { - ReturnType[label="ReturnType"]; -} -digraph X { - ReturnType[label="ReturnType"]; -} -Propagated modules: -module ReturnType -End of propagated Cleaning output files: out/production/ReturnType/Server.class End of files diff --git a/jps/testData/incremental/markDirty/recompileDependent.log b/jps/testData/incremental/markDirty/recompileDependent.log index d3115644ec5e..835dd546ef1d 100644 --- a/jps/testData/incremental/markDirty/recompileDependent.log +++ b/jps/testData/incremental/markDirty/recompileDependent.log @@ -1,15 +1,3 @@ -Request to make modules: -module RecompileDependent -End of request -digraph X { - RecompileDependent[label="RecompileDependent"]; -} -digraph X { - RecompileDependent[label="RecompileDependent"]; -} -Propagated modules: -module RecompileDependent -End of propagated Cleaning output files: out/production/RecompileDependent/Server.class End of files diff --git a/jps/testData/incremental/membersChange/addAbstractMethod.log b/jps/testData/incremental/membersChange/addAbstractMethod.log index fbb88f2cbc06..0989f302d639 100644 --- a/jps/testData/incremental/membersChange/addAbstractMethod.log +++ b/jps/testData/incremental/membersChange/addAbstractMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddAbstractMethod -End of request -digraph X { - AddAbstractMethod[label="AddAbstractMethod"]; -} -digraph X { - AddAbstractMethod[label="AddAbstractMethod"]; -} -Propagated modules: -module AddAbstractMethod -End of propagated Cleaning output files: out/production/AddAbstractMethod/packageA/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addConstructorParameter.log b/jps/testData/incremental/membersChange/addConstructorParameter.log index 8df569df8506..33a5aa158b7e 100644 --- a/jps/testData/incremental/membersChange/addConstructorParameter.log +++ b/jps/testData/incremental/membersChange/addConstructorParameter.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddConstructorParameter -End of request -digraph X { - AddConstructorParameter[label="AddConstructorParameter"]; -} -digraph X { - AddConstructorParameter[label="AddConstructorParameter"]; -} -Propagated modules: -module AddConstructorParameter -End of propagated Cleaning output files: out/production/AddConstructorParameter/Base.class End of files diff --git a/jps/testData/incremental/membersChange/addFieldToBaseClass.log b/jps/testData/incremental/membersChange/addFieldToBaseClass.log index 619d4e35d441..5d06361ae503 100644 --- a/jps/testData/incremental/membersChange/addFieldToBaseClass.log +++ b/jps/testData/incremental/membersChange/addFieldToBaseClass.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddFieldToBaseClass -End of request -digraph X { - AddFieldToBaseClass[label="AddFieldToBaseClass"]; -} -digraph X { - AddFieldToBaseClass[label="AddFieldToBaseClass"]; -} -Propagated modules: -module AddFieldToBaseClass -End of propagated Cleaning output files: out/production/AddFieldToBaseClass/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log b/jps/testData/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log index 619d4e35d441..5d06361ae503 100644 --- a/jps/testData/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log +++ b/jps/testData/incremental/membersChange/addFieldToBaseClass/addFieldToBaseClass.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddFieldToBaseClass -End of request -digraph X { - AddFieldToBaseClass[label="AddFieldToBaseClass"]; -} -digraph X { - AddFieldToBaseClass[label="AddFieldToBaseClass"]; -} -Propagated modules: -module AddFieldToBaseClass -End of propagated Cleaning output files: out/production/AddFieldToBaseClass/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addFieldToDerived.log b/jps/testData/incremental/membersChange/addFieldToDerived.log index a5d057bd8e1b..69c6e60259f5 100644 --- a/jps/testData/incremental/membersChange/addFieldToDerived.log +++ b/jps/testData/incremental/membersChange/addFieldToDerived.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddFieldToDerived -End of request -digraph X { - AddFieldToDerived[label="AddFieldToDerived"]; -} -digraph X { - AddFieldToDerived[label="AddFieldToDerived"]; -} -Propagated modules: -module AddFieldToDerived -End of propagated Cleaning output files: out/production/AddFieldToDerived/Derived.class End of files diff --git a/jps/testData/incremental/membersChange/addFieldToInterface.log b/jps/testData/incremental/membersChange/addFieldToInterface.log index 2c6c4230e90d..8bc4265c114f 100644 --- a/jps/testData/incremental/membersChange/addFieldToInterface.log +++ b/jps/testData/incremental/membersChange/addFieldToInterface.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddFieldToInterface -End of request -digraph X { - AddFieldToInterface[label="AddFieldToInterface"]; -} -digraph X { - AddFieldToInterface[label="AddFieldToInterface"]; -} -Propagated modules: -module AddFieldToInterface -End of propagated Cleaning output files: out/production/AddFieldToInterface/BaseInterface.class End of files diff --git a/jps/testData/incremental/membersChange/addFieldToInterface2.log b/jps/testData/incremental/membersChange/addFieldToInterface2.log index c1ab2defb892..698b112d4c5d 100644 --- a/jps/testData/incremental/membersChange/addFieldToInterface2.log +++ b/jps/testData/incremental/membersChange/addFieldToInterface2.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddFieldToInterface2 -End of request -digraph X { - AddFieldToInterface2[label="AddFieldToInterface2"]; -} -digraph X { - AddFieldToInterface2[label="AddFieldToInterface2"]; -} -Propagated modules: -module AddFieldToInterface2 -End of propagated Cleaning output files: out/production/AddFieldToInterface2/BaseInterface.class End of files diff --git a/jps/testData/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log b/jps/testData/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log index 091a7873c621..aafcde0208e1 100644 --- a/jps/testData/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log +++ b/jps/testData/incremental/membersChange/addFinalMethodHavingNonFinalMethodInSubclass.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddFinalMethodHavingNonFinalMethodInSubclass -End of request -digraph X { - AddFinalMethodHavingNonFinalMethodInSubclass[label="AddFinalMethodHavingNonFinalMethodInSubclass"]; -} -digraph X { - AddFinalMethodHavingNonFinalMethodInSubclass[label="AddFinalMethodHavingNonFinalMethodInSubclass"]; -} -Propagated modules: -module AddFinalMethodHavingNonFinalMethodInSubclass -End of propagated Cleaning output files: out/production/AddFinalMethodHavingNonFinalMethodInSubclass/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addHidingField.log b/jps/testData/incremental/membersChange/addHidingField.log index f63bb5e76f5c..f2c6bde96bff 100644 --- a/jps/testData/incremental/membersChange/addHidingField.log +++ b/jps/testData/incremental/membersChange/addHidingField.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddHidingField -End of request -digraph X { - AddHidingField[label="AddHidingField"]; -} -digraph X { - AddHidingField[label="AddHidingField"]; -} -Propagated modules: -module AddHidingField -End of propagated Cleaning output files: out/production/AddHidingField/BaseAction.class End of files diff --git a/jps/testData/incremental/membersChange/addHidingMethod.log b/jps/testData/incremental/membersChange/addHidingMethod.log index cbf89a895656..195d354199a4 100644 --- a/jps/testData/incremental/membersChange/addHidingMethod.log +++ b/jps/testData/incremental/membersChange/addHidingMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddHidingMethod -End of request -digraph X { - AddHidingMethod[label="AddHidingMethod"]; -} -digraph X { - AddHidingMethod[label="AddHidingMethod"]; -} -Propagated modules: -module AddHidingMethod -End of propagated Cleaning output files: out/production/AddHidingMethod/BaseAction.class End of files diff --git a/jps/testData/incremental/membersChange/addInterfaceMethod.log b/jps/testData/incremental/membersChange/addInterfaceMethod.log index 83703f3c4077..238df8242df2 100644 --- a/jps/testData/incremental/membersChange/addInterfaceMethod.log +++ b/jps/testData/incremental/membersChange/addInterfaceMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddInterfaceMethod -End of request -digraph X { - AddInterfaceMethod[label="AddInterfaceMethod"]; -} -digraph X { - AddInterfaceMethod[label="AddInterfaceMethod"]; -} -Propagated modules: -module AddInterfaceMethod -End of propagated Cleaning output files: out/production/AddInterfaceMethod/Service.class End of files diff --git a/jps/testData/incremental/membersChange/addInterfaceMethod2.log b/jps/testData/incremental/membersChange/addInterfaceMethod2.log index 10a45b9334dd..f96ef859af97 100644 --- a/jps/testData/incremental/membersChange/addInterfaceMethod2.log +++ b/jps/testData/incremental/membersChange/addInterfaceMethod2.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddInterfaceMethod2 -End of request -digraph X { - AddInterfaceMethod2[label="AddInterfaceMethod2"]; -} -digraph X { - AddInterfaceMethod2[label="AddInterfaceMethod2"]; -} -Propagated modules: -module AddInterfaceMethod2 -End of propagated Cleaning output files: out/production/AddInterfaceMethod2/Service.class End of files diff --git a/jps/testData/incremental/membersChange/addLessAccessibleFieldToDerived.log b/jps/testData/incremental/membersChange/addLessAccessibleFieldToDerived.log index ce28f2a9a58f..9e43530c46a7 100644 --- a/jps/testData/incremental/membersChange/addLessAccessibleFieldToDerived.log +++ b/jps/testData/incremental/membersChange/addLessAccessibleFieldToDerived.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddLessAccessibleFieldToDerived -End of request -digraph X { - AddLessAccessibleFieldToDerived[label="AddLessAccessibleFieldToDerived"]; -} -digraph X { - AddLessAccessibleFieldToDerived[label="AddLessAccessibleFieldToDerived"]; -} -Propagated modules: -module AddLessAccessibleFieldToDerived -End of propagated Cleaning output files: out/production/AddLessAccessibleFieldToDerived/Derived.class End of files diff --git a/jps/testData/incremental/membersChange/addMethod.log b/jps/testData/incremental/membersChange/addMethod.log index ee78104a6d04..6029a469da48 100644 --- a/jps/testData/incremental/membersChange/addMethod.log +++ b/jps/testData/incremental/membersChange/addMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module addMethod -End of request -digraph X { - addMethod[label="addMethod"]; -} -digraph X { - addMethod[label="addMethod"]; -} -Propagated modules: -module addMethod -End of propagated Cleaning output files: out/production/addMethod/A.class End of files diff --git a/jps/testData/incremental/membersChange/addMethodWithIncompatibleReturnType.log b/jps/testData/incremental/membersChange/addMethodWithIncompatibleReturnType.log index ec0c0895312d..0aaf2a295e85 100644 --- a/jps/testData/incremental/membersChange/addMethodWithIncompatibleReturnType.log +++ b/jps/testData/incremental/membersChange/addMethodWithIncompatibleReturnType.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddMethodWithIncompatibleReturnType -End of request -digraph X { - AddMethodWithIncompatibleReturnType[label="AddMethodWithIncompatibleReturnType"]; -} -digraph X { - AddMethodWithIncompatibleReturnType[label="AddMethodWithIncompatibleReturnType"]; -} -Propagated modules: -module AddMethodWithIncompatibleReturnType -End of propagated Cleaning output files: out/production/AddMethodWithIncompatibleReturnType/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addMoreAccessibleMethodToBase.log b/jps/testData/incremental/membersChange/addMoreAccessibleMethodToBase.log index 9a58f6bf98a6..5636bb01c157 100644 --- a/jps/testData/incremental/membersChange/addMoreAccessibleMethodToBase.log +++ b/jps/testData/incremental/membersChange/addMoreAccessibleMethodToBase.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddMoreAccessibleMethodToBase -End of request -digraph X { - AddMoreAccessibleMethodToBase[label="AddMoreAccessibleMethodToBase"]; -} -digraph X { - AddMoreAccessibleMethodToBase[label="AddMoreAccessibleMethodToBase"]; -} -Propagated modules: -module AddMoreAccessibleMethodToBase -End of propagated Cleaning output files: out/production/AddMoreAccessibleMethodToBase/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addMoreSpecific.log b/jps/testData/incremental/membersChange/addMoreSpecific.log index fcf5caaf5865..d55fe268ec71 100644 --- a/jps/testData/incremental/membersChange/addMoreSpecific.log +++ b/jps/testData/incremental/membersChange/addMoreSpecific.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddMoreSpecific -End of request -digraph X { - AddMoreSpecific[label="AddMoreSpecific"]; -} -digraph X { - AddMoreSpecific[label="AddMoreSpecific"]; -} -Propagated modules: -module AddMoreSpecific -End of propagated Cleaning output files: out/production/AddMoreSpecific/Server.class End of files diff --git a/jps/testData/incremental/membersChange/addMoreSpecific1.log b/jps/testData/incremental/membersChange/addMoreSpecific1.log index cc95b8178623..f80ff3988e5d 100644 --- a/jps/testData/incremental/membersChange/addMoreSpecific1.log +++ b/jps/testData/incremental/membersChange/addMoreSpecific1.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddMoreSpecific1 -End of request -digraph X { - AddMoreSpecific1[label="AddMoreSpecific1"]; -} -digraph X { - AddMoreSpecific1[label="AddMoreSpecific1"]; -} -Propagated modules: -module AddMoreSpecific1 -End of propagated Cleaning output files: out/production/AddMoreSpecific1/Derived.class End of files diff --git a/jps/testData/incremental/membersChange/addMoreSpecific2.log b/jps/testData/incremental/membersChange/addMoreSpecific2.log index 5b62f1d23666..c3aea330143a 100644 --- a/jps/testData/incremental/membersChange/addMoreSpecific2.log +++ b/jps/testData/incremental/membersChange/addMoreSpecific2.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddMoreSpecific2 -End of request -digraph X { - AddMoreSpecific2[label="AddMoreSpecific2"]; -} -digraph X { - AddMoreSpecific2[label="AddMoreSpecific2"]; -} -Propagated modules: -module AddMoreSpecific2 -End of propagated Cleaning output files: out/production/AddMoreSpecific2/Base.class End of files diff --git a/jps/testData/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log b/jps/testData/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log index de86a26e9f78..b774b7043769 100644 --- a/jps/testData/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log +++ b/jps/testData/incremental/membersChange/addNonStaticMethodHavingStaticMethodInSubclass.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddNonStaticMethodHavingStaticMethodInSubclass -End of request -digraph X { - AddNonStaticMethodHavingStaticMethodInSubclass[label="AddNonStaticMethodHavingStaticMethodInSubclass"]; -} -digraph X { - AddNonStaticMethodHavingStaticMethodInSubclass[label="AddNonStaticMethodHavingStaticMethodInSubclass"]; -} -Propagated modules: -module AddNonStaticMethodHavingStaticMethodInSubclass -End of propagated Cleaning output files: out/production/AddNonStaticMethodHavingStaticMethodInSubclass/BaseServer.class End of files diff --git a/jps/testData/incremental/membersChange/addStaticFieldToDerived.log b/jps/testData/incremental/membersChange/addStaticFieldToDerived.log index f4d267037796..62d036ceb1a7 100644 --- a/jps/testData/incremental/membersChange/addStaticFieldToDerived.log +++ b/jps/testData/incremental/membersChange/addStaticFieldToDerived.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddStaticFieldToDerived -End of request -digraph X { - AddStaticFieldToDerived[label="AddStaticFieldToDerived"]; -} -digraph X { - AddStaticFieldToDerived[label="AddStaticFieldToDerived"]; -} -Propagated modules: -module AddStaticFieldToDerived -End of propagated Cleaning output files: out/production/AddStaticFieldToDerived/Derived.class End of files diff --git a/jps/testData/incremental/membersChange/changeStaticMethodSignature.log b/jps/testData/incremental/membersChange/changeStaticMethodSignature.log index 9f67027240ab..9ba872ec0190 100644 --- a/jps/testData/incremental/membersChange/changeStaticMethodSignature.log +++ b/jps/testData/incremental/membersChange/changeStaticMethodSignature.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeStaticMethodSignature -End of request -digraph X { - ChangeStaticMethodSignature[label="ChangeStaticMethodSignature"]; -} -digraph X { - ChangeStaticMethodSignature[label="ChangeStaticMethodSignature"]; -} -Propagated modules: -module ChangeStaticMethodSignature -End of propagated Cleaning output files: out/production/ChangeStaticMethodSignature/packageA/Server.class End of files diff --git a/jps/testData/incremental/membersChange/deleteConstructor.log b/jps/testData/incremental/membersChange/deleteConstructor.log index 09fb76b9797d..bae93904d8e2 100644 --- a/jps/testData/incremental/membersChange/deleteConstructor.log +++ b/jps/testData/incremental/membersChange/deleteConstructor.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteConstructor -End of request -digraph X { - DeleteConstructor[label="DeleteConstructor"]; -} -digraph X { - DeleteConstructor[label="DeleteConstructor"]; -} -Propagated modules: -module DeleteConstructor -End of propagated Cleaning output files: out/production/DeleteConstructor/Server.class End of files diff --git a/jps/testData/incremental/membersChange/deleteInner.log b/jps/testData/incremental/membersChange/deleteInner.log index bcf9e1640e91..0d20bc58b495 100644 --- a/jps/testData/incremental/membersChange/deleteInner.log +++ b/jps/testData/incremental/membersChange/deleteInner.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteInner -End of request -digraph X { - DeleteInner[label="DeleteInner"]; -} -digraph X { - DeleteInner[label="DeleteInner"]; -} -Propagated modules: -module DeleteInner -End of propagated Cleaning output files: out/production/DeleteInner/Outer$Inner.class out/production/DeleteInner/Outer.class diff --git a/jps/testData/incremental/membersChange/deleteMethod.log b/jps/testData/incremental/membersChange/deleteMethod.log index 5ed38f275345..cb04865ed858 100644 --- a/jps/testData/incremental/membersChange/deleteMethod.log +++ b/jps/testData/incremental/membersChange/deleteMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethod -End of request -digraph X { - DeleteMethod[label="DeleteMethod"]; -} -digraph X { - DeleteMethod[label="DeleteMethod"]; -} -Propagated modules: -module DeleteMethod -End of propagated Cleaning output files: out/production/DeleteMethod/Server.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation.log b/jps/testData/incremental/membersChange/deleteMethodImplementation.log index dce137a921c8..30b3c879af8e 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation -End of request -digraph X { - DeleteMethodImplementation[label="DeleteMethodImplementation"]; -} -digraph X { - DeleteMethodImplementation[label="DeleteMethodImplementation"]; -} -Propagated modules: -module DeleteMethodImplementation -End of propagated Cleaning output files: out/production/DeleteMethodImplementation/BaseImpl.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation2.log b/jps/testData/incremental/membersChange/deleteMethodImplementation2.log index 648037e764ee..2d2fd3ac09fe 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation2.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation2.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation2 -End of request -digraph X { - DeleteMethodImplementation2[label="DeleteMethodImplementation2"]; -} -digraph X { - DeleteMethodImplementation2[label="DeleteMethodImplementation2"]; -} -Propagated modules: -module DeleteMethodImplementation2 -End of propagated Cleaning output files: out/production/DeleteMethodImplementation2/BaseImpl.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation3.log b/jps/testData/incremental/membersChange/deleteMethodImplementation3.log index c8c5f0ec2aa5..6fe88961a758 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation3.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation3.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation3 -End of request -digraph X { - DeleteMethodImplementation3[label="DeleteMethodImplementation3"]; -} -digraph X { - DeleteMethodImplementation3[label="DeleteMethodImplementation3"]; -} -Propagated modules: -module DeleteMethodImplementation3 -End of propagated Cleaning output files: out/production/DeleteMethodImplementation3/Base.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation4.log b/jps/testData/incremental/membersChange/deleteMethodImplementation4.log index 5e91b3b274a1..30038ec68e16 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation4.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation4.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation4 -End of request -digraph X { - DeleteMethodImplementation4[label="DeleteMethodImplementation4"]; -} -digraph X { - DeleteMethodImplementation4[label="DeleteMethodImplementation4"]; -} -Propagated modules: -module DeleteMethodImplementation4 -End of propagated Cleaning output files: out/production/DeleteMethodImplementation4/Base.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation5.log b/jps/testData/incremental/membersChange/deleteMethodImplementation5.log index 58b179e687ab..c8a95e08349b 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation5.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation5.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation5 -End of request -digraph X { - DeleteMethodImplementation5[label="DeleteMethodImplementation5"]; -} -digraph X { - DeleteMethodImplementation5[label="DeleteMethodImplementation5"]; -} -Propagated modules: -module DeleteMethodImplementation5 -End of propagated Cleaning output files: out/production/DeleteMethodImplementation5/Base.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation6.log b/jps/testData/incremental/membersChange/deleteMethodImplementation6.log index 0f9e82418007..0548319f9020 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation6.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation6.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation6 -End of request -digraph X { - DeleteMethodImplementation6[label="DeleteMethodImplementation6"]; -} -digraph X { - DeleteMethodImplementation6[label="DeleteMethodImplementation6"]; -} -Propagated modules: -module DeleteMethodImplementation6 -End of propagated Cleaning output files: out/production/DeleteMethodImplementation6/BaseImpl.class End of files diff --git a/jps/testData/incremental/membersChange/deleteMethodImplementation7.log b/jps/testData/incremental/membersChange/deleteMethodImplementation7.log index 19e3f7b7e893..08b5e98e1d01 100644 --- a/jps/testData/incremental/membersChange/deleteMethodImplementation7.log +++ b/jps/testData/incremental/membersChange/deleteMethodImplementation7.log @@ -1,15 +1,3 @@ -Request to make modules: -module DeleteMethodImplementation7 -End of request -digraph X { - DeleteMethodImplementation7[label="DeleteMethodImplementation7"]; -} -digraph X { - DeleteMethodImplementation7[label="DeleteMethodImplementation7"]; -} -Propagated modules: -module DeleteMethodImplementation7 -End of propagated Cleaning output files: out/production/DeleteMethodImplementation7/BaseImpl.class out/production/DeleteMethodImplementation7/BaseImplImpl.class diff --git a/jps/testData/incremental/membersChange/hierarchy.log b/jps/testData/incremental/membersChange/hierarchy.log index dba18e534409..10d0a0d379c5 100644 --- a/jps/testData/incremental/membersChange/hierarchy.log +++ b/jps/testData/incremental/membersChange/hierarchy.log @@ -1,15 +1,3 @@ -Request to make modules: -module Hierarchy -End of request -digraph X { - Hierarchy[label="Hierarchy"]; -} -digraph X { - Hierarchy[label="Hierarchy"]; -} -Propagated modules: -module Hierarchy -End of propagated Cleaning output files: out/production/Hierarchy/Service.class End of files diff --git a/jps/testData/incremental/membersChange/hierarchy2.log b/jps/testData/incremental/membersChange/hierarchy2.log index c4af45101710..2c78ae18e049 100644 --- a/jps/testData/incremental/membersChange/hierarchy2.log +++ b/jps/testData/incremental/membersChange/hierarchy2.log @@ -1,15 +1,3 @@ -Request to make modules: -module Hierarchy2 -End of request -digraph X { - Hierarchy2[label="Hierarchy2"]; -} -digraph X { - Hierarchy2[label="Hierarchy2"]; -} -Propagated modules: -module Hierarchy2 -End of propagated Cleaning output files: out/production/Hierarchy2/Service.class End of files diff --git a/jps/testData/incremental/membersChange/removeBaseImplementation.log b/jps/testData/incremental/membersChange/removeBaseImplementation.log index 7ac2c46ecb14..316ca9993b8b 100644 --- a/jps/testData/incremental/membersChange/removeBaseImplementation.log +++ b/jps/testData/incremental/membersChange/removeBaseImplementation.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveBaseImplementation -End of request -digraph X { - RemoveBaseImplementation[label="RemoveBaseImplementation"]; -} -digraph X { - RemoveBaseImplementation[label="RemoveBaseImplementation"]; -} -Propagated modules: -module RemoveBaseImplementation -End of propagated Cleaning output files: out/production/RemoveBaseImplementation/A.class End of files diff --git a/jps/testData/incremental/membersChange/removeHidingField.log b/jps/testData/incremental/membersChange/removeHidingField.log index c773d2f2cbd4..f2f4557f491e 100644 --- a/jps/testData/incremental/membersChange/removeHidingField.log +++ b/jps/testData/incremental/membersChange/removeHidingField.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveHidingField -End of request -digraph X { - RemoveHidingField[label="RemoveHidingField"]; -} -digraph X { - RemoveHidingField[label="RemoveHidingField"]; -} -Propagated modules: -module RemoveHidingField -End of propagated Cleaning output files: out/production/RemoveHidingField/BaseAction.class End of files diff --git a/jps/testData/incremental/membersChange/removeHidingMethod.log b/jps/testData/incremental/membersChange/removeHidingMethod.log index 12631936532a..0f7addca38c6 100644 --- a/jps/testData/incremental/membersChange/removeHidingMethod.log +++ b/jps/testData/incremental/membersChange/removeHidingMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module RemoveHidingMethod -End of request -digraph X { - RemoveHidingMethod[label="RemoveHidingMethod"]; -} -digraph X { - RemoveHidingMethod[label="RemoveHidingMethod"]; -} -Propagated modules: -module RemoveHidingMethod -End of propagated Cleaning output files: out/production/RemoveHidingMethod/BaseAction.class End of files diff --git a/jps/testData/incremental/membersChange/renameMethod.log b/jps/testData/incremental/membersChange/renameMethod.log index 77049da23028..75c3652d695c 100644 --- a/jps/testData/incremental/membersChange/renameMethod.log +++ b/jps/testData/incremental/membersChange/renameMethod.log @@ -1,15 +1,3 @@ -Request to make modules: -module RenameMethod -End of request -digraph X { - RenameMethod[label="RenameMethod"]; -} -digraph X { - RenameMethod[label="RenameMethod"]; -} -Propagated modules: -module RenameMethod -End of propagated Cleaning output files: out/production/RenameMethod/packageA/Server.class End of files diff --git a/jps/testData/incremental/membersChange/throwsListDiffersInBaseAndDerived.log b/jps/testData/incremental/membersChange/throwsListDiffersInBaseAndDerived.log index e140b5e63f50..824e681af0f7 100644 --- a/jps/testData/incremental/membersChange/throwsListDiffersInBaseAndDerived.log +++ b/jps/testData/incremental/membersChange/throwsListDiffersInBaseAndDerived.log @@ -1,15 +1,3 @@ -Request to make modules: -module ThrowsListDiffersInBaseAndDerived -End of request -digraph X { - ThrowsListDiffersInBaseAndDerived[label="ThrowsListDiffersInBaseAndDerived"]; -} -digraph X { - ThrowsListDiffersInBaseAndDerived[label="ThrowsListDiffersInBaseAndDerived"]; -} -Propagated modules: -module ThrowsListDiffersInBaseAndDerived -End of propagated Cleaning output files: out/production/ThrowsListDiffersInBaseAndDerived/BaseServer.class End of files diff --git a/jps/testData/incremental/methodModifiers/decConstructorAccess.log b/jps/testData/incremental/methodModifiers/decConstructorAccess.log index 0211a19f4149..5d603bc7d6d0 100644 --- a/jps/testData/incremental/methodModifiers/decConstructorAccess.log +++ b/jps/testData/incremental/methodModifiers/decConstructorAccess.log @@ -1,15 +1,3 @@ -Request to make modules: -module DecConstructorAccess -End of request -digraph X { - DecConstructorAccess[label="DecConstructorAccess"]; -} -digraph X { - DecConstructorAccess[label="DecConstructorAccess"]; -} -Propagated modules: -module DecConstructorAccess -End of propagated Cleaning output files: out/production/DecConstructorAccess/impl/Server.class End of files diff --git a/jps/testData/incremental/methodModifiers/incAccess.log b/jps/testData/incremental/methodModifiers/incAccess.log index dd68c3b8aa2b..3d47c1173a3a 100644 --- a/jps/testData/incremental/methodModifiers/incAccess.log +++ b/jps/testData/incremental/methodModifiers/incAccess.log @@ -1,15 +1,3 @@ -Request to make modules: -module IncAccess -End of request -digraph X { - IncAccess[label="IncAccess"]; -} -digraph X { - IncAccess[label="IncAccess"]; -} -Propagated modules: -module IncAccess -End of propagated Cleaning output files: out/production/IncAccess/Base.class End of files diff --git a/jps/testData/incremental/methodModifiers/setAbstract.log b/jps/testData/incremental/methodModifiers/setAbstract.log index 88590fb1ae32..83202fcbd249 100644 --- a/jps/testData/incremental/methodModifiers/setAbstract.log +++ b/jps/testData/incremental/methodModifiers/setAbstract.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetAbstract -End of request -digraph X { - SetAbstract[label="SetAbstract"]; -} -digraph X { - SetAbstract[label="SetAbstract"]; -} -Propagated modules: -module SetAbstract -End of propagated Cleaning output files: out/production/SetAbstract/Super.class End of files diff --git a/jps/testData/incremental/methodModifiers/setFinal.log b/jps/testData/incremental/methodModifiers/setFinal.log index 30444833a974..b32f008ad938 100644 --- a/jps/testData/incremental/methodModifiers/setFinal.log +++ b/jps/testData/incremental/methodModifiers/setFinal.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetFinal -End of request -digraph X { - SetFinal[label="SetFinal"]; -} -digraph X { - SetFinal[label="SetFinal"]; -} -Propagated modules: -module SetFinal -End of propagated Cleaning output files: out/production/SetFinal/Super.class End of files diff --git a/jps/testData/incremental/methodModifiers/setPrivate.log b/jps/testData/incremental/methodModifiers/setPrivate.log index be36d8a7e69d..ed67bc76bd35 100644 --- a/jps/testData/incremental/methodModifiers/setPrivate.log +++ b/jps/testData/incremental/methodModifiers/setPrivate.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetPrivate -End of request -digraph X { - SetPrivate[label="SetPrivate"]; -} -digraph X { - SetPrivate[label="SetPrivate"]; -} -Propagated modules: -module SetPrivate -End of propagated Cleaning output files: out/production/SetPrivate/A.class End of files diff --git a/jps/testData/incremental/methodModifiers/setProtected.log b/jps/testData/incremental/methodModifiers/setProtected.log index f12c8ce696eb..c65da93eafcc 100644 --- a/jps/testData/incremental/methodModifiers/setProtected.log +++ b/jps/testData/incremental/methodModifiers/setProtected.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetProtected -End of request -digraph X { - SetProtected[label="SetProtected"]; -} -digraph X { - SetProtected[label="SetProtected"]; -} -Propagated modules: -module SetProtected -End of propagated Cleaning output files: out/production/SetProtected/A.class End of files diff --git a/jps/testData/incremental/methodModifiers/setStatic.log b/jps/testData/incremental/methodModifiers/setStatic.log index 613df29a68ab..add371003a88 100644 --- a/jps/testData/incremental/methodModifiers/setStatic.log +++ b/jps/testData/incremental/methodModifiers/setStatic.log @@ -1,15 +1,3 @@ -Request to make modules: -module SetStatic -End of request -digraph X { - SetStatic[label="SetStatic"]; -} -digraph X { - SetStatic[label="SetStatic"]; -} -Propagated modules: -module SetStatic -End of propagated Cleaning output files: out/production/SetStatic/A.class End of files diff --git a/jps/testData/incremental/methodModifiers/unsetFinal.log b/jps/testData/incremental/methodModifiers/unsetFinal.log index d7f6d10099cb..4d2bb0f646a7 100644 --- a/jps/testData/incremental/methodModifiers/unsetFinal.log +++ b/jps/testData/incremental/methodModifiers/unsetFinal.log @@ -1,15 +1,3 @@ -Request to make modules: -module UnsetFinal -End of request -digraph X { - UnsetFinal[label="UnsetFinal"]; -} -digraph X { - UnsetFinal[label="UnsetFinal"]; -} -Propagated modules: -module UnsetFinal -End of propagated Cleaning output files: out/production/UnsetFinal/Server.class End of files diff --git a/jps/testData/incremental/methodModifiers/unsetStatic.log b/jps/testData/incremental/methodModifiers/unsetStatic.log index 8ccdafc48a60..c60f4d15d3f8 100644 --- a/jps/testData/incremental/methodModifiers/unsetStatic.log +++ b/jps/testData/incremental/methodModifiers/unsetStatic.log @@ -1,15 +1,3 @@ -Request to make modules: -module UnsetStatic -End of request -digraph X { - UnsetStatic[label="UnsetStatic"]; -} -digraph X { - UnsetStatic[label="UnsetStatic"]; -} -Propagated modules: -module UnsetStatic -End of propagated Cleaning output files: out/production/UnsetStatic/Base.class End of files diff --git a/jps/testData/incremental/methodProperties/addThrows.log b/jps/testData/incremental/methodProperties/addThrows.log index cfe00379c0e4..da6e16a8977b 100644 --- a/jps/testData/incremental/methodProperties/addThrows.log +++ b/jps/testData/incremental/methodProperties/addThrows.log @@ -1,15 +1,3 @@ -Request to make modules: -module AddThrows -End of request -digraph X { - AddThrows[label="AddThrows"]; -} -digraph X { - AddThrows[label="AddThrows"]; -} -Propagated modules: -module AddThrows -End of propagated Cleaning output files: out/production/AddThrows/packageA/Server.class End of files diff --git a/jps/testData/incremental/methodProperties/changeReturnType.log b/jps/testData/incremental/methodProperties/changeReturnType.log index a0580e54b63b..aa622da097e9 100644 --- a/jps/testData/incremental/methodProperties/changeReturnType.log +++ b/jps/testData/incremental/methodProperties/changeReturnType.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeReturnType -End of request -digraph X { - ChangeReturnType[label="ChangeReturnType"]; -} -digraph X { - ChangeReturnType[label="ChangeReturnType"]; -} -Propagated modules: -module ChangeReturnType -End of propagated Cleaning output files: out/production/ChangeReturnType/Base.class End of files diff --git a/jps/testData/incremental/methodProperties/changeReturnType1.log b/jps/testData/incremental/methodProperties/changeReturnType1.log index 0e4892a0b8b9..2e68acfd185b 100644 --- a/jps/testData/incremental/methodProperties/changeReturnType1.log +++ b/jps/testData/incremental/methodProperties/changeReturnType1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeReturnType1 -End of request -digraph X { - ChangeReturnType1[label="ChangeReturnType1"]; -} -digraph X { - ChangeReturnType1[label="ChangeReturnType1"]; -} -Propagated modules: -module ChangeReturnType1 -End of propagated Cleaning output files: out/production/ChangeReturnType1/Base.class End of files diff --git a/jps/testData/incremental/methodProperties/changeSignature.log b/jps/testData/incremental/methodProperties/changeSignature.log index 2648b6b0890b..2f459577b013 100644 --- a/jps/testData/incremental/methodProperties/changeSignature.log +++ b/jps/testData/incremental/methodProperties/changeSignature.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeSignature -End of request -digraph X { - ChangeSignature[label="ChangeSignature"]; -} -digraph X { - ChangeSignature[label="ChangeSignature"]; -} -Propagated modules: -module ChangeSignature -End of propagated Cleaning output files: out/production/ChangeSignature/Server.class End of files diff --git a/jps/testData/incremental/methodProperties/changeSignature1.log b/jps/testData/incremental/methodProperties/changeSignature1.log index e2149446f7a1..701b54992c87 100644 --- a/jps/testData/incremental/methodProperties/changeSignature1.log +++ b/jps/testData/incremental/methodProperties/changeSignature1.log @@ -1,15 +1,3 @@ -Request to make modules: -module ChangeSignature1 -End of request -digraph X { - ChangeSignature1[label="ChangeSignature1"]; -} -digraph X { - ChangeSignature1[label="ChangeSignature1"]; -} -Propagated modules: -module ChangeSignature1 -End of propagated Cleaning output files: out/production/ChangeSignature1/Server.class End of files diff --git a/jps/testData/incremental/packageInfo/packageInfoNoRecompile.log b/jps/testData/incremental/packageInfo/packageInfoNoRecompile.log index d31196d1bff6..e69de29bb2d1 100644 --- a/jps/testData/incremental/packageInfo/packageInfoNoRecompile.log +++ b/jps/testData/incremental/packageInfo/packageInfoNoRecompile.log @@ -1,11 +0,0 @@ -Request to make modules: -module PackageInfoNoRecompile -End of request -digraph X { - PackageInfoNoRecompile[label="PackageInfoNoRecompile"]; -} -digraph X { - PackageInfoNoRecompile[label="PackageInfoNoRecompile"]; -} -Propagated modules: -End of propagated diff --git a/jps/testData/incremental/packageInfo/packageInfoNoRecompile2.log b/jps/testData/incremental/packageInfo/packageInfoNoRecompile2.log index 75f9d4d9e21a..e69de29bb2d1 100644 --- a/jps/testData/incremental/packageInfo/packageInfoNoRecompile2.log +++ b/jps/testData/incremental/packageInfo/packageInfoNoRecompile2.log @@ -1,11 +0,0 @@ -Request to make modules: -module PackageInfoNoRecompile2 -End of request -digraph X { - PackageInfoNoRecompile2[label="PackageInfoNoRecompile2"]; -} -digraph X { - PackageInfoNoRecompile2[label="PackageInfoNoRecompile2"]; -} -Propagated modules: -End of propagated diff --git a/jps/testData/incremental/packageInfo/packageInfoRecompileOnConstantChange.log b/jps/testData/incremental/packageInfo/packageInfoRecompileOnConstantChange.log index 8856b7d62051..e4b101795b7f 100644 --- a/jps/testData/incremental/packageInfo/packageInfoRecompileOnConstantChange.log +++ b/jps/testData/incremental/packageInfo/packageInfoRecompileOnConstantChange.log @@ -1,15 +1,3 @@ -Request to make modules: -module PackageInfoRecompileOnConstantChange -End of request -digraph X { - PackageInfoRecompileOnConstantChange[label="PackageInfoRecompileOnConstantChange"]; -} -digraph X { - PackageInfoRecompileOnConstantChange[label="PackageInfoRecompileOnConstantChange"]; -} -Propagated modules: -module PackageInfoRecompileOnConstantChange -End of propagated Cleaning output files: out/production/PackageInfoRecompileOnConstantChange/bug/Namespace.class End of files diff --git a/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java b/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java index 4a8e7f0a0e07..c64a109153a7 100644 --- a/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java +++ b/platform/core-impl/src/com/intellij/psi/impl/file/PsiDirectoryImpl.java @@ -215,11 +215,12 @@ public class PsiDirectoryImpl extends PsiElementBase implements PsiDirectory, Qu ProgressIndicatorProvider.checkCanceled(); for (VirtualFile vFile : myFile.getChildren()) { + boolean isDir = vFile.isDirectory(); if (processor instanceof PsiFileSystemItemProcessor && - !((PsiFileSystemItemProcessor)processor).acceptItem(vFile.getName(), vFile.isDirectory())) { + !((PsiFileSystemItemProcessor)processor).acceptItem(vFile.getName(), isDir)) { continue; } - if (vFile.isDirectory()) { + if (isDir) { PsiDirectory dir = myManager.findDirectory(vFile); if (dir != null) { if (!processor.execute(dir)) return false; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/FileLevelIntentionComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/FileLevelIntentionComponent.java index 37279aebd926..89b8754f61d3 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/FileLevelIntentionComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/FileLevelIntentionComponent.java @@ -19,6 +19,8 @@ package com.intellij.codeInsight.intention.impl; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.SeverityRegistrar; import com.intellij.codeInsight.daemon.impl.ShowIntentionsPass; +import com.intellij.codeInsight.intention.EmptyIntentionAction; +import com.intellij.codeInsight.intention.IntentionAction; import com.intellij.lang.annotation.HighlightSeverity; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.project.Project; @@ -57,10 +59,14 @@ public class FileLevelIntentionComponent extends EditorNotificationPanel { for (Pair intention : intentions) { final HighlightInfo.IntentionActionDescriptor descriptor = intention.getFirst(); info.intentionsToShow.add(descriptor); - final String text = descriptor.getAction().getText(); + final IntentionAction action = descriptor.getAction(); + if (action instanceof EmptyIntentionAction) { + continue; + } + final String text = action.getText(); createActionLabel(text, new Runnable() { public void run() { - ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, descriptor.getAction(), text); + ShowIntentionActionsHandler.chooseActionAndInvoke(psiFile, editor, action, text); } }); } diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java index 8a03f1bc543f..7203667e610c 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/GridCellImpl.java @@ -24,6 +24,7 @@ import com.intellij.openapi.ui.popup.JBPopup; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.DimensionService; import com.intellij.openapi.util.MutualMap; +import com.intellij.ui.awt.RelativePoint; import com.intellij.ui.components.panels.NonOpaquePanel; import com.intellij.ui.content.Content; import com.intellij.ui.docking.DockContainer; @@ -77,6 +78,21 @@ public class GridCellImpl implements GridCell { protected Color getFocusedBottomFillColor() { return new Color(194, 203, 219); } + + @Override + public void processDropOver(TabInfo over, RelativePoint point) { + ((RunnerContentUi)myContext).myTabs.processDropOver(over, point); + } + + @Override + public Image startDropOver(TabInfo tabInfo, RelativePoint point) { + return ((RunnerContentUi)myContext).myTabs.startDropOver(tabInfo, point); + } + + @Override + public void resetDropOver(TabInfo tabInfo) { + ((RunnerContentUi)myContext).myTabs.resetDropOver(tabInfo); + } }.setDataProvider(new DataProvider() { @Nullable public Object getData(@NonNls final String dataId) { diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java index 0873fe91e6e0..70beed4ea9a2 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/JBRunnerTabs.java @@ -235,8 +235,9 @@ public class @Override public void processDropOver(TabInfo over, RelativePoint relativePoint) { - super.processDropOver(over, relativePoint); final Point point = relativePoint.getPoint(getComponent()); + myShowDropLocation = shouldAddToGlobal(point); + super.processDropOver(over, relativePoint); for (Map.Entry entry : myInfo2Label.entrySet()) { final TabLabel label = entry.getValue(); if (label.getBounds().contains(point) && myDropInfo != entry.getKey()) { diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java index 42c2d7c48830..5846a58bd543 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerContentUi.java @@ -23,10 +23,8 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.ActionCallback; -import com.intellij.openapi.util.ActiveRunnable; -import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Ref; +import com.intellij.openapi.util.*; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.IdeFocusManager; import com.intellij.openapi.wm.IdeFrame; import com.intellij.openapi.wm.ToolWindow; @@ -47,6 +45,7 @@ import com.intellij.ui.switcher.SwitchTarget; import com.intellij.ui.tabs.JBTabs; import com.intellij.ui.tabs.TabInfo; import com.intellij.ui.tabs.TabsListener; +import com.intellij.util.NotNullFunction; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.AbstractLayoutManager; import com.intellij.util.ui.UIUtil; @@ -65,7 +64,7 @@ import java.util.List; import java.util.concurrent.CopyOnWriteArraySet; public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Facade, ViewContextEx, PropertyChangeListener, SwitchProvider, - QuickActionProvider, DockContainer { + QuickActionProvider, DockContainer.Dialog { @NonNls public static final String LAYOUT = "Runner.Layout"; @NonNls public static final String VIEW_POPUP = "Runner.View.Popup"; @@ -381,8 +380,10 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac } private void storeDefaultIndices(Content[] contents) { + int i = 0; for (Content content : contents) { content.putUserData(RunnerLayout.DEFAULT_INDEX, getStateFor(content).getTab().getDefaultIndex()); + //content.putUserData(CONTENT_NUMBER, i++); } } @@ -431,7 +432,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac getStateFor(content).assignTab(getTabFor(getSelectedGrid())); getStateFor(content).setPlaceInGrid(myLayoutSettings.getDefaultGridPlace(content)); } else if (contents.size() == 1 && !wasRestoring) { - getStateFor(content).assignTab(myLayoutSettings.createNewTab()); + getStateFor(content).assignTab(null); getStateFor(content).setPlaceInGrid(myLayoutSettings.getDefaultGridPlace(content)); } getStateFor(content).setWindow(myWindow); @@ -508,7 +509,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac final Point p = point.getPoint(getComponent()); Component c = SwingUtilities.getDeepestComponentAt(getComponent(), p.x, p.y); while (c != null) { - if (c instanceof JBTabs) { + if (c instanceof JBRunnerTabs) { return (JBTabs)c; } c = c.getParent(); @@ -554,7 +555,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac grid.processAddToUi(false); } - if (myManager.getComponent().isShowing()) { + if (myManager.getComponent().isShowing() && !isStateBeingRestored()) { grid.restoreLastUiState(); } @@ -616,11 +617,17 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac if (myCurrentOver != null || myOriginal != null) { Integer forcedDropIndex = content.getUserData(RunnerLayout.DROP_INDEX); final int index = myTabs.getDropInfoIndex() + (myOriginal != null ? myOriginal.getTabOffsetFor(this) : 0); - final TabImpl tab = myLayoutSettings.getOrCreateTab(-1); - final Integer defaultIndex = content.getUserData(RunnerLayout.DEFAULT_INDEX); - tab.setDefaultIndex(defaultIndex != null ? defaultIndex : -1); - tab.setIndex(forcedDropIndex != null ? forcedDropIndex : index); + final int dropIndex = forcedDropIndex != null ? forcedDropIndex : index; + if (forcedDropIndex == null) { + moveFollowingTabs(dropIndex); + } + final int defaultIndex = content.getUserData(RunnerLayout.DEFAULT_INDEX); + final TabImpl tab = myLayoutSettings.getOrCreateTab(forcedDropIndex != null ? forcedDropIndex : -1); + tab.setDefaultIndex(defaultIndex); + tab.setIndex(dropIndex); getStateFor(content).assignTab(tab); + content.putUserData(RunnerLayout.DROP_INDEX, null); + content.putUserData(RunnerLayout.DEFAULT_INDEX, null); } TabInfo tab = new TabInfo(grid).setObject(getStateFor(content).getTab()).setText("Tab"); @@ -654,6 +661,27 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac return grid; } + private void moveFollowingTabs(int index) { + if (myOriginal != null) { + myOriginal.moveFollowingTabs(index); + return; + } + moveFollowingTabs(index, myTabs); + for (RunnerContentUi child : myChildren) { + moveFollowingTabs(index, child.myTabs); + } + } + + private static void moveFollowingTabs(int index, final JBRunnerTabs tabs) { + for (TabInfo info : tabs.getTabs()) { + final TabImpl tab = getTabFor(info); + final int tabIndex = tab != null ? tab.getIndex() : -1; + if (tabIndex >= index) { + tab.setIndex(tabIndex + 1); + } + } + } + private int getTabOffsetFor(RunnerContentUi ui) { int offset = myTabs.getTabCount(); for (RunnerContentUi child : myChildren) { @@ -761,22 +789,25 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac return false; } - String title = t.getDisplayName(); Icon icon = t.getIcon(); GridImpl grid = getGridFor(tab); boolean hasToolbarContent = grid.updateGridUI(); List contents = grid.getContents(); + String title = contents.size() > 1 ? t.getDisplayName() : null; if (title == null) { - title = ""; - Iterator all = contents.iterator(); - while (all.hasNext()) { - Content each = all.next(); - title += each.getTabName(); - if (all.hasNext()) { - title += " | "; - } + final String name = myLayoutSettings.getDefaultDisplayName(t.getDefaultIndex()); + if (name != null && contents.size() > 1) { + title = name; + } else { + title = StringUtil.join(contents, new NotNullFunction() { + @NotNull + @Override + public String fun(Content dom) { + return dom.getTabName(); + } + }, " | "); } } @@ -788,7 +819,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac tab.setDragOutDelegate(myTabs.getTabs().size() > 1 || !isOriginal() ? myDragOutDelegate : null); Tab gridTab = grid.getTab(); - tab.setText(title).setIcon(gridTab != null && gridTab.isDefault() ? null : icon); + tab.setText(title).setIcon(gridTab != null && gridTab.isDefault() && contents.size() > 1 ? null : icon); return hasToolbarContent; } @@ -834,7 +865,7 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac for (TabInfo each : tabs.getTabs()) { final int index = tabs.getIndexOf(each); final TabImpl tab = getTabFor(each); - if (tab != null) tab.setIndex(index + offset); + if (tab != null) tab.setIndex(index >= 0 ? index + offset : index); } return offset + tabs.getTabCount(); } @@ -925,9 +956,6 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac } public void beforeDispose() { - if (myComponent.getRootPane() != null) { - saveUiState(); - } if (myOriginal != null) { myDisposing = true; fireContentClosed(null); @@ -979,7 +1007,15 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac Collections.addAll(contents, child.myManager.getContents()); } Content[] all = contents.toArray(new Content[contents.size()]); - + Arrays.sort(all, new Comparator() { + @Override + public int compare(Content content, Content content1) { + final int i = getStateFor(content).getTab().getDefaultIndex(); + final int i1 = getStateFor(content1).getTab().getDefaultIndex(); + return i - i1; + } + }); + setStateIsBeingRestored(true, this); try { for (RunnerContentUi child : children) { @@ -996,7 +1032,6 @@ public class RunnerContentUi implements ContentUI, Disposable, CellTransform.Fac for (Content each : all) { myManager.addContent(each); } - restoreLastUiState(); updateTabsUI(true); } diff --git a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java index b336d791e504..2f6dbc88635c 100644 --- a/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java +++ b/platform/lang-impl/src/com/intellij/execution/ui/layout/impl/RunnerLayout.java @@ -55,6 +55,12 @@ public class RunnerLayout { public RunnerLayout(final String ID) { myID = ID; } + + @Nullable + public String getDefaultDisplayName(final int defaultIndex) { + final TabImpl.Default tab = myDefaultTabs.get(defaultIndex); + return tab != null ? tab.myDisplayName : null; + } @NotNull public TabImpl getOrCreateTab(final int index) { @@ -164,11 +170,7 @@ public class RunnerLayout { public void resetToDefault() { myViews.clear(); - - for (TabImpl each : myTabs) { - final TabImpl.Default defaultTab = getOrCreateDefaultTab(each.getDefaultIndex()); - each.copyFrom(defaultTab); - } + myTabs.clear(); } public boolean isToolbarHorizontal() { diff --git a/platform/lang-impl/src/com/intellij/facet/impl/FacetUtil.java b/platform/lang-impl/src/com/intellij/facet/impl/FacetUtil.java index 98ee7e32af01..ea11e8f0d286 100644 --- a/platform/lang-impl/src/com/intellij/facet/impl/FacetUtil.java +++ b/platform/lang-impl/src/com/intellij/facet/impl/FacetUtil.java @@ -17,9 +17,11 @@ package com.intellij.facet.impl; import com.intellij.facet.*; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.Result; import com.intellij.openapi.application.WriteAction; import com.intellij.openapi.components.PersistentStateComponent; +import com.intellij.openapi.module.Module; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.util.ReflectionUtil; @@ -36,7 +38,21 @@ import java.util.Arrays; * @author nik */ public class FacetUtil { - private FacetUtil() { + + public static F addFacet(Module module, FacetType type) { + final ModifiableFacetModel model = FacetManager.getInstance(module).createModifiableModel(); + final F facet = createFacet(module, type); + ApplicationManager.getApplication().runWriteAction(new Runnable() { + public void run() { + model.addFacet(facet); + model.commit(); + } + }); + return facet; + } + + private static F createFacet(final Module module, final FacetType type) { + return FacetManager.getInstance(module).createFacet(type, type.getPresentableName(), type.createDefaultConfiguration(), null); } public static void deleteFacet(final Facet facet) { diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFileSystem.java b/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFileSystem.java index d0ebd6f159fb..f2ba97153912 100644 --- a/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFileSystem.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFileSystem.java @@ -23,6 +23,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileListener; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.VirtualFileSystem; +import org.intellij.lang.annotations.MagicConstant; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -103,4 +104,48 @@ public abstract class NewVirtualFileSystem extends VirtualFileSystem implements public String getCanonicallyCasedName(@NotNull VirtualFile file) { return file.getName(); } + + public static final int BA_EXISTS = 0x01; + public static final int BA_REGULAR = 0x02; + public static final int BA_DIRECTORY = 0x04; + public static final int BA_HIDDEN = 0x08; + + @MagicConstant(flags = {BA_EXISTS, BA_REGULAR, BA_DIRECTORY, BA_HIDDEN}) + public @interface FileBooleanAttributes {} + + /** + * Queries the file about several attributes at once, and returns them ORed together. + * This method is typically faster than several methods calls querying corresponding file attributes one by one. + * + * @param file to query. + * @param flags Attributes to query the file for. + * Each attribute is an int constant from this class. + * Following attributes are defined: + *
    + *
  • {@link #BA_EXISTS} is set if {@link java.io.File#exists()} returns true
  • + *
  • {@link #BA_DIRECTORY} is set if {@link java.io.File#isDirectory()} returns true
  • + *
  • {@link #BA_HIDDEN} is set if {@link java.io.File#isHidden()} returns true
  • + *
  • {@link #BA_REGULAR} is set if {@link java.io.File#isFile()} returns true
  • + *
+ * Attributes can be bitwise ORed together to query several file attributes at once. + * -1 as an argument value will query all attributes. + * @return Attributes mask for the file, where the bit is set if the corresponding attribute for the file is true. + * That is, the return value is
{@code
+   *           (file.exists() ? BA_EXISTS : 0) |
+   *           (file.isDirectory()() ? BA_DIRECTORY : 0) |
+   *           (file.isRegular()() ? BA_REGULAR : 0) |
+   *           (file.isHidden()() ? BA_HIDDEN : 0)
+   *           }
+ * Except that the bit in the return value is undefined if the corresponding bit in the flags parameter is not set. + *

+ * Example usage: + *

{@code
+   *  int attributes = getBooleanAttributes(file, BA_EXISTS | BA_DIRECTORY);
+   *  if ((attributes & BA_EXISTS) != 0) {
+   *    // file exists
+   *    boolean isDirectory = (attributes & BA_DIRECTORY) != 0;
+   *  }}
+ */ + @FileBooleanAttributes + public abstract int getBooleanAttributes(@NotNull final VirtualFile file, @FileBooleanAttributes int flags); } diff --git a/platform/platform-api/src/com/intellij/ui/MouseDragHelper.java b/platform/platform-api/src/com/intellij/ui/MouseDragHelper.java index 6dc032fe5a49..49f2dc3eba38 100644 --- a/platform/platform-api/src/com/intellij/ui/MouseDragHelper.java +++ b/platform/platform-api/src/com/intellij/ui/MouseDragHelper.java @@ -45,6 +45,7 @@ public abstract class MouseDragHelper implements MouseListener, MouseMotionListe private final Disposable myParentDisposable; private Dimension myDelta; + private boolean myDetachPostponed; private boolean myDetachingMode; public MouseDragHelper(Disposable parent, final JComponent dragComponent) { @@ -62,7 +63,7 @@ public abstract class MouseDragHelper implements MouseListener, MouseMotionListe } public void hideNotify() { - detach(); + detach(true); } }); @@ -74,16 +75,24 @@ public abstract class MouseDragHelper implements MouseListener, MouseMotionListe } private void attach() { + if (myDetachPostponed) { + myDetachPostponed = false; + return; + } myGlassPane = IdeGlassPaneUtil.find(myDragComponent); myGlassPane.addMousePreprocessor(this, myParentDisposable); myGlassPane.addMouseMotionPreprocessor(this, myParentDisposable); } public void stop() { - detach(); + detach(false); } - private void detach() { + private void detach(boolean canPostponeDetach) { + if (canPostponeDetach && myDraggingNow) { + myDetachPostponed = true; + return; + } if (myGlassPane != null) { myGlassPane.removeMousePreprocessor(this); myGlassPane.removeMouseMotionPreprocessor(this); @@ -125,6 +134,10 @@ public abstract class MouseDragHelper implements MouseListener, MouseMotionListe myPressPointScreen = null; myDetachingMode = false; e.consume(); + if (myDetachPostponed) { + myDetachPostponed = false; + detach(false); + } } } } diff --git a/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java b/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java index 25fb02896813..88e6365ed38a 100644 --- a/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java +++ b/platform/platform-api/src/com/intellij/ui/docking/DockContainer.java @@ -51,6 +51,8 @@ public interface DockContainer extends Disposable, Activatable { boolean isDisposeWhenEmpty(); + interface Dialog extends DockContainer {} + interface Persistent extends DockContainer { String getDockContainerType(); diff --git a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java index a360e8af39ab..b26bca42d27d 100644 --- a/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java +++ b/platform/platform-api/src/com/intellij/ui/tabs/impl/JBTabsImpl.java @@ -165,6 +165,7 @@ public class JBTabsImpl extends JComponent private SwitchProvider mySwitchDelegate; protected TabInfo myDropInfo; private int myDropInfoIndex; + protected boolean myShowDropLocation = true; private TabInfo myOldSelection; private SelectionChangeHandler mySelectionChangeHandler; @@ -1350,7 +1351,7 @@ public class JBTabsImpl extends JComponent List visible = new ArrayList(); visible.addAll(myVisibleInfos); - if (myDropInfo != null && !visible.contains(myDropInfo)) { + if (myDropInfo != null && !visible.contains(myDropInfo) && myShowDropLocation) { if (getDropInfoIndex() >= 0 && getDropInfoIndex() < visible.size()) { visible.add(getDropInfoIndex(), myDropInfo); } else { @@ -3187,6 +3188,7 @@ public class JBTabsImpl extends JComponent if (myDropInfo != null) { TabInfo dropInfo = myDropInfo; myDropInfo = null; + myShowDropLocation = true; setDropInfoIndex(-1); removeTab(dropInfo, null, false, true); } diff --git a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java index 88e5bf57d91c..b88935f46efc 100644 --- a/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/application/impl/ApplicationImpl.java @@ -1118,28 +1118,29 @@ public class ApplicationImpl extends ComponentManagerImpl implements Application fireBeforeWriteActionStart(_clazz); final AtomicBoolean stopped = new AtomicBoolean(false); - if (ourDumpThreadsOnLongWriteActionWaiting > 0) { - executeOnPooledThread(new Runnable() { - @Override - public void run() { - while (!stopped.get()) { - try { - Thread.sleep(ourDumpThreadsOnLongWriteActionWaiting); - if (!stopped.get()) { - PerformanceWatcher.getInstance().dumpThreads(true); - } - } - catch (InterruptedException ignored) { - } - } - } - }); - } - LOG.assertTrue(myActionsLock.isWriteLockAcquired(Thread.currentThread()) || !Thread.holdsLock(PsiLock.LOCK), "Thread must not hold PsiLock while performing writeAction"); try { - myActionsLock.writeLock().acquire(); + if (!myActionsLock.writeLock().attempt(0)) { + if (ourDumpThreadsOnLongWriteActionWaiting > 0) { + executeOnPooledThread(new Runnable() { + @Override + public void run() { + while (!stopped.get()) { + try { + Thread.sleep(ourDumpThreadsOnLongWriteActionWaiting); + if (!stopped.get()) { + PerformanceWatcher.getInstance().dumpThreads(true); + } + } + catch (InterruptedException ignored) { + } + } + } + }); + } + myActionsLock.writeLock().acquire(); + } acquired(); } catch (InterruptedException e) { diff --git a/platform/platform-impl/src/com/intellij/openapi/ui/FrameWrapper.java b/platform/platform-impl/src/com/intellij/openapi/ui/FrameWrapper.java index f45e1bcd8aa2..742340f74fc1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/ui/FrameWrapper.java +++ b/platform/platform-impl/src/com/intellij/openapi/ui/FrameWrapper.java @@ -57,7 +57,7 @@ public class FrameWrapper implements Disposable, DataProvider { private String myTitle = ""; private Image myImage = ImageLoader.loadFromResource(ApplicationInfoImpl.getShadowInstance().getIconUrl()); private boolean myCloseOnEsc = false; - private JFrame myFrame; + private Window myFrame; private final Map myDatas = new HashMap(); private Project myProject; private final ProjectManagerListener myProjectListener = new MyProjectManagerListener(); @@ -69,14 +69,20 @@ public class FrameWrapper implements Disposable, DataProvider { protected StatusBar myStatusBar; private boolean myShown; + private boolean myIsDialog; public FrameWrapper(Project project) { this(project, null); } public FrameWrapper(Project project, @Nullable @NonNls String dimensionServiceKey) { + this(project, dimensionServiceKey, false); + } + + public FrameWrapper(Project project, @Nullable @NonNls String dimensionServiceKey, boolean isDialog) { myProject = project; myDimensionKey = dimensionServiceKey; + myIsDialog = isDialog; } public void setDimensionKey(String dimensionKey) { @@ -110,7 +116,7 @@ public class FrameWrapper implements Disposable, DataProvider { IdeFocusManager.getInstance(myProject).typeAheadUntil(myFocusedCallback); } - final JFrame frame = getFrame(); + final Window frame = getFrame(); if (myStatusBar != null) { myStatusBar.install((IdeFrame)frame); @@ -118,7 +124,11 @@ public class FrameWrapper implements Disposable, DataProvider { myFocusTrackback = new FocusTrackback(this, IdeFocusManager.findInstance().getFocusOwner(), true); - frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + if (frame instanceof JFrame) { + ((JFrame)frame).setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + } else { + ((JDialog)frame).setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + } WindowAdapter focusListener = new WindowAdapter() { public void windowOpened(WindowEvent e) { IdeFocusManager fm = IdeFocusManager.getInstance(myProject); @@ -135,9 +145,13 @@ public class FrameWrapper implements Disposable, DataProvider { } }; frame.addWindowListener(focusListener); - if (myCloseOnEsc) addCloseOnEsc(frame); - frame.getContentPane().add(myComponent, BorderLayout.CENTER); - frame.setTitle(myTitle); + if (myCloseOnEsc) addCloseOnEsc((RootPaneContainer)frame); + ((RootPaneContainer)frame).getContentPane().add(myComponent, BorderLayout.CENTER); + if (frame instanceof JFrame) { + ((JFrame)frame).setTitle(myTitle); + } else { + ((JDialog)frame).setTitle(myTitle); + } frame.setIconImage(myImage); if (restoreBounds) { @@ -153,9 +167,9 @@ public class FrameWrapper implements Disposable, DataProvider { myShown = true; frame.setVisible(true); - if (UIUtil.isUnderAlloyLookAndFeel()) { + if (UIUtil.isUnderAlloyLookAndFeel() && frame instanceof JFrame) { //please ask [kb] before remove it - frame.setMaximizedBounds(null); + ((JFrame)frame).setMaximizedBounds(null); } } @@ -166,11 +180,13 @@ public class FrameWrapper implements Disposable, DataProvider { public void dispose() { if (isDisposed()) return; - JFrame frame = getFrame(); + Window frame = getFrame(); frame.setVisible(false); frame.dispose(); - FocusTrackback.release(frame); + if (frame instanceof JFrame) { + FocusTrackback.release((JFrame)frame); + } if (myStatusBar != null) { Disposer.dispose(myStatusBar); @@ -184,7 +200,7 @@ public class FrameWrapper implements Disposable, DataProvider { return myDisposed; } - private void addCloseOnEsc(final JFrame frame) { + private void addCloseOnEsc(final RootPaneContainer frame) { frame.getRootPane().registerKeyboardAction( new ActionListener() { public void actionPerformed(ActionEvent e) { @@ -203,11 +219,12 @@ public class FrameWrapper implements Disposable, DataProvider { ); } - public JFrame getFrame() { + public Window getFrame() { assert !myDisposed : "Already disposed!"; if (myFrame == null) { - myFrame = createJFrame(WindowManager.getInstance().getIdeFrame(myProject)); + final IdeFrame parent = WindowManager.getInstance().getIdeFrame(myProject); + myFrame = myIsDialog ? createJDialog(parent) : createJFrame(parent); } return myFrame; } @@ -221,6 +238,10 @@ public class FrameWrapper implements Disposable, DataProvider { }; } + protected JDialog createJDialog(IdeFrame parent) { + return new MyJDialog(parent); + } + protected IdeRootPaneNorthExtension getNorthExtension(String key) { return null; } @@ -247,7 +268,7 @@ public class FrameWrapper implements Disposable, DataProvider { } protected void loadFrameState() { - final JFrame frame = getFrame(); + final Window frame = getFrame(); final Point location; final Dimension size; final int extendedState; @@ -266,24 +287,26 @@ public class FrameWrapper implements Disposable, DataProvider { if (size != null && location != null) { frame.setLocation(location); frame.setSize(size); - frame.getRootPane().revalidate(); + ((RootPaneContainer)frame).getRootPane().revalidate(); } else { frame.pack(); frame.setBounds(WindowManagerEx.getInstanceEx().getIdeFrame(myProject).suggestChildFrameBounds()); } - if (extendedState == Frame.ICONIFIED || extendedState == Frame.MAXIMIZED_BOTH) { - frame.setExtendedState(extendedState); + if (extendedState == Frame.ICONIFIED || extendedState == Frame.MAXIMIZED_BOTH && frame instanceof JFrame) { + ((JFrame)frame).setExtendedState(extendedState); } } - private static void saveFrameState(String dimensionKey, JFrame frame) { + private static void saveFrameState(String dimensionKey, Component frame) { DimensionService dimensionService = DimensionService.getInstance(); if (dimensionKey == null || dimensionService == null) return; dimensionService.setLocation(dimensionKey, frame.getLocation()); dimensionService.setSize(dimensionKey, frame.getSize()); - dimensionService.setExtendedState(dimensionKey, frame.getExtendedState()); + if (frame instanceof JFrame) { + dimensionService.setExtendedState(dimensionKey, ((JFrame)frame).getExtendedState()); + } } public void setTitle(String title) { @@ -413,6 +436,104 @@ public class FrameWrapper implements Disposable, DataProvider { } } + private class MyJDialog extends JDialog implements DataProvider, IdeFrame.Child { + + private boolean myDisposing; + private final IdeFrame myParent; + + private MyJDialog(IdeFrame parent) throws HeadlessException { + super((JFrame)parent); + myParent = parent; + setGlassPane(new IdeGlassPaneImpl(getRootPane())); + + MouseGestureManager.getInstance().add(this); + setFocusTraversalPolicy(new LayoutFocusTraversalPolicyExt()); + } + + @Override + public JComponent getComponent() { + return getRootPane(); + } + + @Override + public StatusBar getStatusBar() { + return null; + } + + @Override + public Rectangle suggestChildFrameBounds() { + return myParent.suggestChildFrameBounds(); + } + + @Override + public Project getProject() { + return myParent.getProject(); + } + + @Override + public void setFrameTitle(String title) { + setTitle(title); + } + + @Override + public void setFileTitle(String fileTitle, File ioFile) { + setTitle(fileTitle); + } + + @Override + public IdeRootPaneNorthExtension getNorthExtension(String key) { + return null; + } + + @Override + public IdeFrame getParentFrame() { + return myParent; + } + + public void dispose() { + if (myDisposing) return; + myDisposing = true; + + MouseGestureManager.getInstance().remove(this); + + if (myShown) { + saveFrameState(myDimensionKey, this); + } + + Disposer.dispose(FrameWrapper.this); + myDatas.clear(); + myProject = null; + myPreferedFocus = null; + + if (myFocusTrackback != null) { + myFocusTrackback.restoreFocus(); + } + if (myComponent != null && myFocusWatcher != null) { + myFocusWatcher.deinstall(myComponent); + } + myFocusWatcher = null; + myFocusedCallback = null; + + super.dispose(); + } + + public Object getData(String dataId) { + if (IdeFrame.KEY.getName().equals(dataId)) { + return this; + } + + Object data = FrameWrapper.this.getData(dataId); + return data != null ? data : myDatas.get(dataId); + } + + @Override + public void paint(Graphics g) { + UIUtil.applyRenderingHints(g); + super.paint(g); + } + } + + public void setLocation(Point location) { getFrame().setLocation(location); } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/ex/temp/TempFileSystem.java b/platform/platform-impl/src/com/intellij/openapi/vfs/ex/temp/TempFileSystem.java index b2688f67df36..7f35b77eba8c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/ex/temp/TempFileSystem.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/ex/temp/TempFileSystem.java @@ -270,7 +270,7 @@ public class TempFileSystem extends NewVirtualFileSystem { } } - private static abstract class FSItem { + private abstract static class FSItem { private final FSDir myParent; private String myName; private long myTimestamp; @@ -365,4 +365,13 @@ public class TempFileSystem extends NewVirtualFileSystem { return false; } } + + @Override + public int getBooleanAttributes(@NotNull VirtualFile file, int flags) { + FSItem item = convert(file); + int isDir = item instanceof FSDir ? BA_DIRECTORY : 0; + int exists = item == null ? 0 : BA_EXISTS; + int regular = isDir == 0 ? BA_REGULAR : 0; + return isDir | exists | regular; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java index 66d5eb272da9..abaac61050f4 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/jar/JarFileSystemImpl.java @@ -365,4 +365,22 @@ public class JarFileSystemImpl extends JarFileSystem implements ApplicationCompo public VirtualFile refreshAndFindFileByPath(@NotNull String path) { return VfsImplUtil.refreshAndFindFileByPath(this, path); } + + @Override + public int getBooleanAttributes(@NotNull VirtualFile file, int flags) { + int exists = 0; + JarHandler handler = getHandler(file); + if ((flags & BA_EXISTS) != 0) { + exists = handler.exists(file) ? BA_EXISTS : 0; + } + int isDir = 0; + if ((flags & BA_DIRECTORY) != 0) { + isDir = handler.isDirectory(file) ? BA_DIRECTORY : 0; + } + int regular = 0; + if ((flags & BA_REGULAR) != 0) { + regular = isDir == 0 ? BA_REGULAR : 0; + } + return exists | isDir | regular; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java index 915ca59e82b8..f727a8e7278f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/local/LocalFileSystemBase.java @@ -25,10 +25,7 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.*; import com.intellij.openapi.vfs.ex.VirtualFileManagerEx; -import com.intellij.openapi.vfs.newvfs.ManagingFS; -import com.intellij.openapi.vfs.newvfs.NewVirtualFile; -import com.intellij.openapi.vfs.newvfs.RefreshQueue; -import com.intellij.openapi.vfs.newvfs.VfsImplUtil; +import com.intellij.openapi.vfs.newvfs.*; import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile; import com.intellij.util.ArrayUtil; import com.intellij.util.Processor; @@ -140,10 +137,6 @@ public abstract class LocalFileSystemBase extends LocalFileSystem { private static final Method JAVA_IO_FILESYSTEM_GET_BOOLEAN_ATTRIBUTES_METHOD; private static final Object/* java.io.FileSystem */ JAVA_IO_FILESYSTEM; // copied from FileSystem - private static final int BA_EXISTS = 0x01; - private static final int BA_REGULAR = 0x02; - private static final int BA_DIRECTORY = 0x04; - private static final int BA_HIDDEN = 0x08; static { Object fs; @@ -170,6 +163,8 @@ public abstract class LocalFileSystemBase extends LocalFileSystem { JAVA_IO_FILESYSTEM_GET_BOOLEAN_ATTRIBUTES_METHOD = getBooleanAttributes; } + + @NotNull private static File convertToIOFileAndCheck(@NotNull final VirtualFile file) throws FileNotFoundException { final File ioFile = convertToIOFile(file); @@ -769,6 +764,17 @@ public abstract class LocalFileSystemBase extends LocalFileSystem { } } + @Override + public int getBooleanAttributes(@NotNull VirtualFile file, int flags) { + int attributes = getBooleanAttributes(convertToIOFile(file)); + if (attributes != -1) return attributes & flags; + return ((flags & BA_EXISTS) != 0 && exists(file) ? BA_EXISTS : 0) | + ((flags & BA_DIRECTORY) != 0 && isDirectory(file) ? BA_DIRECTORY : 0) | + ((flags & BA_REGULAR) != 0 && !isSpecialFile(file) ? BA_REGULAR : 0) | + ((flags & BA_HIDDEN) != 0 && convertToIOFile(file).isHidden() ? BA_HIDDEN : 0) + ; + } + @Override public void refresh(final boolean asynchronous) { RefreshQueue.getInstance().refresh(asynchronous, true, null, ManagingFS.getInstance().getRoots(this)); diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/FileInfo.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/FileInfo.java index ea85f580259f..52cdc416ac7f 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/FileInfo.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/FileInfo.java @@ -15,23 +15,28 @@ */ package com.intellij.openapi.vfs.impl.win32; +import org.intellij.lang.annotations.MagicConstant; + /** * @author Dmitry Avdeev */ public class FileInfo { - static { - initIDs(); - } + static { + initIDs(); + } - private static native void initIDs(); - - public String name; - public int attributes; - public long timestamp; - public long length; + private static native void initIDs(); - public String toString() { - return name; - } + public String name; + + @MagicConstant(flagsFromClass = Win32Kernel.class) + public int attributes; + + public long timestamp; + public long length; + + public String toString() { + return name; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java index c7fe8b9b2706..18450eb9ea6c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32Kernel.java @@ -15,7 +15,10 @@ */ package com.intellij.openapi.vfs.impl.win32; +import com.intellij.openapi.vfs.newvfs.NewVirtualFileSystem; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.FileNotFoundException; import java.util.ArrayList; @@ -27,7 +30,10 @@ import java.util.Map; */ public class Win32Kernel { public static final int FILE_ATTRIBUTE_READONLY = 0x0001; + public static final int FILE_ATTRIBUTE_HIDDEN = 0x0002; public static final int FILE_ATTRIBUTE_DIRECTORY = 0x0010; + public static final int FILE_ATTRIBUTE_DEVICE = 0x0040; + public static final int FILE_ATTRIBUTE_REPARSE_POINT = 0x0400; private final IdeaWin32 myKernel = new IdeaWin32(); @@ -43,13 +49,12 @@ public class Win32Kernel { return ArrayUtil.EMPTY_STRING_ARRAY; } ArrayList names = new ArrayList(fileInfos.length); - for (int i = 0, fileInfosLength = fileInfos.length; i < fileInfosLength; i++) { - FileInfo info = fileInfos[i]; + for (FileInfo info : fileInfos) { if (info.name.equals(".")) { myCache.put(absolutePath, info); continue; } - else if (info.name.equals("..")) { + if (info.name.equals("..")) { continue; } myCache.put(absolutePath + "/" + info.name, info); @@ -59,8 +64,8 @@ public class Win32Kernel { return ArrayUtil.toStringArray(names); } - public void exists(String path) throws FileNotFoundException { - getInfo(path); + public boolean exists(String path) { + return doGetInfo(path) != null; } public boolean isDirectory(String path) throws FileNotFoundException { @@ -84,14 +89,42 @@ public class Win32Kernel { } private FileInfo getInfo(String path) throws FileNotFoundException { + FileInfo info = doGetInfo(path); + if (info == null) { + throw new FileNotFoundException(path); + } + return info; + } + + @Nullable + private FileInfo doGetInfo(String path) { FileInfo info = myCache.get(path); if (info == null) { info = myKernel.getInfo(path.replace('/', '\\')); if (info == null) { - throw new FileNotFoundException(path); + return null; } myCache.put(path, info); } return info; } + + @NewVirtualFileSystem.FileBooleanAttributes + public int getBooleanAttributes(@NotNull String path, @NewVirtualFileSystem.FileBooleanAttributes int flags) { + FileInfo info = doGetInfo(path); + int result = 0; + if ((flags & NewVirtualFileSystem.BA_EXISTS) != 0) { + result |= info == null ? 0 : NewVirtualFileSystem.BA_EXISTS; + } + if ((flags & NewVirtualFileSystem.BA_DIRECTORY) != 0) { + result |= info == null || (info.attributes & FILE_ATTRIBUTE_DIRECTORY) == 0 ? 0 : NewVirtualFileSystem.BA_DIRECTORY; + } + if ((flags & NewVirtualFileSystem.BA_REGULAR) != 0) { + result |= info == null || (info.attributes & (FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE | FILE_ATTRIBUTE_REPARSE_POINT)) != 0 ? 0 : NewVirtualFileSystem.BA_REGULAR; + } + if ((flags & NewVirtualFileSystem.BA_HIDDEN) != 0) { + result |= info == null || (info.attributes & FILE_ATTRIBUTE_HIDDEN) == 0 ? 0 : NewVirtualFileSystem.BA_HIDDEN; + } + return result; + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32LocalFileSystem.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32LocalFileSystem.java index 126b8505ebe4..c69ca7f5379c 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32LocalFileSystem.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/win32/Win32LocalFileSystem.java @@ -33,33 +33,34 @@ import java.util.Set; public class Win32LocalFileSystem extends LocalFileSystemBase { private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.vfs.impl.win32.Win32LocalFileSystem"); - private static boolean ourIsAvailable; + private static final boolean ourIsAvailable; static { + boolean available = false; if (SystemInfo.isWindows) { String libName = SystemInfo.is64Bit ? "IdeaWin64" : "IdeaWin32"; try { System.load(PathManager.getHomePath() + "/community/bin/win/" + libName + ".dll"); - ourIsAvailable = true; + available = true; } catch (Throwable t0) { try { System.load(PathManager.getHomePath() + "/bin/win/" + libName + ".dll"); - ourIsAvailable = true; + available = true; } catch (Throwable t1) { try { System.loadLibrary(libName); - ourIsAvailable = true; + available = true; } catch (Throwable t2) { LOG.warn("Failed to load native filesystem for Windows", t2); - ourIsAvailable = false; } } } } - if (ourIsAvailable) { + ourIsAvailable = available; + if (available) { LOG.info("Native filesystem for Windows is operational"); } } @@ -108,16 +109,11 @@ public class Win32LocalFileSystem extends LocalFileSystemBase { @Override public boolean exists(@NotNull VirtualFile fileOrDirectory) { if (fileOrDirectory.getParent() == null) return true; - try { - myKernel.exists(fileOrDirectory.getPath()); - if (checkMe && !super.exists(fileOrDirectory)) { - LOG.error(fileOrDirectory.getPath()); - } - return true; - } - catch (FileNotFoundException e) { - return super.exists(fileOrDirectory); + boolean b = myKernel.exists(fileOrDirectory.getPath()); + if (checkMe && b != super.exists(fileOrDirectory)) { + LOG.error(fileOrDirectory.getPath()); } + return b; } @Override @@ -196,4 +192,9 @@ public class Win32LocalFileSystem extends LocalFileSystemBase { public void removeWatchedRoot(@NotNull WatchRequest watchRequest) { throw new UnsupportedOperationException(); } + + @Override + public int getBooleanAttributes(@NotNull VirtualFile file, int flags) { + return myKernel.getBooleanAttributes(file.getPath(), flags); + } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java index 4e8508153bed..6ff87f199cb1 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualDirectoryImpl.java @@ -42,6 +42,7 @@ import com.intellij.openapi.vfs.newvfs.events.VFileCreateEvent; import com.intellij.openapi.vfs.newvfs.persistent.PersistentFS; import com.intellij.util.ArrayUtil; import com.intellij.util.PathUtil; +import com.intellij.util.SmartList; import com.intellij.util.SystemProperties; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.CaseInsensitiveStringHashingStrategy; @@ -312,14 +313,15 @@ public class VirtualDirectoryImpl extends VirtualFileSystemEntry { return VfsUtil.toVirtualFileArray(roots); } - @Nullable private VirtualFileSystemEntry createAndFindChildWithEventFire(@NotNull String name) { final NewVirtualFileSystem delegate = getFileSystem(); VirtualFile fake = new FakeVirtualFile(this, name); - if (delegate.exists(fake)) { + int attributes = delegate.getBooleanAttributes(fake, NewVirtualFileSystem.BA_EXISTS | NewVirtualFileSystem.BA_DIRECTORY); + if ((attributes & NewVirtualFileSystem.BA_EXISTS) != 0) { final String realName = delegate.getCanonicallyCasedName(fake); - VFileCreateEvent event = new VFileCreateEvent(null, this, realName, delegate.isDirectory(fake), true); + boolean isDir = (attributes & NewVirtualFileSystem.BA_DIRECTORY) != 0; + VFileCreateEvent event = new VFileCreateEvent(null, this, realName, isDir, true); RefreshQueue.getInstance().processSingleEvent(event); return findChild(realName); } @@ -526,14 +528,16 @@ public class VirtualDirectoryImpl extends VirtualFileSystemEntry { final Map map = asMap(); if (map == null) return Collections.emptyList(); - List names = new ArrayList(); + List names = null; + for (Map.Entry entry : map.entrySet()) { if (entry.getValue() == NULL_VIRTUAL_FILE) { + if (names == null) names = new SmartList(); names.add(entry.getKey()); } } - return names; + return names == null ? Collections.emptyList() : names; } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java index 9a2de59babeb..0d387162d9fc 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/PersistentFS.java @@ -48,6 +48,7 @@ import gnu.trove.TIntObjectHashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import org.jetbrains.annotations.TestOnly; import java.io.*; import java.util.*; @@ -189,7 +190,8 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { childrenIds[i] = currentIds[idx]; } else { - int childId = createAndCopyRecord(delegate, new FakeVirtualFile(file, name), id); + FakeVirtualFile child = new FakeVirtualFile(file, name); + int childId = createAndCopyRecord(delegate, child, id, delegate.isDirectory(child)); childrenIds[i] = childId; } } @@ -283,12 +285,16 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { return FSRecords.getModCount(); } - private static boolean copyRecordFromDelegateFS(final int id, final int parentId, final VirtualFile file, NewVirtualFileSystem delegate) { + private static boolean copyRecordFromDelegateFS(final int id, + final int parentId, + final VirtualFile file, + NewVirtualFileSystem delegate, + boolean isDir) { String name = file.getName(); - if (name.length() > 0 && namesEqual(delegate, name, FSRecords.getName(id))) return false; // TODO: Handle root attributes change. + if (!name.isEmpty() && namesEqual(delegate, name, FSRecords.getName(id))) return false; // TODO: Handle root attributes change. - if (name.length() == 0) { // TODO: hack + if (name.isEmpty()) { // TODO: hack if (areChildrenLoaded(id)) return false; } @@ -299,11 +305,9 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { FSRecords.setTimestamp(id, delegate.getTimeStamp(file)); - boolean directory = delegate.isDirectory(file); + FSRecords.setLength(id, isDir ? -1L : delegate.getLength(file)); - FSRecords.setLength(id, directory ? -1L : delegate.getLength(file)); - - FSRecords.setFlags(id, (directory ? IS_DIRECTORY_FLAG : 0) | + FSRecords.setFlags(id, (isDir ? IS_DIRECTORY_FLAG : 0) | (delegate.isWritable(file) ? 0 : IS_READ_ONLY) | (delegate.isSymLink(file) ? IS_SYMLINK : 0) | (delegate.isSpecialFile(file) ? IS_SPECIAL : 0), true); @@ -398,8 +402,10 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { } VirtualFile fake = new FakeVirtualFile(parent, childName); - if (delegate.exists(fake)) { - int child = createAndCopyRecord(delegate, fake, parentId); + int attributes = delegate.getBooleanAttributes(fake, NewVirtualFileSystem.BA_EXISTS | NewVirtualFileSystem.BA_DIRECTORY); + if ((attributes & NewVirtualFileSystem.BA_EXISTS) != 0) { + boolean isDir = (attributes & NewVirtualFileSystem.BA_DIRECTORY) != 0; + int child = createAndCopyRecord(delegate, fake, parentId, isDir); FSRecords.updateList(parentId, ArrayUtil.append(children, child)); return child; } @@ -722,13 +728,13 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { synchronized (LOCK) { final String rootUrl = fs.getProtocol() + "://" + basePath; VirtualFileSystemEntry root = myRoots.get(rootUrl); - if (root == null && basePath.length() == 0) { + if (root == null && basePath.isEmpty()) { root = myFakeRoot; } if (root == null) { try { final int rootId = FSRecords.findRootRecord(rootUrl); - if (basePath.length() > 0) { + if (!basePath.isEmpty()) { root = new VirtualDirectoryImpl(basePath, null, fs, rootId) { @NotNull @Override @@ -756,14 +762,14 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { @Override public VirtualFileSystemEntry findChild(@NotNull String name) { - if (name.length() == 0) return null; + if (name.isEmpty()) return null; return findRoot(name, fs); } }; } if (!fs.exists(root)) return null; - boolean newRoot = copyRecordFromDelegateFS(rootId, 0, root, fs); + boolean newRoot = copyRecordFromDelegateFS(rootId, 0, root, fs, true); if (!newRoot) { if (fs.getTimeStamp(root) != FSRecords.getTimestamp(rootId)) { root.markDirtyRecursively(); @@ -774,7 +780,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { throw new RuntimeException(e); } - if (basePath.length() > 0) { + if (!basePath.isEmpty()) { myRoots.put(rootUrl, root); myRootsById.put(root.getId(), root); } @@ -949,10 +955,12 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { private static void executeCreateChild(final VirtualFile parent, final String name) { final NewVirtualFileSystem delegate = getDelegate(parent); - VirtualFile fakeFile = new FakeVirtualFile(parent, name); - if (delegate.exists(fakeFile)) { + VirtualFile fake = new FakeVirtualFile(parent, name); + int attributes = delegate.getBooleanAttributes(fake, NewVirtualFileSystem.BA_EXISTS | NewVirtualFileSystem.BA_DIRECTORY); + if ((attributes & NewVirtualFileSystem.BA_EXISTS) != 0) { final int parentId = getFileId(parent); - int childId = createAndCopyRecord(delegate, fakeFile, parentId); + boolean isDir = (attributes & NewVirtualFileSystem.BA_DIRECTORY) != 0; + int childId = createAndCopyRecord(delegate, fake, parentId, isDir); appendIdToParentList(parentId, childId); final VirtualDirectoryImpl dir = (VirtualDirectoryImpl)parent; @@ -960,9 +968,9 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { } } - private static int createAndCopyRecord(NewVirtualFileSystem delegateSystem, VirtualFile delegateFile, int parentId) { + private static int createAndCopyRecord(NewVirtualFileSystem delegateSystem, VirtualFile delegateFile, int parentId, boolean isDir) { int childId = FSRecords.createRecord(); - copyRecordFromDelegateFS(childId, parentId, delegateFile, delegateSystem); + copyRecordFromDelegateFS(childId, parentId, delegateFile, delegateSystem, isDir); return childId; } @@ -1067,7 +1075,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { FSRecords.setLength(getFileId(file), delegate.getLength(file)); FSRecords.setTimestamp(getFileId(file), delegate.getTimeStamp(file)); - ((NewVirtualFile)file).setModificationStamp(newModificationStamp); + ((VirtualFileSystemEntry)file).setModificationStamp(newModificationStamp); } @SuppressWarnings({"UnusedDeclaration"}) @@ -1092,6 +1100,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { return FSRecords.getName(id); } + @TestOnly public void cleanPersistedContents() { try { final int[] roots = FSRecords.listRoots(); @@ -1104,6 +1113,7 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { } } + @TestOnly private static void cleanPersistedContentsRecursively(int id) { if (isDirectory(id)) { for (int child : FSRecords.list(id)) { @@ -1116,11 +1126,12 @@ public class PersistentFS extends ManagingFS implements ApplicationComponent { } public static NewVirtualFileSystem replaceWithNativeFS(NewVirtualFileSystem delegate) { - if (delegate.getProtocol().equals(LocalFileSystem.PROTOCOL) && Registry.is("filesystem.useNative")) { - if (SystemInfo.isWindows && Win32LocalFileSystem.isAvailable()) { - delegate = Win32LocalFileSystem.getWin32Instance(); - } - } + if (delegate.getProtocol().equals(LocalFileSystem.PROTOCOL) && + Registry.is("filesystem.useNative") && + SystemInfo.isWindows && + Win32LocalFileSystem.isAvailable()) { + delegate = Win32LocalFileSystem.getWin32Instance(); + } return delegate; } } diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/RefreshWorker.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/RefreshWorker.java index 39f9da022ab9..9360c401f53d 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/RefreshWorker.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/persistent/RefreshWorker.java @@ -25,6 +25,7 @@ import com.intellij.openapi.vfs.newvfs.impl.FakeVirtualFile; import com.intellij.openapi.vfs.newvfs.impl.VirtualDirectoryImpl; import com.intellij.openapi.vfs.newvfs.impl.VirtualFileSystemEntry; import com.intellij.util.containers.Queue; +import org.jetbrains.annotations.NotNull; import java.util.*; @@ -47,12 +48,15 @@ public class RefreshWorker { public void scan() { final NewVirtualFile root = (NewVirtualFile)myRefreshRoot; NewVirtualFileSystem delegate = root.getFileSystem(); - if (root.isDirty() && !delegate.exists(root)) { + int attributes = delegate.getBooleanAttributes(root, NewVirtualFileSystem.BA_EXISTS | NewVirtualFileSystem.BA_DIRECTORY); + + if (root.isDirty() && (attributes & NewVirtualFileSystem.BA_EXISTS) == 0) { scheduleDeletion(root); root.markClean(); } else { - if (root.isDirectory()) { + boolean isDir = (attributes & NewVirtualFileSystem.BA_DIRECTORY) != 0; + if (isDir) { delegate = PersistentFS.replaceWithNativeFS(delegate); } @@ -86,14 +90,16 @@ public class RefreshWorker { for (VirtualFile child : file.getChildren()) { if (!deletedNames.contains(child.getName())) { - scheduleChildRefresh(file, child, delegate); + int childAttributes = delegate.getBooleanAttributes(child, -1); + scheduleChildRefresh(file, child, delegate, childAttributes); } } } else { for (VirtualFile child : file.getCachedChildren()) { - if (delegate.exists(child)) { - scheduleChildRefresh(file, child, delegate); + int childAttributes = delegate.getBooleanAttributes(child, -1); + if ((childAttributes & NewVirtualFileSystem.BA_EXISTS) != 0) { + scheduleChildRefresh(file, child, delegate, childAttributes); } else { scheduleDeletion(child); @@ -102,11 +108,13 @@ public class RefreshWorker { final List names = dir.getSuspiciousNames(); for (String name : names) { - if (name.length() == 0) continue; + if (name.isEmpty()) continue; final VirtualFile fake = new FakeVirtualFile(file, name); - if (delegate.exists(fake)) { - scheduleCreation(file, name, delegate.isDirectory(fake)); + int attrs = delegate.getBooleanAttributes(fake, NewVirtualFileSystem.BA_EXISTS | NewVirtualFileSystem.BA_DIRECTORY); + if ((attrs & NewVirtualFileSystem.BA_EXISTS) != 0) { + boolean isDira = (attrs & NewVirtualFileSystem.BA_DIRECTORY) != 0; + scheduleCreation(file, name, isDira); } } } @@ -132,13 +140,16 @@ public class RefreshWorker { } } - private void scheduleChildRefresh(final VirtualFileSystemEntry file, final VirtualFile child, final NewVirtualFileSystem delegate) { + private void scheduleChildRefresh(@NotNull VirtualFileSystemEntry file, + @NotNull VirtualFile child, + @NotNull NewVirtualFileSystem delegate, + @NewVirtualFileSystem.FileBooleanAttributes int childAttributes) { final boolean currentIsDirectory = child.isDirectory(); final boolean currentIsSymlink = child.isSymLink(); final boolean currentIsSpecial = child.isSpecialFile(); - final boolean upToDateIsDirectory = delegate.isDirectory(child); + final boolean upToDateIsDirectory = (childAttributes & NewVirtualFileSystem.BA_DIRECTORY) != 0; final boolean upToDateIsSymlink = delegate.isSymLink(child); - final boolean upToDateIsSpecial = delegate.isSpecialFile(child); + final boolean upToDateIsSpecial = (childAttributes & (NewVirtualFileSystem.BA_REGULAR | NewVirtualFileSystem.BA_DIRECTORY | NewVirtualFileSystem.BA_EXISTS)) == NewVirtualFileSystem.BA_EXISTS; if (currentIsDirectory != upToDateIsDirectory || currentIsSymlink != upToDateIsSymlink || currentIsSpecial != upToDateIsSpecial) { scheduleDeletion(child); scheduleReCreation(file, child.getName(), upToDateIsDirectory); diff --git a/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java b/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java index b490ba433f58..2329cd55ef6c 100644 --- a/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/ui/docking/impl/DockManagerImpl.java @@ -388,7 +388,7 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo private DockWindow createWindowFor(@Nullable String id, DockContainer container) { String windowId = id != null ? id : String.valueOf(myWindowIdCounter++); - DockWindow window = new DockWindow(windowId, myProject, container); + DockWindow window = new DockWindow(windowId, myProject, container, container instanceof DockContainer.Dialog); window.setDimensionKey("dock-window-" + windowId); myWindows.put(container, window); return window; @@ -405,13 +405,15 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo private NonOpaquePanel myUiContainer; private NonOpaquePanel myDockContentUiContainer; - private DockWindow(String id, Project project, DockContainer container) { - super(project); + private DockWindow(String id, Project project, DockContainer container, boolean dialog) { + super(project, null, dialog); myId = id; myContainer = container; setProject(project); - setStatusBar(WindowManager.getInstance().getStatusBar(project).createChild()); + if (!(container instanceof DockContainer.Dialog)) { + setStatusBar(WindowManager.getInstance().getStatusBar(project).createChild()); + } myUiContainer = new NonOpaquePanel(new BorderLayout()); @@ -428,7 +430,9 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo center.add(myDockContentUiContainer, BorderLayout.CENTER); myUiContainer.add(center, BorderLayout.CENTER); - myUiContainer.add(myStatusBar.getComponent(), BorderLayout.SOUTH); + if (!(container instanceof DockContainer.Dialog)) { + myUiContainer.add(myStatusBar.getComponent(), BorderLayout.SOUTH); + } setComponent(myUiContainer); addDisposable(container); @@ -480,7 +484,8 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo } private void updateNorthPanel() { - myNorthPanel.setVisible(UISettings.getInstance().SHOW_NAVIGATION_BAR); + myNorthPanel.setVisible(UISettings.getInstance().SHOW_NAVIGATION_BAR && + !(myContainer instanceof DockContainer.Dialog)); IdeRootPaneNorthExtension[] extensions = Extensions.getArea(myProject).getExtensionPoint(IdeRootPaneNorthExtension.EP_NAME).getExtensions(); HashSet processedKeys = new HashSet(); @@ -541,6 +546,20 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo @Override protected JFrame createJFrame(IdeFrame parent) { JFrame frame = super.createJFrame(parent); + installListeners(frame); + + return frame; + } + + @Override + protected JDialog createJDialog(IdeFrame parent) { + JDialog frame = super.createJDialog(parent); + installListeners(frame); + + return frame; + } + + private void installListeners(Window frame) { frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { @@ -548,9 +567,7 @@ public class DockManagerImpl extends DockManager implements PersistentStateCompo } }); - new UiNotifyConnector(frame.getContentPane(), myContainer); - - return frame; + new UiNotifyConnector(((RootPaneContainer)frame).getContentPane(), myContainer); } } diff --git a/platform/testFramework/src/com/intellij/mock/MockLocalFileSystem.java b/platform/testFramework/src/com/intellij/mock/MockLocalFileSystem.java index 4fb4e5937362..59be016ec53c 100644 --- a/platform/testFramework/src/com/intellij/mock/MockLocalFileSystem.java +++ b/platform/testFramework/src/com/intellij/mock/MockLocalFileSystem.java @@ -251,4 +251,9 @@ public class MockLocalFileSystem extends LocalFileSystem { public int getRank() { return 1; } + + @Override + public int getBooleanAttributes(@NotNull VirtualFile file, int flags) { + return 0; + } } diff --git a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java index d575d7df5019..867b6e25909f 100644 --- a/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java +++ b/platform/testFramework/src/com/intellij/testFramework/PlatformTestCase.java @@ -731,7 +731,7 @@ public abstract class PlatformTestCase extends UsefulTestCase implements DataPro initPlatformPrefix(IDEA_MARKER_CLASS, "PlatformLangXml"); } - protected static void initPlatformPrefix(String classToTest, String prefix) { + public static void initPlatformPrefix(String classToTest, String prefix) { if (!ourPlatformPrefixInitialized) { ourPlatformPrefixInitialized = true; boolean isUltimate = true; diff --git a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java index b6f0c73c7e35..1ffb73521134 100644 --- a/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java +++ b/platform/testFramework/src/com/intellij/testFramework/fixtures/impl/CodeInsightTestFixtureImpl.java @@ -496,7 +496,9 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig @Override @NotNull public List getAllQuickFixes(@NonNls final String... filePaths) { - configureByFilesInner(filePaths); + if (filePaths.length != 0) { + configureByFilesInner(filePaths); + } List infos = doHighlighting(); ArrayList actions = new ArrayList(); for (HighlightInfo info : infos) { @@ -1382,7 +1384,9 @@ public class CodeInsightTestFixtureImpl extends BaseFixture implements CodeInsig ensureIndexesUpToDate(project); DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(project); TextEditor textEditor = TextEditorProvider.getInstance().getTextEditor(editor); - return codeAnalyzer.runPasses(file, editor.getDocument(), textEditor, toIgnore, canChangeDocument, null); + List infos = codeAnalyzer.runPasses(file, editor.getDocument(), textEditor, toIgnore, canChangeDocument, null); + infos.addAll(DaemonCodeAnalyzerImpl.getFileLevelHighlights(project, file)); + return infos; } public static void ensureIndexesUpToDate(Project project) { diff --git a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java index 3ed50898fc01..c48b53e30bdc 100644 --- a/platform/util/src/com/intellij/openapi/util/io/FileUtil.java +++ b/platform/util/src/com/intellij/openapi/util/io/FileUtil.java @@ -41,7 +41,7 @@ import java.util.regex.Pattern; @SuppressWarnings({"UtilityClassWithoutPrivateConstructor"}) public class FileUtil { public static final int MEGABYTE = 1024 * 1024; - public static final String ASYNC_DELETE_EXTENSION = ".__del__"; + @NonNls public static final String ASYNC_DELETE_EXTENSION = ".__del__"; private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.util.io.FileUtil"); @@ -681,7 +681,7 @@ public class FileUtil { final int oldPermissions = FileSystemUtil.getPermissions(fromFile); final int newPermissions = FileSystemUtil.getPermissions(toFile); if (oldPermissions != -1 && newPermissions != -1) { - FileSystemUtil.setPermissions(toFile, (oldPermissions | newPermissions)); + FileSystemUtil.setPermissions(toFile, oldPermissions | newPermissions); } } } @@ -713,7 +713,7 @@ public class FileUtil { public static void copyDir(@NotNull File fromDir, @NotNull File toDir, boolean copySystemFiles) throws IOException { copyDir(fromDir, toDir, copySystemFiles ? null : new FileFilter() { public boolean accept(File file) { - return !file.getName().startsWith("."); + return !StringUtil.startsWithChar(file.getName(), '.'); } }); } @@ -939,7 +939,7 @@ public class FileUtil { final StringBuilder builder = new StringBuilder(antPattern.length()); int asteriskCount = 0; boolean recursive = true; - final int start = ignoreStartingSlash && (antPattern.startsWith("/") || antPattern.startsWith("\\")) ? 1 : 0; + final int start = ignoreStartingSlash && (StringUtil.startsWithChar(antPattern, '/') || StringUtil.startsWithChar(antPattern, '\\')) ? 1 : 0; for (int idx = start; idx < antPattern.length(); idx++) { final char ch = antPattern.charAt(idx); diff --git a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffWindow.java b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffWindow.java index aca2c3ac04f2..39edc03d201c 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffWindow.java +++ b/platform/vcs-impl/src/com/intellij/openapi/diff/impl/dir/DirDiffWindow.java @@ -17,6 +17,7 @@ package com.intellij.openapi.diff.impl.dir; import com.intellij.openapi.Disposable; +import javax.swing.*; import java.awt.*; /** @@ -46,7 +47,7 @@ public class DirDiffWindow { public void setTitle(String title) { if (myDialog == null) { - myFrame.getFrame().setTitle(title); + ((JFrame)myFrame.getFrame()).setTitle(title); } else { myDialog.setTitle(title); } diff --git a/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java b/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java index b3433d2654ad..2f2db3646235 100644 --- a/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java +++ b/plugins/android/src/org/jetbrains/android/AndroidResourcesLineMarkerProvider.java @@ -26,7 +26,7 @@ import com.intellij.openapi.util.IconLoader; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.util.PsiTreeUtil; -import com.intellij.psi.util.PsiUtilBase; +import com.intellij.psi.util.PsiUtilCore; import com.intellij.psi.xml.XmlAttribute; import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlTag; @@ -148,32 +148,20 @@ public class AndroidResourcesLineMarkerProvider implements LineMarkerProvider { PsiField[] fields = AndroidResourceUtil.findResourceFieldsForFileResource((PsiFile)element, false); if (fields.length > 0) result.add(createLineMarkerInfo(element, fields)); } - else - if (element instanceof PsiClass) { - PsiClass c = (PsiClass)element; - if (AndroidUtils.R_CLASS_NAME.equals(c.getName())) { - PsiFile containingFile = element.getContainingFile(); - AndroidFacet facet = AndroidFacet.getInstance(containingFile); - if (facet != null && AndroidUtils.isRClassFile(facet, containingFile)) { - LocalResourceManager manager = facet.getLocalResourceManager(); - annotateRClass((PsiClass)element, result, manager); - } + else if (element instanceof PsiClass) { + PsiClass c = (PsiClass)element; + if (AndroidUtils.R_CLASS_NAME.equals(c.getName())) { + PsiFile containingFile = element.getContainingFile(); + AndroidFacet facet = AndroidFacet.getInstance(containingFile); + if (facet != null && AndroidUtils.isRClassFile(facet, containingFile)) { + LocalResourceManager manager = facet.getLocalResourceManager(); + annotateRClass((PsiClass)element, result, manager); } } - else if (element instanceof XmlAttributeValue) { - annotateXmlAttributeValue((XmlAttributeValue)element, result); - } - /*else if (element instanceof PsiReferenceExpression) { - PsiElement targetElement = ((PsiReferenceExpression)element).resolve(); - if (targetElement instanceof PsiField) { - PsiField targetField = (PsiField)targetElement; - PsiFile file = targetField.getContainingFile(); - if (file != null && AndroidResourceUtil.isRJavaField(file, targetField)) { - annotateElementNavToResource(element, targetField, LocalResourceManager.getInstance(containingFile), result, null, true); - } - } - }*/ - + } + else if (element instanceof XmlAttributeValue) { + annotateXmlAttributeValue((XmlAttributeValue)element, result); + } } @NotNull @@ -216,15 +204,13 @@ public class AndroidResourcesLineMarkerProvider implements LineMarkerProvider { PsiFile resourcePsiFile = psiManager.findFile(resourceFile); if (resourcePsiFile != null) { String resName = ResourceManager.getResourceName(resType, resourceFile.getName()); - if (resName != null) { - MyResourceEntry key = new MyResourceEntry(resName, resType); - List list = result.get(key); - if (list == null) { - list = new ArrayList(); - result.put(key, list); - } - list.add(resourcePsiFile); + MyResourceEntry key = new MyResourceEntry(resName, resType); + List list = result.get(key); + if (list == null) { + list = new ArrayList(); + result.put(key, list); } + list.add(resourcePsiFile); } } } @@ -288,7 +274,7 @@ public class AndroidResourcesLineMarkerProvider implements LineMarkerProvider { else { targets = AndroidResourceUtil.findResourcesByField(manager, resField); } - return PsiUtilBase.toPsiElementArray(targets); + return PsiUtilCore.toPsiElementArray(targets); } }; if (lazy) { diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/BaseResourceReference.java b/plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java similarity index 50% rename from plugins/android/src/org/jetbrains/android/dom/converters/BaseResourceReference.java rename to plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java index b4506568847e..552784f5432a 100644 --- a/plugins/android/src/org/jetbrains/android/dom/converters/BaseResourceReference.java +++ b/plugins/android/src/org/jetbrains/android/dom/converters/AndroidResourceReference.java @@ -15,8 +15,10 @@ */ package org.jetbrains.android.dom.converters; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiReferenceBase; +import com.intellij.navigation.NavigationItem; +import com.intellij.psi.*; +import com.intellij.psi.impl.source.resolve.ResolveCache; +import com.intellij.psi.xml.XmlAttributeValue; import com.intellij.psi.xml.XmlElement; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; @@ -24,22 +26,33 @@ import com.intellij.util.xml.*; import com.intellij.util.xml.impl.ConvertContextImpl; import com.intellij.util.xml.impl.DomCompletionContributor; import org.jetbrains.android.dom.AndroidDomUtil; +import org.jetbrains.android.dom.resources.ResourceElement; import org.jetbrains.android.dom.resources.ResourceValue; +import org.jetbrains.android.dom.wrappers.FileResourceElementWrapper; +import org.jetbrains.android.dom.wrappers.ValueResourceElementWrapper; +import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.resourceManagers.ResourceManager; import org.jetbrains.android.util.AndroidResourceUtil; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; +import java.util.List; /** * @author coyote */ -public abstract class BaseResourceReference extends PsiReferenceBase.Poly { +public class AndroidResourceReference extends PsiReferenceBase.Poly { private final GenericDomValue myValue; + private final AndroidFacet myFacet; + private final ResourceValue myResourceValue; - public BaseResourceReference(GenericDomValue value) { + public AndroidResourceReference(@NotNull GenericDomValue value, + @NotNull AndroidFacet facet, + @NotNull ResourceValue resourceValue) { super(DomUtil.getValueElement(value), null, true); myValue = value; + myFacet = facet; + myResourceValue = resourceValue; } @NotNull @@ -82,4 +95,66 @@ public abstract class BaseResourceReference extends PsiReferenceBase.Poly() { + @Override + public ResolveResult[] resolve(AndroidResourceReference reference, boolean incompleteCode) { + return resolveInner(); + } + }, false, incompleteCode); + } + + @NotNull + private ResolveResult[] resolveInner() { + final List elements = new ArrayList(); + final List files = new ArrayList(); + collectTargets(myFacet, myResourceValue, elements, files); + + final List result = new ArrayList(); + + for (PsiFile target : files) { + if (target != null) { + final PsiFile e = new FileResourceElementWrapper(target); + result.add(new PsiElementResolveResult(e)); + } + } + + for (PsiElement target : elements) { + final PsiElement e = target instanceof NavigationItem && target instanceof XmlAttributeValue + ? new ValueResourceElementWrapper((XmlAttributeValue)target) + : target; + result.add(new PsiElementResolveResult(e)); + } + return result.toArray(new ResolveResult[result.size()]); + } + + private static void collectTargets(AndroidFacet facet, ResourceValue resValue, List elements, List files) { + String resType = resValue.getResourceType(); + if (resType == null) { + return; + } + ResourceManager manager = facet.getResourceManager(resValue.getPackage()); + if (manager != null) { + String resName = resValue.getResourceName(); + if (resName != null) { + List valueResources = manager.findValueResources(resType, resName, false); + for (ResourceElement resource : valueResources) { + elements.add(resource.getName().getXmlAttributeValue()); + } + if (resType.equals("id")) { + List idAttrs = manager.findIdDeclarations(resName); + if (idAttrs != null) { + elements.addAll(idAttrs); + } + } + if (elements.size() == 0) { + files.addAll(manager.findResourceFiles(resType, resName, false)); + } + } + } + } } diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/FileResourceReference.java b/plugins/android/src/org/jetbrains/android/dom/converters/FileResourceReference.java deleted file mode 100644 index f75680dd9416..000000000000 --- a/plugins/android/src/org/jetbrains/android/dom/converters/FileResourceReference.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2000-2010 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.android.dom.converters; - -import com.intellij.psi.PsiElementResolveResult; -import com.intellij.psi.PsiFile; -import com.intellij.psi.ResolveResult; -import com.intellij.util.xml.GenericDomValue; -import org.jetbrains.android.dom.resources.ResourceValue; -import org.jetbrains.android.dom.wrappers.FileResourceElementWrapper; -import org.jetbrains.annotations.NotNull; - -import java.util.*; - -/** - * @author yole - */ -public class FileResourceReference extends BaseResourceReference { - private final Set myTargets; - - public FileResourceReference(GenericDomValue genericDomValue, Collection targets) { - super(genericDomValue); - myTargets = new HashSet(targets); - } - - @NotNull - public ResolveResult[] multiResolve(boolean b) { - List result = new ArrayList(); - for (PsiFile target : myTargets) { - if (target != null) { - PsiFile e = new FileResourceElementWrapper(target); - result.add(new PsiElementResolveResult(e)); - } - } - return result.toArray(new ResolveResult[result.size()]); - } -} diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java b/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java index e77187a20cde..28d55346b78c 100644 --- a/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java +++ b/plugins/android/src/org/jetbrains/android/dom/converters/ResourceReferenceConverter.java @@ -134,13 +134,13 @@ public class ResourceReferenceConverter extends ResolvingConverter result, - boolean explicitResourceType) { - addResourceReferenceValues(facet, type, resPackage, result, explicitResourceType); - /*for (Module depModule : ModuleRootManager.getInstance(facet.getModule()).getDependencies()) { - AndroidFacet depFacet = AndroidFacet.getInstance(depModule); - if (depFacet != null) { - addResourceReferenceValues(depFacet, type, resPackage, result, explicitResourceType); - } - }*/ - } - private void addResourceReferenceValues(AndroidFacet facet, String type, String resPackage, @@ -203,11 +189,8 @@ public class ResourceReferenceConverter extends ResolvingConverter elements = new ArrayList(); - List files = new ArrayList(); - collectTargetsWithDependencies(facet, resValue, elements, files); - if (files.size() > 0) { - return new PsiReference[]{new FileResourceReference(value, files)}; - } - return new PsiReference[]{new ValueResourceReference(value, elements)}; + return new PsiReference[] {new AndroidResourceReference(value, facet, resValue)}; } } } return PsiReference.EMPTY_ARRAY; } - private static void collectTargetsWithDependencies(AndroidFacet facet, - ResourceValue resValue, - List elements, - List files) { - collectTargets(facet, resValue, elements, files); - /*for (Module depModule : ModuleRootManager.getInstance(facet.getModule()).getDependencies()) { - AndroidFacet depFacet = AndroidFacet.getInstance(depModule); - if (depFacet != null) { - collectTargets(depFacet, resValue, elements, files); - } - }*/ - } - - private static void collectTargets(AndroidFacet facet, ResourceValue resValue, List elements, List files) { - String resType = resValue.getResourceType(); - if (resType == null) { - return; - } - ResourceManager manager = facet.getResourceManager(resValue.getPackage()); - if (manager != null) { - String resName = resValue.getResourceName(); - if (resName != null) { - List valueResources = manager.findValueResources(resType, resName, false); - for (ResourceElement resource : valueResources) { - elements.add(resource.getName().getXmlAttributeValue()); - } - if (resType.equals("id")) { - List idAttrs = manager.findIdDeclarations(resName); - if (idAttrs != null) { - elements.addAll(idAttrs); - } - } - if (elements.size() == 0) { - files.addAll(manager.findResourceFiles(resType, resName, false)); - } - } - } - } - private static class MyLocalQuickFix implements LocalQuickFix { private final AndroidFacet myFacet; private final String myResourceType; diff --git a/plugins/android/src/org/jetbrains/android/dom/converters/ValueResourceReference.java b/plugins/android/src/org/jetbrains/android/dom/converters/ValueResourceReference.java deleted file mode 100644 index 28759e1d6c79..000000000000 --- a/plugins/android/src/org/jetbrains/android/dom/converters/ValueResourceReference.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2000-2010 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.android.dom.converters; - -import com.intellij.navigation.NavigationItem; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiElementResolveResult; -import com.intellij.psi.ResolveResult; -import com.intellij.psi.xml.XmlAttributeValue; -import com.intellij.util.xml.GenericDomValue; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jetbrains.android.dom.wrappers.ValueResourceElementWrapper; -import org.jetbrains.android.dom.resources.ResourceValue; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; - -/** - * @author yole - */ -public class ValueResourceReference extends BaseResourceReference { - private final ArrayList myTargets; - - public ValueResourceReference(GenericDomValue value, @Nullable Collection targets) { - super(value); - myTargets = new ArrayList(targets); - } - - @NotNull - public ResolveResult[] multiResolve(boolean incompleteCode) { - if (myTargets == null) return ResolveResult.EMPTY_ARRAY; - List result = new ArrayList(); - for (PsiElement target : myTargets) { - PsiElement e = target instanceof NavigationItem && target instanceof XmlAttributeValue - ? new ValueResourceElementWrapper((XmlAttributeValue)target) - : target; - result.add(new PsiElementResolveResult(e)); - } - return result.toArray(new ResolveResult[result.size()]); - } -} diff --git a/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java b/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java index 3722ec9a371b..5369c0d85a21 100644 --- a/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java +++ b/plugins/android/src/org/jetbrains/android/resourceManagers/LocalResourceManager.java @@ -20,6 +20,7 @@ import com.android.AndroidConstants; import com.intellij.CommonBundle; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; @@ -32,11 +33,15 @@ import com.intellij.psi.xml.XmlFile; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.HashSet; import com.intellij.util.indexing.FileBasedIndex; +import com.intellij.util.xml.GenericAttributeValue; import org.jetbrains.android.AndroidFileTemplateProvider; import org.jetbrains.android.AndroidIdIndex; import org.jetbrains.android.actions.CreateResourceFileAction; import org.jetbrains.android.dom.attrs.AttributeDefinitions; -import org.jetbrains.android.dom.resources.*; +import org.jetbrains.android.dom.resources.Attr; +import org.jetbrains.android.dom.resources.DeclareStyleable; +import org.jetbrains.android.dom.resources.ResourceElement; +import org.jetbrains.android.dom.resources.Resources; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.facet.AndroidRootUtil; import org.jetbrains.android.util.AndroidBundle; @@ -95,12 +100,50 @@ public class LocalResourceManager extends ResourceManager { return AndroidRootUtil.getResourceDir(getModule()); } + public List getResourceElements() { + return getResourceElements(getAllResourceFiles()); + } + + @NotNull + private Set getAllResourceFiles() { + final Set files = new HashSet(); + + for (VirtualFile valueResourceDir : getResourceSubdirs("values")) { + for (VirtualFile valueResourceFile : valueResourceDir.getChildren()) { + if (!valueResourceFile.isDirectory() && valueResourceFile.getFileType().equals(StdFileTypes.XML)) { + files.add(valueResourceFile); + } + } + } + return files; + } + @NotNull @Override public VirtualFile[] getResourceOverlayDirs() { return AndroidRootUtil.getResourceOverlayDirs(getModule()); } + @NotNull + @Override + public Collection getValueResourceNames(@NotNull String resourceType) { + final List result = new ArrayList(); + + for (ResourceElement element : getValueResources(resourceType)) { + final String name = element.getName().getValue(); + + if (name != null) { + result.add(name); + } + } + return result; + } + + @NotNull + public List getValueResources(@NotNull final String resourceType) { + return getValueResources(resourceType, getAllResourceFiles()); + } + private static void collectResourceDirs(Module module, Set result, Set visited) { if (!visited.add(module)) { return; @@ -172,6 +215,21 @@ public class LocalResourceManager extends ResourceManager { return result; } + @NotNull + @Override + public List findValueResources(@NotNull String resourceType, + @NotNull String resourceName, + boolean distinguishDelimetersInName) { + List elements = new ArrayList(); + for (ResourceElement element : getValueResources(resourceType)) { + GenericAttributeValue name = element.getName(); + if (name != null && equal(resourceName, name.getValue(), distinguishDelimetersInName)) { + elements.add(element); + } + } + return elements; + } + @NotNull public List findAttrs(@NotNull String name) { List list = new ArrayList(); diff --git a/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java b/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java index 77b2052c4dae..d0bee9a74065 100644 --- a/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java +++ b/plugins/android/src/org/jetbrains/android/resourceManagers/ResourceManager.java @@ -17,7 +17,6 @@ package org.jetbrains.android.resourceManagers; import com.android.sdklib.SdkConstants; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; import com.intellij.openapi.project.Project; @@ -32,7 +31,6 @@ import com.intellij.psi.xml.XmlTag; import com.intellij.util.ArrayUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.xml.DomElement; -import com.intellij.util.xml.GenericAttributeValue; import org.jetbrains.android.dom.attrs.AttributeDefinitions; import org.jetbrains.android.dom.resources.Item; import org.jetbrains.android.dom.resources.ResourceElement; @@ -195,6 +193,37 @@ public abstract class ResourceManager { return findResourceFiles(resType, null, true); } + protected List getResourceElements(@NotNull Set files) { + return getRootDomElements(Resources.class, files); + } + + private List getRootDomElements(@NotNull Class elementType, + @NotNull Collection files) { + final List result = new ArrayList(); + for (VirtualFile file : files) { + T element = AndroidUtils.loadDomElement(myModule, file, elementType); + if (element != null) result.add(element); + } + return result; + } + + protected List getValueResources(final String resourceType, Set files) { + final List result = new ArrayList(); + Collection resourceFiles = getResourceElements(files); + for (final Resources resources : resourceFiles) { + ApplicationManager.getApplication().runReadAction(new Runnable() { + @Override + public void run() { + if (!resources.isValid() || myModule.isDisposed() || myModule.getProject().isDisposed()) { + return; + } + result.addAll(getValueResources(resourceType, resources)); + } + }); + } + return result; + } + @Nullable public String getValueResourceType(@NotNull XmlTag tag) { String fileResType = getFileResourceType(tag.getContainingFile()); @@ -238,36 +267,7 @@ public abstract class ResourceManager { } @NotNull - public List getRootDomElements(@NotNull String resType, Class elementType) { - List result = new ArrayList(); - for (VirtualFile valueResourceDir : getResourceSubdirs(resType)) { - for (VirtualFile valueResourceFile : valueResourceDir.getChildren()) { - if (!valueResourceFile.isDirectory() && valueResourceFile.getFileType().equals(StdFileTypes.XML)) { - T element = AndroidUtils.loadDomElement(myModule, valueResourceFile, elementType); - if (element != null) result.add(element); - } - } - } - return result; - } - - @NotNull - public List getValueResources(@NotNull final String resourceType) { - final List result = new ArrayList(); - Collection resourceFiles = getResourceElements(); - for (final Resources resources : resourceFiles) { - ApplicationManager.getApplication().runReadAction(new Runnable() { - @Override - public void run() { - if (!resources.isValid() || myModule.isDisposed() || myModule.getProject().isDisposed()) { - return; - } - result.addAll(getValueResources(resourceType, resources)); - } - }); - } - return result; - } + public abstract Collection getValueResourceNames(@NotNull final String resourceType); @NotNull public static List getValueResources(@NotNull String resourceType, Resources resources) { @@ -307,10 +307,6 @@ public abstract class ResourceManager { return result; } - public List getResourceElements() { - return getRootDomElements("values", Resources.class); - } - @Nullable public abstract AttributeDefinitions getAttributeDefinitions(); @@ -326,18 +322,9 @@ public abstract class ResourceManager { } @NotNull - public List findValueResources(@NotNull String resourceType, - @NotNull String resourceName, - boolean distinguishDelimetersInName) { - List elements = new ArrayList(); - for (ResourceElement element : getValueResources(resourceType)) { - GenericAttributeValue name = element.getName(); - if (name != null && equal(resourceName, name.getValue(), distinguishDelimetersInName)) { - elements.add(element); - } - } - return elements; - } + public abstract List findValueResources(@NotNull String resourceType, + @NotNull String resourceName, + boolean distinguishDelimetersInName); public static boolean isInResourceSubdirectory(@NotNull PsiFile file, @Nullable String resourceType) { file = file.getOriginalFile(); diff --git a/plugins/android/src/org/jetbrains/android/resourceManagers/SystemResourceManager.java b/plugins/android/src/org/jetbrains/android/resourceManagers/SystemResourceManager.java index ca635ac257f3..83604208d580 100644 --- a/plugins/android/src/org/jetbrains/android/resourceManagers/SystemResourceManager.java +++ b/plugins/android/src/org/jetbrains/android/resourceManagers/SystemResourceManager.java @@ -15,21 +15,31 @@ */ package org.jetbrains.android.resourceManagers; +import com.android.resources.ResourceFolderType; +import com.android.resources.ResourceType; import com.android.sdklib.IAndroidTarget; import com.android.sdklib.SdkConstants; +import com.intellij.lang.injection.InjectedLanguageManager; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.module.Module; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiFile; +import com.intellij.psi.*; import com.intellij.psi.xml.*; +import com.intellij.util.containers.HashMap; +import com.intellij.util.containers.HashSet; import com.intellij.util.xml.ConvertContext; import org.jetbrains.android.AndroidIdIndex; import org.jetbrains.android.dom.attrs.AttributeDefinitions; +import org.jetbrains.android.dom.resources.ResourceElement; +import org.jetbrains.android.dom.resources.Resources; import org.jetbrains.android.facet.AndroidFacet; import org.jetbrains.android.sdk.AndroidPlatform; import org.jetbrains.android.sdk.AndroidTargetData; import org.jetbrains.android.util.AndroidResourceUtil; +import org.jetbrains.android.util.AndroidUtils; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,8 +49,12 @@ import java.util.*; * @author coyote */ public class SystemResourceManager extends ResourceManager { - private volatile Map> myIdMap; - + private static final Logger LOG = Logger.getInstance("#org.jetbrains.android.resourceManagers.SystemResourceManager"); + + private volatile Map>> myIdMap; + + private volatile Map>> myValueResourcesMap; + private final AndroidPlatform myPlatform; public SystemResourceManager(@NotNull Module module, @NotNull AndroidPlatform androidPlatform) { @@ -60,6 +74,19 @@ public class SystemResourceManager extends ResourceManager { return LocalFileSystem.getInstance().findFileByPath(resPath); } + @NotNull + @Override + public Collection getValueResourceNames(@NotNull String resourceType) { + final ResourceType type = ResourceType.getEnum(resourceType); + + if (type == null) { + LOG.error("Unknown resource type " + resourceType); + return Collections.emptyList(); + } + final Map> map = getValueResourcesMap().get(type); + return map != null ? map.keySet() : Collections.emptyList(); + } + @Nullable public static SystemResourceManager getInstance(@NotNull ConvertContext context) { AndroidFacet facet = AndroidFacet.getInstance(context); @@ -76,8 +103,93 @@ public class SystemResourceManager extends ResourceManager { public List findIdDeclarations(@NotNull String id) { if (myIdMap == null) { myIdMap = createIdMap(); + return doFindIdDeclarations(id, false); } - return myIdMap.get(id); + return doFindIdDeclarations(id, true); + } + + @NotNull + private synchronized Map>> getValueResourcesMap() { + if (myValueResourcesMap == null) { + myValueResourcesMap = new HashMap>>(); + + for (VirtualFile valueResourceDir : getResourceSubdirs(ResourceFolderType.VALUES.getName())) { + for (final VirtualFile valueResourceFile : valueResourceDir.getChildren()) { + if (!valueResourceFile.isDirectory() && valueResourceFile.getFileType().equals(StdFileTypes.XML)) { + ApplicationManager.getApplication().runReadAction(new Runnable() { + @Override + public void run() { + fillValueResourcesMap(valueResourceFile); + } + }); + } + } + } + } + return myValueResourcesMap; + } + + private void fillValueResourcesMap(@NotNull VirtualFile valueResourceFile) { + final Resources roots = AndroidUtils.loadDomElement(myModule, valueResourceFile, Resources.class); + if (roots == null) { + return; + } + + for (ResourceType resType : ResourceType.values()) { + Map> map = myValueResourcesMap.get(resType); + + if (map == null) { + map = new HashMap>(); + myValueResourcesMap.put(resType, map); + } + + for (ResourceElement element : ResourceManager.getValueResources(resType.getName(), roots)) { + final String name = element.getName().getValue(); + + if (name != null) { + Set fileSet = map.get(name); + + if (fileSet == null) { + fileSet = new HashSet(); + map.put(name, fileSet); + } + fileSet.add(valueResourceFile); + } + } + } + + PsiManager.getInstance(myModule.getProject()).dropResolveCaches(); + final XmlElement element = roots.getXmlElement(); + + if (element != null) { + final PsiFile file = element.getContainingFile(); + + if (file != null) { + InjectedLanguageManager.getInstance(myModule.getProject()).dropFileCaches(file); + } + } + } + + private List doFindIdDeclarations(@NotNull String id, boolean recreateMapIfCannotResolve) { + final List> pointers = myIdMap.get(id); + + if (pointers == null || pointers.size() == 0) { + return Collections.emptyList(); + } + final List result = new ArrayList(); + + for (SmartPsiElementPointer pointer : pointers) { + final PsiElement element = pointer.getElement(); + + if (element != null) { + result.add(element); + } + else if (recreateMapIfCannotResolve) { + myIdMap = createIdMap(); + return doFindIdDeclarations(id, false); + } + } + return result; } @NotNull @@ -89,13 +201,46 @@ public class SystemResourceManager extends ResourceManager { } @NotNull - public Map> createIdMap() { - Map> result = new HashMap>(); + @Override + public List findValueResources(@NotNull String resourceType, + @NotNull String resourceName, + boolean distinguishDelimetersInName) { + final ResourceType type = ResourceType.getEnum(resourceType); + if (type == null) { + LOG.error("Unknown resource type " + resourceType); + return Collections.emptyList(); + } + + final Map> map = getValueResourcesMap().get(type); + if (map == null) { + return Collections.emptyList(); + } + + final Set fileSet = map.get(resourceName); + if (fileSet == null) { + return Collections.emptyList(); + } + + final List result = new ArrayList(); + + for (ResourceElement element : getValueResources(resourceType, fileSet)) { + final String name = element.getName().getValue(); + + if (equal(resourceName, name, distinguishDelimetersInName)) { + result.add(element); + } + } + return result; + } + + @NotNull + public Map>> createIdMap() { + Map>> result = new HashMap>>(); fillIdMap(result); return result; } - protected void fillIdMap(@NotNull Map> result) { + protected void fillIdMap(@NotNull Map>> result) { for (String resType : AndroidIdIndex.RES_TYPES_CONTAINING_ID_DECLARATIONS) { List resFiles = findResourceFiles(resType); for (PsiFile resFile : resFiles) { @@ -104,7 +249,7 @@ public class SystemResourceManager extends ResourceManager { } } - protected static void collectIdDeclarations(PsiFile psiFile, Map> result) { + protected static void collectIdDeclarations(PsiFile psiFile, Map>> result) { if (psiFile instanceof XmlFile) { XmlDocument document = ((XmlFile)psiFile).getDocument(); if (document != null) { @@ -116,7 +261,7 @@ public class SystemResourceManager extends ResourceManager { } } - private static void fillMapRecursively(@NotNull XmlTag tag, Map> result) { + private static void fillMapRecursively(@NotNull XmlTag tag, @NotNull Map>> result) { XmlAttribute idAttr = tag.getAttribute("id", SdkConstants.NS_RESOURCES); if (idAttr != null) { XmlAttributeValue idAttrValue = idAttr.getValueElement(); @@ -124,12 +269,14 @@ public class SystemResourceManager extends ResourceManager { if (AndroidResourceUtil.isIdDeclaration(idAttrValue)) { String id = AndroidResourceUtil.getResourceNameByReferenceText(idAttrValue.getValue()); if (id != null) { - List list = result.get(id); + List> list = result.get(id); + if (list == null) { - list = new ArrayList(); + list = new ArrayList>(); result.put(id, list); } - list.add(idAttrValue); + final SmartPointerManager manager = SmartPointerManager.getInstance(tag.getProject()); + list.add(manager.createSmartPsiElementPointer(idAttr)); } } } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy index c4cbb19cfe86..2f13efb141e7 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/compiler/GroovyDebuggerTest.groovy @@ -47,6 +47,8 @@ import com.intellij.testFramework.builders.JavaModuleFixtureBuilder import com.intellij.testFramework.fixtures.impl.TempDirTestFixtureImpl import com.intellij.util.SystemProperties import com.intellij.util.concurrency.Semaphore +import com.intellij.execution.process.OSProcessManager +import com.intellij.execution.process.OSProcessHandler /** * @author peter @@ -94,13 +96,21 @@ class GroovyDebuggerTest extends GroovyCompilerTestCase { runProcess(mainClass, myModule, DefaultDebugExecutor, [onTextAvailable: { evt, type -> if (trace) print evt.text}] as ProcessAdapter, runner) } cl.call() + def handler = debugProcess.executionResult.processHandler if (trace) { - println "terminated1?: " + debugProcess.executionResult.processHandler.isProcessTerminated() + println "terminated1?: " + handler.isProcessTerminated() } resume() - debugProcess.executionResult.processHandler.waitFor() + if (!handler.waitFor(20000)) { + if (handler instanceof OSProcessHandler) { + OSProcessManager.instance.killProcessTree(handler.process) + } else { + println "can't terminate $handler" + } + fail('too long waiting for process termination') + } if (trace) { - println "terminated2?: " + debugProcess.executionResult.processHandler.isProcessTerminated() + println "terminated2?: " + handler.isProcessTerminated() } } diff --git a/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java b/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java index 59681e845bb0..b4763dff8dc1 100644 --- a/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java +++ b/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesFileImpl.java @@ -41,9 +41,10 @@ import org.jetbrains.annotations.Nullable; import java.util.*; public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { - private static final TokenSet outPropertiesListSet = TokenSet.create(PropertiesElementTypes.PROPERTIES_LIST); - private MultiMap myPropertiesMap; - private List myProperties; + private static final TokenSet PROPERTIES_LIST_SET = TokenSet.create(PropertiesElementTypes.PROPERTIES_LIST); + private volatile MultiMap myPropertiesMap; //guarded by lock + private volatile List myProperties; //guarded by lock + private final Object lock = new Object(); public PropertiesFileImpl(FileViewProvider viewProvider) { super(viewProvider, PropertiesLanguage.INSTANCE); @@ -61,34 +62,36 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { @NotNull public List getProperties() { - synchronized (PsiLock.LOCK) { ensurePropertiesLoaded(); return myProperties; - } } private ASTNode getPropertiesList() { - return ArrayUtil.getFirstElement(getNode().getChildren(outPropertiesListSet)); + return ArrayUtil.getFirstElement(getNode().getChildren(PROPERTIES_LIST_SET)); } private void ensurePropertiesLoaded() { - if (myPropertiesMap != null) { - return; - } + if (myPropertiesMap != null) return; + final ASTNode[] props = getPropertiesList().getChildren(PropertiesElementTypes.PROPERTIES); - myPropertiesMap = new MultiMap(); - myProperties = new ArrayList(props.length); + MultiMap propertiesMap = new MultiMap(); + List properties = new ArrayList(props.length); for (final ASTNode prop : props) { final Property property = (Property)prop.getPsi(); String key = property.getUnescapedKey(); - myPropertiesMap.putValue(key, property); - myProperties.add(property); + propertiesMap.putValue(key, property); + properties.add(property); + } + synchronized (lock) { + if (myPropertiesMap != null) return; + myProperties = properties; + myPropertiesMap = propertiesMap; } } public IProperty findPropertyByKey(@NotNull String key) { - synchronized (PsiLock.LOCK) { - ensurePropertiesLoaded(); + ensurePropertiesLoaded(); + synchronized (lock) { Collection list = myPropertiesMap.get(key); return list.isEmpty() ? null : list.iterator().next(); } @@ -96,10 +99,9 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { @NotNull public List findPropertiesByKey(@NotNull String key) { - synchronized (PsiLock.LOCK) { - ensurePropertiesLoaded(); - List list = (List)myPropertiesMap.get(key); - return list == null ? Collections.emptyList() : list; + ensurePropertiesLoaded(); + synchronized (lock) { + return (List)myPropertiesMap.get(key); } } @@ -123,7 +125,7 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { @NotNull public PsiElement addProperty(@NotNull IProperty property) throws IncorrectOperationException { if (haveToAddNewLine()) { - insertLinebreakBefore(null); + insertLineBreakBefore(null); } final TreeElement copy = ChangeUtil.copyToElement(property.getPsiElement()); getPropertiesList().addChild(copy); @@ -142,11 +144,11 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { } } if (anchorBefore == null && haveToAddNewLine()) { - insertLinebreakBefore(null); + insertLineBreakBefore(null); } getPropertiesList().addChild(copy, anchorBefore); if (anchorBefore != null) { - insertLinebreakBefore(anchorBefore); + insertLineBreakBefore(anchorBefore); } return copy.getPsi(); } @@ -156,7 +158,7 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { return (IProperty)addProperty(PropertiesElementFactory.createProperty(getProject(), key, value)); } - private void insertLinebreakBefore(final ASTNode anchorBefore) { + private void insertLineBreakBefore(final ASTNode anchorBefore) { getPropertiesList().addChild(ASTFactory.whitespace("\n"), anchorBefore); } @@ -178,7 +180,7 @@ public class PropertiesFileImpl extends PsiFileBase implements PropertiesFile { public void clearCaches() { super.clearCaches(); - synchronized (PsiLock.LOCK) { + synchronized (lock) { myPropertiesMap = null; myProperties = null; } diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskCompletionTest.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskCompletionTest.java index 3af2d7c7b5c1..bde7713bfb9b 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskCompletionTest.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskCompletionTest.java @@ -9,6 +9,7 @@ import com.intellij.tasks.impl.LocalTaskImpl; import com.intellij.tasks.impl.TaskCompletionContributor; import com.intellij.tasks.impl.TaskManagerImpl; import com.intellij.testFramework.MapDataContext; +import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; import java.util.Arrays; @@ -18,6 +19,10 @@ import java.util.Arrays; */ public class TaskCompletionTest extends LightCodeInsightFixtureTestCase { + public TaskCompletionTest() { + super(UsefulTestCase.IDEA_MARKER_CLASS, "PlatformLangXml"); + } + public void testTaskCompletion() throws Exception { doTest("", "TEST-001: Test task"); } diff --git a/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskManagerTestCase.java b/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskManagerTestCase.java index 6cc70958912e..eafa7877eeb5 100644 --- a/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskManagerTestCase.java +++ b/plugins/tasks/tasks-tests/test/com/intellij/tasks/TaskManagerTestCase.java @@ -1,5 +1,6 @@ package com.intellij.tasks; +import com.intellij.testFramework.UsefulTestCase; import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; /** @@ -7,6 +8,10 @@ import com.intellij.testFramework.fixtures.LightCodeInsightFixtureTestCase; */ public abstract class TaskManagerTestCase extends LightCodeInsightFixtureTestCase { + protected TaskManagerTestCase() { + super(UsefulTestCase.IDEA_MARKER_CLASS, "PlatformLangXml"); + } + protected TaskManager myManager; @Override