Skip to content

Commit d29fad4

Browse files
committed
add auto anno field
1 parent cbe4378 commit d29fad4

2 files changed

Lines changed: 95 additions & 85 deletions

File tree

src/main/java/io/moyada/feign/help/support/SyntaxTreeMaker.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ public class SyntaxTreeMaker {
3333
private final Object namesInstance;
3434

3535
// 类型集合
36-
private final Types types;
37-
private final Symtab symtab;
36+
public final Types types;
37+
public final Symtab symtab;
3838

3939
// null 表达式
4040
public final JCTree.JCLiteral nullNode;

src/main/java/io/moyada/feign/help/visitor/FallbackFactoryTranslator.java

Lines changed: 93 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,6 @@ public void visitClassDef(JCTree.JCClassDecl jcClassDecl) {
6666
super.appendClass(jcClassDecl, classDecl);
6767
// 修改@FeignClient注解
6868
updateFeignClient(jcClassDecl);
69-
70-
printer.info(jcClassDecl.toString());
7169
}
7270

7371
/**
@@ -145,7 +143,8 @@ private JCTree.JCBlock newFactory(JCTree.JCClassDecl interClass) {
145143
private void updateFeignClient(JCTree.JCClassDecl interClass) {
146144
for (JCTree.JCAnnotation anno : interClass.mods.annotations) {
147145
String className = anno.annotationType.type.toString();
148-
if (!className.equals("org.springframework.cloud.openfeign.FeignClient")) {
146+
if (!className.equals("org.springframework.cloud.openfeign.FeignClient") &&
147+
!className.equals("org.springframework.cloud.netflix.feign.FeignClient")) {
149148
continue;
150149
}
151150

@@ -161,97 +160,108 @@ private void updateFeignClient(JCTree.JCClassDecl interClass) {
161160
}
162161
hasName = true;
163162

164-
JCTree.JCFieldAccess indent =(JCTree.JCFieldAccess) assign.rhs;
165-
166-
printer.info(indent.name.toString());
167-
printer.info(indent.type.toString());
168-
printer.info(indent.selected.toString());
169-
printer.info(indent.selected.getClass().toString());
170-
printer.info(indent.toString());
171-
172-
printer.info("sym ====");
173-
// [INFO] class com.sun.tools.javac.code.Symbol$ClassSymbol
174-
printer.info(indent.sym.getClass().toString());
175-
// [INFO] name class
176-
printer.info("name " + indent.sym.name.toString());
177-
// type class com.sun.tools.javac.code.Type$ErrorType:so.dian.azeroth.guldan.components.client.ManageSubjectClient.FallbackFactory.class
178-
printer.info("type " + indent.sym.type.getClass().toString() + ":" + indent.sym.type);
179-
Type.ErrorType errorType = (Type.ErrorType) indent.sym.type;
180-
// [INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
181-
// [INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory.class
182-
printer.info(errorType.getOriginalType().toString());
183-
printer.info(errorType.tsym.toString());
184-
185-
// owner class com.sun.tools.javac.code.Symbol$ClassSymbol:so.dian.azeroth.guldan.components.client.ManageSubjectClient.FallbackFactory
186-
printer.info("owner " + indent.sym.owner.getClass().toString() + ":" + indent.sym.owner);
187-
188-
Symbol.ClassSymbol owner = (Symbol.ClassSymbol) indent.sym.owner;
189-
newSymbol(owner);
190-
191-
//[INFO] fname so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory.class
192-
printer.info("fname " + indent.sym.getQualifiedName().toString());
193-
//[INFO] kind 63
194-
printer.info("kind " + indent.sym.kind);
195-
//[INFO] flags_field 1073741833
196-
printer.info("flags_field" + indent.sym.flags_field);
197-
198-
// Name sname = syntaxTreeMaker.getName("class");
199-
//
200-
// new Symbol.ClassSymbol();
201-
// JCTree.JCFieldAccess classIdent =
202-
// treeMaker.Select(treeMaker.Ident(interClass.sym.packge()), interClass.sym.name);
203-
// String fname = interClass.sym.toString() + "$FallbackFactory.class";
204-
// printer.info(fname);
205-
//
206-
// Symbol.ClassSymbol symbol = syntaxTreeMaker.getTypeElement(fname);
207-
// printer.info("" + (symbol == null));
208-
209-
// Name infer = syntaxTreeMaker.getName(interClass.name.toString() + ".FallbackFactory.class");
210-
// JCTree.JCExpression select = treeMaker.Ident(infer);
211-
// assign.rhs = select;
212-
// printer.info(" > ");
213-
//
214-
//// printer.info(select.name.toString());
215-
//// printer.info(select.sym.toString());
216-
//// printer.info(select.type.toString());
217-
//// printer.info(select.selected.toString());
218-
// printer.info(select.toString());
219-
220-
printer.info("-----------");
163+
JCTree.JCFieldAccess select = newSymbol(interClass);
164+
assign.rhs = select;
221165
}
222166
}
223167

224168
if (!hasName) {
225169
JCTree.JCIdent l = treeMaker.Ident(syntaxTreeMaker.getName("fallbackFactory"));
226-
Name infer = syntaxTreeMaker.getName(interClass.name.toString() + ".FallbackFactory.class");
227-
JCTree.JCExpression r = treeMaker.Ident(infer);
170+
JCTree.JCFieldAccess r = newSymbol(interClass);
228171
JCTree.JCAssign ar = treeMaker.Assign(l, r);
229172
anno.args = args.append(ar);
230173
}
231174
}
232175

233176
}
234177

235-
private void newSymbol(Symbol.ClassSymbol owner) {
236-
printer.info("++^^^^^^^^^++++");
237-
//[INFO] name FallbackFactory
238-
Name sname = syntaxTreeMaker.getName("FallbackFactory");
239-
//[INFO] type class com.sun.tools.javac.code.Type$ErrorType:so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
240-
//[INFO] owner class com.sun.tools.javac.code.Symbol$ClassSymbol:so.dian.azeroth.guldan.components.client.ManageInfoClient
241-
//[INFO] fname so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
242-
printer.info("name " + owner.name.toString());
243-
printer.info("type " + owner.type.getClass().toString() + ":" + owner.type);
244-
printer.info("owner " + owner.owner.getClass().toString() + ":" + owner.owner);
245-
printer.info("fname " + owner.getQualifiedName().toString());
246-
//[INFO] kind 63
247-
printer.info("kind " + owner.kind);
248-
//[INFO] flags_field 1073741833
249-
printer.info("flags_field" + owner.flags_field);
250-
251-
// [INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
252-
//[INFO] FallbackFactory
253-
//[INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
254-
//[INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient
255-
// Symbol.ClassSymbol owner1 = new Symbol.ClassSymbol();
178+
private JCTree.JCFieldAccess newSymbol(JCTree.JCClassDecl interClass) {
179+
Symbol.ClassSymbol factorySymbol = factorySymbol(interClass.sym, "FallbackFactory");
180+
Symbol.ClassSymbol factoryClassSymbol = factorySymbol(factorySymbol, "class");
181+
Name fname = syntaxTreeMaker.getName("class");
182+
183+
Type ut = syntaxTreeMaker.symtab.errType;
184+
Type.ErrorType ftype = new Type.ErrorType(factorySymbol, ut);
185+
Type.ErrorType errType = new Type.ErrorType(ftype, factoryClassSymbol);
186+
187+
JCTree.JCFieldAccess classIdent = treeMaker.Select(treeMaker.Ident(syntaxTreeMaker.getName("UserRemote")), syntaxTreeMaker.getName("FallbackFactory"));
188+
classIdent.setType(ftype);
189+
classIdent.sym = factorySymbol;
190+
191+
// UserRemote.FallbackFactory
192+
193+
JCTree.JCFieldAccess select = treeMaker.Select(classIdent, fname);
194+
select.setType(errType);
195+
return select;
196+
}
197+
198+
// Name sname = syntaxTreeMaker.getName("class");
199+
// Type.ErrorType stype = new Type.ErrorType(interClass.sym, factorySymbol);
200+
//
201+
// Type.ErrorType originalType = (Type.ErrorType) errorType.getOriginalType();
202+
// printer.info(originalType.getOriginalType().getClass() + ":" + originalType.getOriginalType().toString());
203+
// printer.info(originalType.tsym.getClass() + ":" + originalType.tsym.toString());
204+
//
205+
//
206+
// //[INFO] owner class com.sun.tools.javac.code.Symbol$ClassSymbol:so.dian.azeroth.guldan.components.client.ManageInfoClient
207+
// printer.info("owner " + owner.owner.getClass().toString() + ":" + owner.owner);
208+
// Symbol.ClassSymbol sowner = interClass.sym;
209+
//
210+
// //[INFO] kind 63
211+
// printer.info("kind " + owner.kind);
212+
// //[INFO] flags_field 1073741833
213+
// printer.info("flags_field" + owner.flags_field);
214+
//
215+
// Symbol.ClassSymbol fowner = new Symbol.ClassSymbol(1073741833L, sname, stype, sowner);
216+
// return fowner;
217+
// }
218+
219+
private Symbol.ClassSymbol factorySymbol(Symbol.ClassSymbol owner, String name) {
220+
Name sname = syntaxTreeMaker.getName(name);
221+
Type ut = syntaxTreeMaker.symtab.errType;
222+
Type.ErrorType stype = new Type.ErrorType(owner, ut);
223+
Symbol.ClassSymbol fowner = new Symbol.ClassSymbol(1073741833L, sname, stype, owner);
224+
return fowner;
256225
}
226+
227+
// private Symbol.ClassSymbol factorySymbol(JCTree.JCClassDecl interClass, Symbol.ClassSymbol owner) {
228+
// printer.info("++^^^^^^^^^++++");
229+
// //[INFO] name FallbackFactory
230+
// Name sname = syntaxTreeMaker.getName("FallbackFactory");
231+
// printer.info("name " + owner.name.toString());
232+
//
233+
// //[INFO] type class com.sun.tools.javac.code.Type$ErrorType:so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
234+
// printer.info("type " + owner.type.getClass().toString() + ":" + owner.type);
235+
// Type.ErrorType errorType = (Type.ErrorType) owner.type;
236+
// // [INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory
237+
// // [INFO] so.dian.azeroth.guldan.components.client.ManageInfoClient.FallbackFactory.class
238+
// Type ut = syntaxTreeMaker.symtab.errType;
239+
// printer.info(ut.getClass() + ":" + ut.toString());
240+
// printer.info(errorType.getOriginalType().getClass() + ":" + errorType.getOriginalType().toString());
241+
// printer.info(errorType.tsym.getClass() + ":" + errorType.tsym.toString());
242+
//
243+
// Type.ErrorType stype = new Type.ErrorType(interClass.sym, ut);
244+
//
245+
// Type.ErrorType originalType = (Type.ErrorType) errorType.getOriginalType();
246+
// printer.info(originalType.getOriginalType().getClass() + ":" + originalType.getOriginalType().toString());
247+
// printer.info(originalType.tsym.getClass() + ":" + originalType.tsym.toString());
248+
//
249+
//
250+
// Symbol.ClassSymbol tsym = (Symbol.ClassSymbol) originalType.tsym;
251+
// printer.info(tsym.name.toString());
252+
// printer.info(tsym.type.getClass() + ":" + tsym.type.toString());
253+
// printer.info(tsym.owner.getClass() + ":" + tsym.owner.toString());
254+
//
255+
// //[INFO] owner class com.sun.tools.javac.code.Symbol$ClassSymbol:so.dian.azeroth.guldan.components.client.ManageInfoClient
256+
// printer.info("owner " + owner.owner.getClass().toString() + ":" + owner.owner);
257+
// Symbol.ClassSymbol sowner = interClass.sym;
258+
//
259+
// //[INFO] kind 63
260+
// printer.info("kind " + owner.kind);
261+
// //[INFO] flags_field 1073741833
262+
// printer.info("flags_field" + owner.flags_field);
263+
//
264+
// Symbol.ClassSymbol fowner = new Symbol.ClassSymbol(1073741833L, sname, stype, sowner);
265+
// return fowner;
266+
// }
257267
}

0 commit comments

Comments
 (0)