Переглянути джерело

an additional interface that custom message handlers may choose to implement. Implementors get callbacks when a build is starting and when a build has finished (allowing them to perform before and after build processing, like closing output files etc..).

tags/POST_MEMORY_CHANGES
acolyer 18 роки тому
джерело
коміт
6c16b86a6a

+ 35
- 0
bridge/src/org/aspectj/bridge/ILifecycleAware.java Переглянути файл

@@ -0,0 +1,35 @@
/* *******************************************************************
* Copyright (c) 2006 Contributors.
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://eclipse.org/legal/epl-v10.html
*
* Contributors:
* Adrian Colyer Initial implementation
* ******************************************************************/
package org.aspectj.bridge;

/**
* Interface that can be implemented by MessageHandlers that need to
* perform some additional processing when a build is starting and
* when it has finished.
*
* @author Adrian Colyer
* @since 1.5.1
*/
public interface ILifecycleAware {

/**
* called when a build starts
*/
void buildStarting(boolean isIncremental);
/**
* called when a batch build finishes
*
*/
void buildFinished(boolean wasIncremental);
}

+ 7
- 0
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/core/builder/AjBuildManager.java Переглянути файл

@@ -52,6 +52,7 @@ import org.aspectj.asm.IProgramElement;
import org.aspectj.asm.internal.ProgramElement;
import org.aspectj.bridge.AbortException;
import org.aspectj.bridge.CountingMessageHandler;
import org.aspectj.bridge.ILifecycleAware;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.IMessageHandler;
import org.aspectj.bridge.IProgressListener;
@@ -172,6 +173,9 @@ public class AjBuildManager implements IOutputClassFileNameProvider,IBinarySourc
boolean ret = true;
batchCompile = batch;
if (baseHandler instanceof ILifecycleAware) {
((ILifecycleAware)baseHandler).buildStarting(!batch);
}
int phase = batch ? CompilationAndWeavingContext.BATCH_BUILD : CompilationAndWeavingContext.INCREMENTAL_BUILD;
ContextToken ct = CompilationAndWeavingContext.enteringPhase(phase ,buildConfig);
try {
@@ -311,6 +315,9 @@ public class AjBuildManager implements IOutputClassFileNameProvider,IBinarySourc
CompilationAndWeavingContext.leavingPhase(ct);
} finally {
if (baseHandler instanceof ILifecycleAware) {
((ILifecycleAware)baseHandler).buildFinished(!batch);
}
if (zos != null) {
closeOutputStream(buildConfig.getOutputJar());
}

Завантаження…
Відмінити
Зберегти