Skip to content

Commit

Permalink
fix: 修复问题#421
Browse files Browse the repository at this point in the history
  • Loading branch information
dukun committed May 8, 2024
1 parent 5f1bb1b commit 3fad3a8
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,16 @@ public void begin(int total) {
}
}

@Override
public boolean isSkip(Class<?> clazz, int index) {
for (final Progress progress : progresses) {
if(progress.isSkip(clazz, index)) {
return true;
}
}
return false;
}

@Override
public void progressOnSuccess(Class<?> clazz, int index) {
for (final Progress progress : progresses) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,20 @@ interface Progress {
*/
void begin(int total);

/**
* 是否跳过
* <p>
* 可以通过这个方法来控制当前类字节码处理是否需要跳过,跳过的类将不会进行字节码增强。
*
* @param clazz 当前进行行变的类
* @param index 当前形变类的序号,从0开始
* @return TRUE | FALSE
* @since sandbox-api:1.4.1
*/
default boolean isSkip(Class<?> clazz, int index) {
return false;
}

/**
* 进度报告(成功)
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ public void begin(int total) {
}

@Override
public void progressOnSuccess(Class clazz, int index) {
public void progressOnSuccess(Class<?> clazz, int index) {
onSuccessCntRef.incrementAndGet();
}

@Override
public void progressOnFailed(Class clazz, int index, Throwable cause) {
public void progressOnFailed(Class<?> clazz, int index, Throwable cause) {
onFailedCntRef.incrementAndGet();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,9 +83,9 @@ private void finishProgress(final Progress progress, final int cCnt, final int m
* 形变观察所影响的类
*/
private void reTransformClasses(
final int watchId,
final List<Class<?>> waitingReTransformClasses,
final Progress progress) {
final int watchId,
final List<Class<?>> waitingReTransformClasses,
final Progress progress) {
// 需要形变总数
final int total = waitingReTransformClasses.size();

Expand All @@ -103,24 +103,48 @@ private void reTransformClasses(
for (final Class<?> waitingReTransformClass : waitingReTransformClasses) {
index++;
try {

// 增强跳过判断,跳过的仍然计数
if (null != progress) {
try {
progress.progressOnSuccess(waitingReTransformClass, index);
if (progress.isSkip(waitingReTransformClass, index)) {
logger.debug("watch={} in module={} on {} is skipped at index={};total={};",
watchId, coreModule.getUniqueId(), waitingReTransformClass,
index - 1, total
);
continue;
}
} catch (Throwable cause) {
// 在进行进度汇报的过程中抛出异常,直接进行忽略,因为不影响形变的主体流程
// 仅仅只是一个汇报作用而已
logger.warn("watch={} in module={} on {} report progressOnSuccess occur exception at index={};total={};",
logger.warn("watch={} in module={} on {} check skip occur exception at index={};total={};",
watchId, coreModule.getUniqueId(), waitingReTransformClass,
index - 1, total,
cause
);
}
}

// 字节码增强
inst.retransformClasses(waitingReTransformClass);
logger.info("watch={} in module={} single reTransform {} success, at index={};total={};",
watchId, coreModule.getUniqueId(), waitingReTransformClass,
index - 1, total
);

// 增强成功通知
if(null != progress) {
try {
progress.progressOnSuccess(waitingReTransformClass, index);
} catch (Throwable cause) {
// 在进行进度汇报的过程中抛出异常,直接进行忽略,因为不影响形变的主体流程
// 仅仅只是一个汇报作用而已
logger.warn("watch={} in module={} on {} report progressOnSuccess occur exception at index={};total={};",
watchId, coreModule.getUniqueId(), waitingReTransformClass,
index - 1, total,
cause
);
}
}

} catch (Throwable causeOfReTransform) {
logger.warn("watch={} in module={} single reTransform {} failed, at index={};total={}. ignore this class.",
watchId, coreModule.getUniqueId(), waitingReTransformClass,
Expand Down Expand Up @@ -195,7 +219,7 @@ private int watch(final Matcher matcher,
inst.addTransformer(sandClassFileTransformer, true);

//设定Native支持
if(isNativeSupported) {
if (isNativeSupported) {
inst.setNativeMethodPrefix(sandClassFileTransformer, sandClassFileTransformer.getNativePrefix());
logger.debug("watch={} in module={} enable native method supported, prefix={}",
watchId,
Expand All @@ -218,7 +242,7 @@ private int watch(final Matcher matcher,
try {

// 应用JVM
reTransformClasses(watchId,waitingReTransformClasses, progress);
reTransformClasses(watchId, waitingReTransformClasses, progress);
// 计数
cCnt += sandClassFileTransformer.getAffectStatistic().cCnt();
mCnt += sandClassFileTransformer.getAffectStatistic().mCnt();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

public class TestIssues217 {

class GetMatcherModuleEventWatcher extends EmptyModuleEventWatcher {
static class GetMatcherModuleEventWatcher extends EmptyModuleEventWatcher {

private EventWatchCondition condition;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ public void begin(int total) {
}

@Override
public void progressOnSuccess(Class clazz, int index) {
public void progressOnSuccess(Class<?> clazz, int index) {
progress(index);
}

@Override
public void progressOnFailed(Class clazz, int index, Throwable cause) {
public void progressOnFailed(Class<?> clazz, int index, Throwable cause) {
progress(index);
}

Expand Down

0 comments on commit 3fad3a8

Please sign in to comment.