সাইকেল ফাইন্ডার টুল

ব্যবহার

এখানে দুটি শ্রেণীর মধ্যে একটি চক্র সহ একটি সাধারণ উদাহরণ, ফু এবং বার।

cat Foo.java
package mypkg;
public class Foo {
  Bar myBar;
}

cat Bar.java
package mypkg;
public class Bar {
  Foo myFoo;
}

cycle_finder Foo.java Bar.java
acceptAST: mypkg/Bar.java
acceptAST: mypkg/Foo.java

***** Found reference cycle *****
Bar -> (field myFoo with type Foo)
Foo -> (field myBar with type Bar)
----- Full Types -----
Lmypkg/Bar;
Lmypkg/Foo;

1 CYCLES FOUND.

আউটপুটে আপনি প্রথমে প্রতিটি জাভা ফাইল পার্স করার জন্য acceptAST দেখতে পাবেন। এই শুধু তথ্যপূর্ণ লগিং.

প্রতিটি চক্রের জন্য, দুটি তালিকা প্রিন্ট করা হবে। প্রথম তালিকায় চক্রের বর্ণনা রয়েছে। প্রতিটি লাইন রেফারেন্স গ্রাফে একটি প্রান্ত তালিকাভুক্ত করে। প্রান্তের বিবরণটি উত্সের ধরনটি দেখাবে এবং তারপরে একটি বর্ণনা দ্বারা কীভাবে উত্সের প্রকারটি লক্ষ্যের প্রকারকে নির্দেশ করতে পারে।

দ্বিতীয় তালিকা, Full Types অধীনে চক্রের প্রতিটি প্রকারের জন্য অনন্য টাইপ কীগুলি দেখায়। এটি দরকারী কারণ এটি প্রতিটি ধরণের সম্পূর্ণ প্যাকেজ সরবরাহ করে।

তালিকা দমন করুন

কিছু সনাক্ত করা চক্রের জন্য কোন সংশোধনমূলক পদক্ষেপের প্রয়োজন হবে না। এটি হতে পারে কারণ চক্রটিতে দীর্ঘস্থায়ী বস্তু রয়েছে যেগুলিকে ডিলোকেট করার প্রয়োজন নেই৷ অথবা টুলটি নির্দিষ্ট ক্ষেত্রের প্রকারের উপর ভিত্তি করে একটি তাত্ত্বিক চক্র সনাক্ত করতে পারে যেখানে এটি প্রমাণযোগ্য যে জড়িত বস্তুগুলি কখনই একটি চক্র গঠন করবে না। এই ক্ষেত্রে আমরা এই চক্রের রিপোর্ট না করার জন্য সাপ্রেস-লিস্ট ফাইল ব্যবহার করতে পারি।

টুলটি --suppress-list বিকল্প ব্যবহার করে সাপ্রেস-লিস্ট ফাইল গ্রহণ করে। সাপ্রেস-লিস্ট ফাইল হল প্লেইন টেক্সট ফাইল যাতে এক-লাইন এন্ট্রি থাকে। একটি দমন-তালিকা এন্ট্রি নীচের উদাহরণে প্রদর্শিত 4টি ফর্মগুলির মধ্যে একটি নিতে পারে৷ একটি বৈধ চক্র দমন এড়াতে যতটা সম্ভব সুনির্দিষ্টভাবে সাপ্রেস-লিস্ট এন্ট্রি যোগ করার সময় এটি সুপারিশ করা হয়। '#' অক্ষর ব্যবহার করে মন্তব্য যোগ করা যেতে পারে।

# Specifies that "fieldA" in ClassA will not refer to any object that is a subtype of ClassB.
FIELD my.pkg.ClassA.fieldA my.pkg.ClassB

# Suppresses all cycles containing "fieldA" in ClassA.
FIELD my.pkg.ClassA.fieldA

# Suppresses all cycles containing any field of ClassA.
TYPE my.pkg.ClassA

# Suppress all cycles containing the Inner's outer reference to ClassA.
OUTER my.pkg.ClassA.Inner

# Suppress all cycles containing the outer reference from an anonymous class declared in myMethod.
OUTER my.pkg.ClassA.myMethod.$

# Suppresses all cycles containing any type in package "my.pkg".
NAMESPACE my.pkg