Skip to content
Open

fixes #141

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions aspectd_impl/lib/aop_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -106,16 +106,16 @@ import 'package:aspectd/aspectd.dart';
// }

@Aspect()
@pragma("vm:entry-point")
@pragma('vm:entry-point')
class InjectDemo{
@Inject("package:example/main.dart","","+injectDemo", lineNum:27)
@pragma("vm:entry-point")
@Inject('package:example/main.dart','','+injectDemo', lineNum:27)
@pragma('vm:entry-point')
static void onInjectDemoHook1() {
print('Aspectd:KWLM51');
}

@Inject("package:example/main.dart","C","+C", lineNum:195)
@pragma("vm:entry-point")
@Inject('package:example/main.dart','C','+C', lineNum:195)
@pragma('vm:entry-point')
static void onInjectDemoHook3() {
print('Aspectd:KWLM52');
}
Expand Down
6 changes: 2 additions & 4 deletions example/lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class Observer {
}

void injectDemo(List<Observer> observers) {
int a = 10;
const int a = 10;
if (a > 5) {
print('[KWLM]:if1');
}
Expand Down Expand Up @@ -191,9 +191,7 @@ class B {
}

class C with A,B {
C(){

}
C();
void fc() {

}
Expand Down
2 changes: 1 addition & 1 deletion lib/src/flutter_frontend_server/server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class _FlutterFrontendCompiler implements frontend.CompilerInterface {
@override
Future<bool> compile(String filename, ArgResults options,
{IncrementalCompiler generator}) async {
List<FlutterProgramTransformer> transformers =
final List<FlutterProgramTransformer> transformers =
FlutterTarget.flutterProgramTransformers;
if (!transformers.contains(aspectdAopTransformer)) {
transformers.add(aspectdAopTransformer);
Expand Down
4 changes: 1 addition & 3 deletions lib/src/transformer/aop/aop_transformer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,7 @@ class AspectdAopTransformer extends FlutterProgramTransformer {
continue;
}
final AopItemInfo aopItemInfo = _processAopMember(member);
if (aopItemInfo != null) {
aopItemInfoList.add(aopItemInfo);
}
aopItemInfoList.add(aopItemInfo);
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion lib/src/transformer/aop/aop_utils.dart
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ class AopUtils {
//重定向到AOP的函数体中去
final Arguments pointCutConstructorArguments = Arguments.empty();
final List<MapEntry> sourceInfos = <MapEntry>[];
sourceInfo?.forEach((String key, String value) {
sourceInfo.forEach((String key, String value) {
sourceInfos.add(MapEntry(StringLiteral(key), StringLiteral(value)));
});
pointCutConstructorArguments.positional.add(MapLiteral(sourceInfos));
Expand Down
15 changes: 5 additions & 10 deletions lib/src/transformer/aop/aspectd_aop_call_visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class AspectdAopCallVisitor extends Transformer {
}
final AopItemInfo aopItemInfo = _filterAopItemInfo(
_aopItemInfoList, procedureImportUri, cls.name, functionName, true);
if (aopItemInfo?.mode == AopMode.Call &&
if (aopItemInfo.mode == AopMode.Call &&
AopUtils.checkIfSkipAOP(aopItemInfo, _curLibrary) == false) {
return transformConstructorInvocation(
constructorInvocation, aopItemInfo);
Expand All @@ -74,8 +74,7 @@ class AspectdAopCallVisitor extends Transformer {
?.targetReference?.canonicalName?.parent?.parent?.parent?.name;
}
//Library Static
if ((procedureName?.length ?? 0) > 0 &&
tempName != null &&
if ((procedureName.length ?? 0) > 0 &&
tempName.isNotEmpty &&
_libraryMap[tempName] != null) {
final Library originalLibrary = _libraryMap[tempName];
Expand Down Expand Up @@ -109,7 +108,7 @@ class AspectdAopCallVisitor extends Transformer {
final String libraryImportUri = library.importUri.toString();
final AopItemInfo aopItemInfo = _filterAopItemInfo(
_aopItemInfoList, libraryImportUri, '', procedure.name.name, true);
if (aopItemInfo?.mode == AopMode.Call &&
if (aopItemInfo.mode == AopMode.Call &&
AopUtils.checkIfSkipAOP(aopItemInfo, _curLibrary) == false) {
return transformLibraryStaticMethodInvocation(
staticInvocation, procedure, aopItemInfo);
Expand All @@ -120,7 +119,7 @@ class AspectdAopCallVisitor extends Transformer {
(cls.parent as Library).importUri.toString();
final AopItemInfo aopItemInfo = _filterAopItemInfo(_aopItemInfoList,
procedureImportUri, cls.name, procedure.name.name, true);
if (aopItemInfo?.mode == AopMode.Call &&
if (aopItemInfo.mode == AopMode.Call &&
AopUtils.checkIfSkipAOP(aopItemInfo, _curLibrary) == false) {
return transformClassStaticMethodInvocation(
staticInvocation, aopItemInfo);
Expand Down Expand Up @@ -154,7 +153,7 @@ class AspectdAopCallVisitor extends Transformer {
}
final AopItemInfo aopItemInfo = _filterAopItemInfo(
_aopItemInfoList, importUri, clsName, methodName, false);
if (aopItemInfo?.mode == AopMode.Call &&
if (aopItemInfo.mode == AopMode.Call &&
AopUtils.checkIfSkipAOP(aopItemInfo, _curLibrary) == false) {
return transformInstanceMethodInvocation(methodInvocation, aopItemInfo);
}
Expand Down Expand Up @@ -194,7 +193,6 @@ class AspectdAopCallVisitor extends Transformer {
//Class Constructor Invocation
StaticInvocation transformConstructorInvocation(
ConstructorInvocation constructorInvocation, AopItemInfo aopItemInfo) {
assert(aopItemInfo.mode != null);

if (_invocationExpressionMapping[constructorInvocation] != null) {
return _invocationExpressionMapping[constructorInvocation];
Expand Down Expand Up @@ -236,7 +234,6 @@ class AspectdAopCallVisitor extends Transformer {
//Instance Method Invocation
MethodInvocation transformInstanceMethodInvocation(
MethodInvocation methodInvocation, AopItemInfo aopItemInfo) {
assert(aopItemInfo.mode != null);

if (_invocationExpressionMapping[methodInvocation] != null) {
return _invocationExpressionMapping[methodInvocation];
Expand Down Expand Up @@ -362,7 +359,6 @@ class AspectdAopCallVisitor extends Transformer {
//Class Static Method Invocation
StaticInvocation transformClassStaticMethodInvocation(
StaticInvocation staticInvocation, AopItemInfo aopItemInfo) {
assert(aopItemInfo.mode != null);

if (_invocationExpressionMapping[staticInvocation] != null) {
return _invocationExpressionMapping[staticInvocation];
Expand Down Expand Up @@ -430,7 +426,6 @@ class AspectdAopCallVisitor extends Transformer {
StaticInvocation staticInvocation,
Procedure procedure,
AopItemInfo aopItemInfo) {
assert(aopItemInfo.mode != null);

if (_invocationExpressionMapping[staticInvocation] != null) {
return _invocationExpressionMapping[staticInvocation];
Expand Down
18 changes: 9 additions & 9 deletions lib/src/transformer/aop/aspectd_aop_execute_visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ class AspectdAopExecuteVisitor extends RecursiveVisitor<void> {

@override
void visitLibrary(Library library) {
String importUri = library.importUri.toString();
final String importUri = library.importUri.toString();
bool matches = false;
int aopItemInfoListLen = _aopItemInfoList.length;
final int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && !matches; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if ((aopItemInfo.isRegex &&
RegExp(aopItemInfo.importUri).hasMatch(importUri)) ||
(!aopItemInfo.isRegex && importUri == aopItemInfo.importUri)) {
Expand All @@ -39,11 +39,11 @@ class AspectdAopExecuteVisitor extends RecursiveVisitor<void> {

@override
void visitClass(Class cls) {
String clsName = cls.name;
final String clsName = cls.name;
bool matches = false;
int aopItemInfoListLen = _aopItemInfoList.length;
final int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && !matches; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if ((aopItemInfo.isRegex &&
RegExp(aopItemInfo.clsName).hasMatch(clsName)) ||
(!aopItemInfo.isRegex && clsName == aopItemInfo.clsName)) {
Expand All @@ -58,11 +58,11 @@ class AspectdAopExecuteVisitor extends RecursiveVisitor<void> {

@override
void visitProcedure(Procedure node) {
String procedureName = node.name.name;
final String procedureName = node.name.name;
AopItemInfo matchedAopItemInfo;
int aopItemInfoListLen = _aopItemInfoList.length;
final int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && matchedAopItemInfo == null; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if ((aopItemInfo.isRegex &&
RegExp(aopItemInfo.methodName).hasMatch(procedureName)) ||
(!aopItemInfo.isRegex && procedureName == aopItemInfo.methodName)) {
Expand Down
72 changes: 34 additions & 38 deletions lib/src/transformer/aop/aspectd_aop_inject_visitor.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,11 @@ class AspectdAopInjectVisitor extends RecursiveVisitor<void> {

@override
void visitLibrary(Library library) {
String importUri = library.importUri.toString();
final String importUri = library.importUri.toString();
bool matches = false;
int aopItemInfoListLen = _aopItemInfoList.length;
final int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && !matches; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if (!aopItemInfo.isRegex && importUri == aopItemInfo.importUri) {
matches = true;
break;
Expand All @@ -68,11 +68,11 @@ class AspectdAopInjectVisitor extends RecursiveVisitor<void> {

@override
void visitClass(Class cls) {
String clsName = cls.name;
final String clsName = cls.name;
bool matches = false;
int aopItemInfoListLen = _aopItemInfoList.length;
final int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && !matches; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if (!aopItemInfo.isRegex && clsName == aopItemInfo.clsName) {
matches = true;
break;
Expand All @@ -86,10 +86,10 @@ class AspectdAopInjectVisitor extends RecursiveVisitor<void> {
@override
void visitConstructor(Constructor constructor) {
AopItemInfo matchedAopItemInfo;
int aopItemInfoListLen = _aopItemInfoList.length;
Class cls = constructor.parent;
final int aopItemInfoListLen = _aopItemInfoList.length;
final Class cls = constructor.parent;
for (int i = 0; i < aopItemInfoListLen && matchedAopItemInfo == null; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if (cls.name +
(constructor.name.name == ''
? ''
Expand All @@ -115,11 +115,11 @@ class AspectdAopInjectVisitor extends RecursiveVisitor<void> {

@override
void visitProcedure(Procedure node) {
String procedureName = node.name.name;
final String procedureName = node.name.name;
AopItemInfo matchedAopItemInfo;
int aopItemInfoListLen = _aopItemInfoList.length;
final int aopItemInfoListLen = _aopItemInfoList.length;
for (int i = 0; i < aopItemInfoListLen && matchedAopItemInfo == null; i++) {
AopItemInfo aopItemInfo = _aopItemInfoList[i];
final AopItemInfo aopItemInfo = _aopItemInfoList[i];
if (!aopItemInfo.isRegex &&
procedureName == aopItemInfo.methodName &&
aopItemInfo.isStatic == node.isStatic) {
Expand Down Expand Up @@ -221,15 +221,13 @@ class AspectdAopInjectVisitor extends RecursiveVisitor<void> {
@override
Block visitBlock(Block node) {
node.visitChildren(this);
if (_curAopStatementsInsertInfo != null) {
final Library library = _curAopStatementsInsertInfo.library;
final Source source = _curAopStatementsInsertInfo.source;
final AopItemInfo aopItemInfo = _curAopStatementsInsertInfo.aopItemInfo;
final List<Statement> aopInsertStatements =
_curAopStatementsInsertInfo.aopInsertStatements;
insertStatementsToBody(
library, source, node, aopItemInfo, aopInsertStatements);
}
final Library library = _curAopStatementsInsertInfo.library;
final Source source = _curAopStatementsInsertInfo.source;
final AopItemInfo aopItemInfo = _curAopStatementsInsertInfo.aopItemInfo;
final List<Statement> aopInsertStatements =
_curAopStatementsInsertInfo.aopInsertStatements;
insertStatementsToBody(
library, source, node, aopItemInfo, aopInsertStatements);
return node;
}

Expand Down Expand Up @@ -374,23 +372,21 @@ class AspectdAopInjectVisitor extends RecursiveVisitor<void> {
}

void checkIfInsertInFunction(FunctionNode functionNode) {
if (_curAopStatementsInsertInfo != null) {
final int lineFrom = AopUtils.getLineNumBySourceAndOffset(
_curAopStatementsInsertInfo.source, functionNode.fileOffset);
final int lineTo = AopUtils.getLineNumBySourceAndOffset(
_curAopStatementsInsertInfo.source, functionNode.fileEndOffset);
final int expectedLineNum =
_curAopStatementsInsertInfo.aopItemInfo.lineNum;
if (expectedLineNum >= lineFrom && expectedLineNum <= lineTo) {
final Library library = _curAopStatementsInsertInfo.library;
final Source source = _curAopStatementsInsertInfo.source;
final AopItemInfo aopItemInfo = _curAopStatementsInsertInfo.aopItemInfo;
final List<Statement> aopInsertStatements =
_curAopStatementsInsertInfo.aopInsertStatements;
_curAopStatementsInsertInfo = null;
functionNode.body = insertStatementsToBody(
library, source, functionNode, aopItemInfo, aopInsertStatements);
}
final int lineFrom = AopUtils.getLineNumBySourceAndOffset(
_curAopStatementsInsertInfo.source, functionNode.fileOffset);
final int lineTo = AopUtils.getLineNumBySourceAndOffset(
_curAopStatementsInsertInfo.source, functionNode.fileEndOffset);
final int expectedLineNum =
_curAopStatementsInsertInfo.aopItemInfo.lineNum;
if (expectedLineNum >= lineFrom && expectedLineNum <= lineTo) {
final Library library = _curAopStatementsInsertInfo.library;
final Source source = _curAopStatementsInsertInfo.source;
final AopItemInfo aopItemInfo = _curAopStatementsInsertInfo.aopItemInfo;
final List<Statement> aopInsertStatements =
_curAopStatementsInsertInfo.aopInsertStatements;
_curAopStatementsInsertInfo = null;
functionNode.body = insertStatementsToBody(
library, source, functionNode, aopItemInfo, aopInsertStatements);
}
}

Expand Down