mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -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<RequestFuture, Project> myAutomakeFutures = new HashMap<RequestFuture, Project>();
|
||||
|
||||
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<? extends VFileEvent> events) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void after(List<? extends VFileEvent> 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<? extends VFileEvent> 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<RequestFuture> futures = new ArrayList<RequestFuture>();
|
||||
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.<String>emptyList(), Collections.<String>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<RequestFuture, Project> 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<String> modules, final Collection<String> paths, final JpsServerResponseHandler handler) {
|
||||
public RequestFuture submitCompilationTask(final Project project, final boolean isRebuild, final boolean isMake, final Collection<String> modules, final Collection<String> paths, final JpsServerResponseHandler handler) {
|
||||
final String projectId = project.getLocation();
|
||||
final Ref<RequestFuture> futureRef = new Ref<RequestFuture>(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<Project, MessageBusConnection> myConnections = new HashMap<Project, MessageBusConnection>();
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.intellij.compiler.options.CompilerUIConfigurable">
|
||||
<grid id="1663f" binding="myPanel" layout-manager="GridLayoutManager" row-count="7" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<grid id="1663f" binding="myPanel" layout-manager="GridLayoutManager" row-count="8" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
<margin top="0" left="0" bottom="0" right="0"/>
|
||||
<constraints>
|
||||
<xy x="28" y="24" width="883" height="379"/>
|
||||
@@ -10,7 +10,7 @@
|
||||
<children>
|
||||
<vspacer id="67edf">
|
||||
<constraints>
|
||||
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
<grid row="7" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
</vspacer>
|
||||
<grid id="b341d" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
|
||||
@@ -93,6 +93,14 @@
|
||||
<text value="Use compile server for project compilation"/>
|
||||
</properties>
|
||||
</component>
|
||||
<component id="b9b2d" class="javax.swing.JCheckBox" binding="myCbMakeProjectOnSave">
|
||||
<constraints>
|
||||
<grid row="6" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="2" use-parent-layout="false"/>
|
||||
</constraints>
|
||||
<properties>
|
||||
<text value="Perform project make on save"/>
|
||||
</properties>
|
||||
</component>
|
||||
</children>
|
||||
</grid>
|
||||
</form>
|
||||
|
||||
@@ -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
|
||||
"<b>/</b> — path separator; <b>/**/</b> — any number of directories; " +
|
||||
"<i><dir_name></i>:<i><pattern></i> — restrict to source roots with the specified name" +
|
||||
"</html>");
|
||||
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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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<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.
|
||||
*
|
||||
|
||||
+6
-4
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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() {
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package com.intellij.compiler;
|
||||
package org.jetbrains.jps.api;
|
||||
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.FutureTask;
|
||||
@@ -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<Module, SourceToOutputMapping> storageMap = new HashMap<Module, SourceToOutputMapping>();
|
||||
|
||||
@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<String> 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));
|
||||
|
||||
@@ -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<File> files, Collection<File> forms) throws Exception {
|
||||
private ExitCode compile(final CompileContext context, ModuleChunk chunk, Collection<File> files, Collection<File> 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<File> classpath = paths.getCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/);
|
||||
final Collection<File> platformCp = paths.getPlatformCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/);
|
||||
final Collection<File> classpath =
|
||||
paths.getCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/);
|
||||
final Collection<File> platformCp =
|
||||
paths.getPlatformCompilationClasspath(chunk, context.isCompilingTests(), false/*context.isProjectRebuild()*/);
|
||||
final Map<File, Set<File>> 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<File> sourcePath = TEMPORARY_SOURCE_ROOTS_KEY.get(context,Collections.<File>emptySet());
|
||||
final Set<File> sourcePath = TEMPORARY_SOURCE_ROOTS_KEY.get(context, Collections.<File>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<File, String> 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<File> files, Collection<File> classpath, Collection<File> platformCp, Collection<File> sourcePath, Map<File, Set<File>> outs, CompileContext context, DiagnosticOutputConsumer diagnosticSink, final OutputFileConsumer outputSink) throws Exception {
|
||||
private boolean compileJava(Collection<File> files,
|
||||
Collection<File> classpath,
|
||||
Collection<File> platformCp,
|
||||
Collection<File> sourcePath,
|
||||
Map<File, Set<File>> outs,
|
||||
CompileContext context,
|
||||
DiagnosticOutputConsumer diagnosticSink,
|
||||
final OutputFileConsumer outputSink) throws Exception {
|
||||
final List<String> 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<JavacServerResponseHandler> future = client.sendCompileRequest(options, files, classpath, platformCp, sourcePath, outs, diagnosticSink, classesConsumer);
|
||||
final RequestFuture<JavacServerResponseHandler> 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<File> classpath, Collection<File> platformCp, Map<File, String> chunkSourcePath, OutputFilesSink outputSink)
|
||||
throws MalformedURLException {
|
||||
private static ClassLoader createInstrumentationClassLoader(Collection<File> classpath,
|
||||
Collection<File> platformCp,
|
||||
Map<File, String> chunkSourcePath,
|
||||
OutputFilesSink outputSink) throws MalformedURLException {
|
||||
final List<URL> urls = new ArrayList<URL>();
|
||||
for (Collection<File> 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<File, String> chunkSourcePath,
|
||||
final ClassLoader loader,
|
||||
Collection<File> formsToInstrument,
|
||||
OutputFilesSink outputSink) throws ProjectBuildException {
|
||||
private static void instrumentForms(CompileContext context,
|
||||
ModuleChunk chunk,
|
||||
final Map<File, String> chunkSourcePath,
|
||||
final ClassLoader loader,
|
||||
Collection<File> formsToInstrument,
|
||||
OutputFilesSink outputSink) throws ProjectBuildException {
|
||||
|
||||
final Map<String, File> class2form = new HashMap<String, File>();
|
||||
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");
|
||||
}
|
||||
|
||||
+3
-1
@@ -34,7 +34,9 @@ public abstract class AbstractStateStorage<Key, T> {
|
||||
|
||||
public void dropMemoryCache() {
|
||||
synchronized (myDataLock) {
|
||||
myMap.dropMemoryCaches();
|
||||
if (myMap.isDirty()) {
|
||||
myMap.dropMemoryCaches();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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<String, CompilationTask> myBuildsInProgress = new ConcurrentHashMap<String, CompilationTask>();
|
||||
private final Map<String, SequentialTaskExecutor> myTaskExecutors = new HashMap<String, SequentialTaskExecutor>();
|
||||
private final List<Pair<RunnableFuture, CompilationTask>> myBuildsInProgress = Collections.synchronizedList(new LinkedList<Pair<RunnableFuture, CompilationTask>>());
|
||||
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<Pair<RunnableFuture, CompilationTask>> it = myBuildsInProgress.iterator(); it.hasNext(); ) {
|
||||
final Pair<RunnableFuture, CompilationTask> 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<String, CompilationTask> entry : myBuildsInProgress.entrySet()) {
|
||||
final CompilationTask task = entry.getValue();
|
||||
task.cancel();
|
||||
final List<RunnableFuture> futures = new ArrayList<RunnableFuture>();
|
||||
|
||||
synchronized (myBuildsInProgress) {
|
||||
for (Iterator<Pair<RunnableFuture, CompilationTask>> it = myBuildsInProgress.iterator(); it.hasNext(); ) {
|
||||
final Pair<RunnableFuture, CompilationTask> 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<RunnableFuture, CompilationTask>(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<String> myPaths;
|
||||
private final Set<String> myModules;
|
||||
private final BuildParameters myParams;
|
||||
private volatile boolean myCanceled = false;
|
||||
|
||||
public CompilationTask(UUID sessionId, ChannelHandlerContext channelContext, String projectId, Collection<String> modules, Collection<String> paths) {
|
||||
public CompilationTask(UUID sessionId,
|
||||
ChannelHandlerContext channelContext,
|
||||
String projectId,
|
||||
BuildType buildType,
|
||||
Collection<String> modules,
|
||||
Collection<String> paths) {
|
||||
mySessionId = sessionId;
|
||||
myChannelContext = channelContext;
|
||||
myProjectPath = projectId;
|
||||
myBuildType = buildType;
|
||||
myPaths = paths;
|
||||
myModules = new HashSet<String>(modules);
|
||||
myParams = new BuildParameters();
|
||||
}
|
||||
|
||||
public BuildParameters getBuildParams() {
|
||||
return myParams;
|
||||
}
|
||||
|
||||
public UUID getSessionId() {
|
||||
@@ -214,7 +248,7 @@ class ServerMessageHandler extends SimpleChannelHandler {
|
||||
final Ref<Boolean> hasErrors = new Ref<Boolean>(false);
|
||||
final Ref<Boolean> markedFilesUptodate = new Ref<Boolean>(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<Pair<RunnableFuture, CompilationTask>> it = myBuildsInProgress.iterator(); it.hasNext(); ) {
|
||||
final CompilationTask task = it.next().second;
|
||||
if (sessionId.equals(task.getSessionId())) {
|
||||
it.remove();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -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<String> modules, Collection<String> paths, final BuildParameters params, final MessageHandler msgHandler, CanceledStatus cs) throws Throwable{
|
||||
public void startBuild(String projectPath, BuildType buildType, Set<String> modules, Collection<String> 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");
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -108,7 +108,9 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
|
||||
|
||||
public void flush(boolean memoryCachesOnly) {
|
||||
if (memoryCachesOnly) {
|
||||
myMap.dropMemoryCaches();
|
||||
if (myMap.isDirty()) {
|
||||
myMap.dropMemoryCaches();
|
||||
}
|
||||
}
|
||||
else {
|
||||
myMap.force();
|
||||
|
||||
@@ -169,7 +169,9 @@ class PersistentMultiMaplet<K, V> implements MultiMaplet<K, V> {
|
||||
|
||||
public void flush(boolean memoryCachesOnly) {
|
||||
if (memoryCachesOnly) {
|
||||
myMap.dropMemoryCaches();
|
||||
if (myMap.isDirty()) {
|
||||
myMap.dropMemoryCaches();
|
||||
}
|
||||
}
|
||||
else {
|
||||
myMap.force();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user