diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java index 2ac290d0ae47..2f4c6177a1e9 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java @@ -3,20 +3,29 @@ package org.jetbrains.jps.incremental; import org.jetbrains.annotations.NotNull; import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLogger; import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl; +import org.jetbrains.jps.incremental.java.JavaBuilderLogger; +import org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl; /** * @author nik */ public class BuildLoggingManager { - public static final BuildLoggingManager DEFAULT = new BuildLoggingManager(new ArtifactBuilderLoggerImpl()); + public static final BuildLoggingManager DEFAULT = new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), new JavaBuilderLoggerImpl()); private ArtifactBuilderLogger myArtifactBuilderLogger; + private JavaBuilderLogger myJavaBuilderLogger; - public BuildLoggingManager(@NotNull ArtifactBuilderLogger artifactBuilderLogger) { + public BuildLoggingManager(@NotNull ArtifactBuilderLogger artifactBuilderLogger, @NotNull JavaBuilderLogger logger) { myArtifactBuilderLogger = artifactBuilderLogger; + myJavaBuilderLogger = logger; } @NotNull public ArtifactBuilderLogger getArtifactBuilderLogger() { return myArtifactBuilderLogger; } + + @NotNull + public JavaBuilderLogger getJavaBuilderLogger() { + return myJavaBuilderLogger; + } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index ad7439a43bcb..3f9158ca07be 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -12,6 +12,7 @@ import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.api.RequestFuture; import org.jetbrains.jps.incremental.java.ExternalJavacDescriptor; import org.jetbrains.jps.incremental.java.JavaBuilder; +import org.jetbrains.jps.incremental.java.JavaBuilderLogger; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.CompilerMessage; import org.jetbrains.jps.incremental.messages.ProgressMessage; @@ -321,7 +322,8 @@ public class IncProjectBuilder { final Collection outputs = sourceToOutputStorage.getState(deletedSource); if (outputs != null) { - if (LOG.isDebugEnabled()) { + final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger(); + if (logger.isEnabled()) { if (outputs.size() > 0) { final String[] buffer = new String[outputs.size()]; int i = 0; @@ -329,11 +331,11 @@ public class IncProjectBuilder { buffer[i++] = o; } Arrays.sort(buffer); - LOG.info("Cleaning output files:"); + logger.log("Cleaning output files:"); for(final String o : buffer) { - LOG.info(o); + logger.log(o); } - LOG.info("End of files"); + logger.log("End of files"); } } @@ -450,7 +452,8 @@ public class IncProjectBuilder { } } else { - LOG.info("Builder " + builder.getDescription() + " requested second chunk rebuild"); + context.getLoggingManager().getJavaBuilderLogger().log( + "Builder " + builder.getDescription() + " requested second chunk rebuild"); } } @@ -490,8 +493,9 @@ public class IncProjectBuilder { final Collection outputs = srcToOut.getState(srcPath); if (outputs != null) { + final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger(); for (String output : outputs) { - if (LOG.isDebugEnabled()) { + if (logger.isEnabled()) { allOutputs.add(output); } FileUtil.delete(new File(output)); @@ -502,9 +506,10 @@ public class IncProjectBuilder { } }); - if (LOG.isDebugEnabled()) { + final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger(); + if (logger.isEnabled()) { if (context.isMake() && allOutputs.size() > 0) { - LOG.info("Cleaning output files:"); + logger.log("Cleaning output files:"); final String[] buffer = new String[allOutputs.size()]; int i = 0; for (String output : allOutputs) { @@ -512,9 +517,9 @@ public class IncProjectBuilder { } Arrays.sort(buffer); for (String output : buffer) { - LOG.info(output); + logger.log(output); } - LOG.info("End of files"); + logger.log("End of files"); } } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index b2dde693b495..7ad2d3d5a626 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -3,7 +3,6 @@ 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; @@ -46,8 +45,6 @@ import java.util.concurrent.TimeUnit; * 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"; @@ -185,9 +182,10 @@ public class JavaBuilder extends ModuleLevelBuilder { } } - if (LOG.isDebugEnabled()) { + final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger(); + if (logger.isEnabled()) { if (filesToCompile.size() > 0 && context.isMake()) { - LOG.info("Compiling files:"); + logger.log("Compiling files:"); final String[] buffer = new String[filesToCompile.size()]; int i = 0; for (final File f : filesToCompile) { @@ -195,9 +193,9 @@ public class JavaBuilder extends ModuleLevelBuilder { } Arrays.sort(buffer); for (final String s : buffer) { - LOG.info(s); + logger.log(s); } - LOG.info("End of files"); + logger.log("End of files"); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java new file mode 100644 index 000000000000..837183e6a71b --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java @@ -0,0 +1,9 @@ +package org.jetbrains.jps.incremental.java; + +/** + * @author nik + */ +public interface JavaBuilderLogger { + void log(String line); + boolean isEnabled(); +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java new file mode 100644 index 000000000000..bca646cef3a7 --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java @@ -0,0 +1,20 @@ +package org.jetbrains.jps.incremental.java; + +import com.intellij.openapi.diagnostic.Logger; + +/** + * @author nik + */ +public class JavaBuilderLoggerImpl implements JavaBuilderLogger { + private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl"); + + @Override + public void log(String line) { + LOG.debug(line); + } + + @Override + public boolean isEnabled() { + return LOG.isDebugEnabled(); + } +} diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java index 3aa91554f3a8..f1fdb2d06033 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -16,21 +16,18 @@ package org.jetbrains.ether; import com.intellij.openapi.application.ex.PathManagerEx; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import junit.framework.TestCase; -import org.apache.log4j.Level; -import org.apache.log4j.PropertyConfigurator; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.Project; import org.jetbrains.jps.Sdk; import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.artifacts.Artifact; import org.jetbrains.jps.idea.IdeaProjectLoader; import org.jetbrains.jps.incremental.*; +import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl; +import org.jetbrains.jps.incremental.java.JavaBuilderLogger; import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.ProjectTimestamps; import org.jetbrains.jps.server.ClasspathBootstrap; @@ -40,104 +37,15 @@ import java.io.*; import java.util.Collections; import java.util.LinkedList; import java.util.List; -import java.util.Properties; /** * @author db * @since 26.07.11 */ 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; - } - } - - static VolatileFileAppender myAppender = null; - - static void setAppender (final VolatileFileAppender app) { - myAppender = app; - } - - static void closeAppender () { - if (myAppender != null) { - try { - myAppender.closeStream(); - } - catch (IOException e) { - throw new RuntimeException(e); - } - } - } - - private static class MyFactory implements 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"); - - return new Logger() { - @Override - public boolean isDebugEnabled() { - return affectedLogger; - } - - @Override - public void debug(@NonNls String message) { - } - - @Override - public void debug(@Nullable Throwable t) { - } - - @Override - public void debug(@NonNls String message, @Nullable Throwable t) { - } - - @Override - public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) { - } - - @Override - public void info(@NonNls String message) { - if (affectedLogger) { - logger.info(stripper.strip(message)); - } - } - - @Override - public void info(@NonNls String message, @Nullable Throwable t) { - } - - @Override - public void warn(@NonNls String message, @Nullable Throwable t) { - } - - @Override - public void setLevel(Level level) { - } - }; - } - } - - private static RootStripper stripper = new RootStripper(); - private final String groupName; private final String tempDir = FileUtil.toSystemDependentName(new File(System.getProperty("java.io.tmpdir")).getCanonicalPath()); - private Logger.Factory oldFactory; private String baseDir; private String workDir; @@ -149,9 +57,6 @@ public abstract class IncrementalTestCase extends TestCase { @Override protected void setUp() throws Exception { - oldFactory = Logger.ourFactory; - Logger.setFactory(new MyFactory()); - super.setUp(); baseDir = PathManagerEx.getTestDataPath() + File.separator + "compileServer" + File.separator + "incremental" + File.separator; @@ -175,13 +80,7 @@ public abstract class IncrementalTestCase extends TestCase { super.tearDown(); } finally { - try { - closeAppender(); - delete(new File(workDir)); - } - finally { - Logger.setFactory(oldFactory); - } + delete(new File(workDir)); } } @@ -289,23 +188,7 @@ public abstract class IncrementalTestCase extends TestCase { } } - private void initLoggers() { - final Properties properties = new Properties(); - - properties.setProperty("log4j.rootCategory", "INFO, A1"); - properties.setProperty("log4j.appender.A1", "org.jetbrains.ether.VolatileFileAppender"); - 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); - } - public void doTest() throws Exception { - stripper.setRoot(FileUtil.toSystemIndependentName(getWorkDir() + File.separator)); - - initLoggers(); - final String projectPath = getWorkDir() + File.separator + ".idea"; final Project project = new Project(); @@ -319,11 +202,11 @@ public abstract class IncrementalTestCase extends TestCase { IdeaProjectLoader.loadFromPath(project, projectPath, ""); final File dataStorageRoot = Paths.getDataStorageRoot(project); + final TestJavaBuilderLogger javaBuilderLogger = new TestJavaBuilderLogger(FileUtil.toSystemIndependentName(getWorkDir() + File.separator)); final ProjectDescriptor projectDescriptor = new ProjectDescriptor(project, new FSState(true), new ProjectTimestamps(dataStorageRoot), - new BuildDataManager(dataStorageRoot, true), BuildLoggingManager.DEFAULT); + new BuildDataManager(dataStorageRoot, true), new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), javaBuilderLogger)); try { - new IncProjectBuilder( projectDescriptor, BuilderRegistry.getInstance(), Collections.emptyMap(), CanceledStatus.NULL ).build( @@ -343,11 +226,31 @@ public abstract class IncrementalTestCase extends TestCase { ); final String expected = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(getBaseDir() + ".log"))); - final String actual = StringUtil.convertLineSeparators(FileUtil.loadFile(new File(getWorkDir() + ".log"))); + final String actual = javaBuilderLogger.myLog.toString(); assertEquals(expected, actual); } finally { projectDescriptor.release(); } } + + private static class TestJavaBuilderLogger implements JavaBuilderLogger { + private final String myRoot; + private final StringBuilder myLog; + + public TestJavaBuilderLogger(String root) { + myRoot = root; + myLog = new StringBuilder(); + } + + @Override + public void log(String line) { + myLog.append(StringUtil.trimStart(line, myRoot)).append('\n'); + } + + @Override + public boolean isEnabled() { + return true; + } + } } diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/VolatileFileAppender.java b/jps/jps-builders/testSrc/org/jetbrains/ether/VolatileFileAppender.java deleted file mode 100644 index 9c1947bb8d07..000000000000 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/VolatileFileAppender.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.ether; - -import org.apache.log4j.FileAppender; - -import java.io.IOException; -import java.io.OutputStream; -import java.io.OutputStreamWriter; - -/** - * Created with IntelliJ IDEA. - * User: db - * Date: 02.02.12 - * Time: 18:27 - * To change this template use File | Settings | File Templates. - */ - -public class VolatileFileAppender extends FileAppender { - private OutputStream myStream = null; - - public VolatileFileAppender() { - super(); - IncrementalTestCase.setAppender(this); - } - - void closeStream () throws IOException { - if (myStream != null){ - myStream.close(); - myStream = null; - } - } - - @Override - protected OutputStreamWriter createWriter(final OutputStream os) { - myStream = os; - return super.createWriter(os); - } -} diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java index 36916eda7fe9..48c5028d74eb 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java @@ -29,6 +29,7 @@ import org.jetbrains.jps.Project; import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.artifacts.Artifact; import org.jetbrains.jps.incremental.*; +import org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.ProjectTimestamps; @@ -143,7 +144,8 @@ public abstract class ArtifactBuilderTestCase extends UsefulTestCase { final File dataStorageRoot = Paths.getDataStorageRoot(myProject); ProjectTimestamps timestamps = new ProjectTimestamps(dataStorageRoot); BuildDataManager dataManager = new BuildDataManager(dataStorageRoot, true); - return new ProjectDescriptor(myProject, new FSState(true), timestamps, dataManager, new BuildLoggingManager(myArtifactBuilderLogger)); + return new ProjectDescriptor(myProject, new FSState(true), timestamps, dataManager, new BuildLoggingManager(myArtifactBuilderLogger, + new JavaBuilderLoggerImpl())); } catch (IOException e) { throw new RuntimeException(e);