@@ -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