Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web development, networking and server security. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

XPath წესი tutorial

Source: http://pmd.sourceforge.net/xpathruletutorial.html


ჩაწერის PMD წესების XPath შეიძლება იყოს ცოტა უფრო ადვილია, ვიდრე წერა წესების Java კოდი. აი შემოღების შესახებ, თუ როგორ უნდა გავაკეთოთ, რომ.

შესავალი

PMD უზრუნველყოფს ძალიან მოსახერხებელი მეთოდი წერა წესების წერილობით XPath შეკითხვა. როდესაც XPath შეკითხვის პოულობს მატჩი, დარღვევის ემატება მოხსენებაში. ეს დოკუმენტი ყურადღებას ამახვილებს XPath წესები. შეგიძლიათ აქ დამატებითი ინფორმაციისთვის წერილობით წესი.

რა არის რეზიუმე სინტაქსი ხე (AST)?

მდებარეობა FOLDOC AST არის "მონაცემების სტრუქტურას წარმოადგენს რაღაც რომელიც parsed, ხშირად გამოიყენება, როგორც შემდგენელი ან თარჯიმანი შიდა წარმომადგენლობის პროგრამა კი მიმდინარეობს ოპტიმიზირებულია და რის კოდი თაობის ხორციელდება.

ჩვენი მხრივ, ეს ნიშნავს, რომ ჩვენ ძირითადად აქვს ხე წარმომადგენლობა Java წყარო ფაილი. ეს ხე შეიძლება განვიხილოთ სტრუქტურირებული დოკუმენტის - ისევე, როგორც XML. და რადგან ეს კონცეპტუალურად მსგავსი XML, მას შეუძლია გაეგზავნება ერთად XPath გამონახვა ნიმუში.

გამოყენება დიზაინერი

PMD გააჩნია მოსახერხებელი ხელსაწყო, რომ თქვენ სიყვარული თუ გსურთ დაწერა XPath წესით. დიზაინერი, runnable საწყისი დამწერლობის bin/, არის ძალიან მარტივი და სასარგებლო კომუნალური დაწერის წესები.

ძირითადი ნაბიჯები ჩართული წერილობით XPath წესები ეს:

  1. დაწერეთ მარტივი Java მაგალითად წყარო snippet წელს დიზაინერი
  2. იხილეთ AST, რომელიც კლასის თქვენ დაწერა
  3. დაწერეთ XPath გამოხატვის, რომ სიას დარღვევის თქვენ ძებნას
  4. შეცვლა ჯავის კლასის და დაუბრუნდეს წინა ნაბიჯი დახვეწა XPath გამოხატვის

მარტივი XPath გამონათქვამები

ეს ნაწილი ითვალისწინებს პრაქტიკული მაგალითები XPath queries მეტი AST. თქვენ ალბათ ამ განყოფილებაში უფრო სასარგებლო თუ დაიცვას ეს დიზაინერი და ასლი/პასტა მაგალითია.

დააკოპირეთ შემდეგი Java წყარო კოდი დიზაინერი:

public class a {
	int fOne;
	int fTwo;
	private void run() {
		int one;
		int two;
	}
}

მოდით ვივარაუდოთ გსურთ ემთხვევა რაღაც შესახებ კლასის ცვლადი სახელები. ხედავთ ASTVviewer რომ VariableDeclaratorId შეიცავს ცვლადის სახელი - ში XML თვალსაზრისით, სახელწოდება @Image ატრიბუტი. ასე ცდილობენ XPath გამოხატვის შემდეგნაირად:

//VariableDeclaratorId

თუ ასე მოიქცევით გამოხატვის დაინახავთ, რომ ცვლადების განაცხადა, მეთოდები, ასევე შესაბამისი. უფრო სწორად გამოხატვის მიზნით შესაბამისი სფეროში დეკლარაციებს არის, ასევე, გამოყენებით FieldDeclaration კვანძის. ეს გამოთქმა შეესაბამება მხოლოდ ორი სფეროებში განაცხადა კლასი:

//FieldDeclaration

იგივე გზა, შეგიძლიათ ემთხვევა მხოლოდ ადგილობრივი ცვლადები ამ გამოხატვის

//LocalVariableDeclaration

ადგილობრივი ცვლადები ჩვენ გვჭირდება უფრო ფრთხილად. განვიხილოთ შემდეგი კლასი:

public class a {
	private void run() {
		final int one;
		int two;
		{
			int a;
		}
	}
}

ლოკალური ცვლადი დეკლარაციებს უნდა შეესაბამებოდეს "ა", რადგან ეს შესანიშნავად იურიდიული ჯავის ადგილობრივი ცვლადი. ახლა უფრო საინტერესო გამოხატვის ემთხვევა ცვლადები განაცხადა მეთოდი, და არა შიდა ბლოკი, არც კლასი. იქნებ თქვენ იწყება გამოხატვის ასე გამოიყურება:

//MethodDeclaration//LocalVariableDeclaration

თქვენ სწრაფად ვხედავთ, რომ სამივე ადგილობრივი ცვლადებია შესაბამისი. შესაძლო გამოსავალი ეს მოითხოვოს, რომ მშობელი ადგილობრივი ცვლადის დეკლარაცია არის MethodDeclaration კვანძის:

 
//LocalVariableDeclaration[name(../../..) = 'MethodDeclaration']
 

შესაბამისი ცვლადის სახელით

მოდით, მიიჩნევენ, რომ ჩვენ წერილობით წესების logger. მოდით ვივარაუდოთ, ჩვენ გამოვიყენებთ Java ჭრის API და გვინდა, რომ ყველა კლასის, რომ ერთზე მეტი logger. შემდეგი გამოხატვის დააბრუნებს ყველა ცვლადი დეკლარაციებს, რომელთა ტიპის "Logger.

//VariableDeclarator[../Type/ReferenceType/ClassOrInterfaceType[@Image='Log
ger']]

მოძიება კლასის ერთზე მეტი logger საკმაოდ ადვილი არის. ეს გამოთქმა შეესაბამება კლასების ჩვენ ვეძებთ.

TypeDeclaration[count(//VariableDeclarator[../Type/ReferenceType/ClassOrInt
erfaceType[@Image='Logger']])>1]

მაგრამ მოდით დახვეწა ეს გამოთქმა ცოტა მეტი. განვიხილოთ შემდეგი კლასი:

public class a {
	Logger log = null;
	Logger log = null;
	int b;
	void myMethod() {
		Logger log = null;
		int a;
	}
	class c {
		Logger a;
		Logger a;
	}
}

ამ კლასის ჩვენ მხოლოდ შესაბამისი ერთი დარღვევა, როდესაც ჩვენ, ალბათ, არ უნდოდა, რომ წარმოების ორი დარღვევები (ერთი თითოეული კლასი). შემდეგი დახვეწილი გამოხატვის სიას კლასის, რომელიც შეიცავს ერთზე მეტი logger.

//ClassOrInterfaceBodyDeclaration[count(//VariableDeclarator[../Type/ReferenceType/ClassOrInterfaceType[@Image='Logger']])>1]

მოდით ვივარაუდოთ, რომ ჩვენ გვაქვს ქარხანა კლასის, რომელიც შეიძლება ყოველთვის განაცხადა საბოლოო. ჩვენ ძებნის xpath გამოხატვის, რომ სიას ყველა დეკლარაციებს ქარხანა და ანგარიშები დარღვევა, თუ იგი არ გამოცხადდა საბოლოო. განვიხილოთ შემდეგი კლასი:

public class a {
	Factory f1;
	void myMethod() {
		Factory f2;
		int a;
	}
}

შემდეგი გამოხატვის არ Magic ჩვენ გვჭირდება:

//VariableDeclarator
 [../Type/ReferenceType/ClassOrInterfaceType
 [@Image = 'Factory'] and..[@Final='false']]
 

უნდა რეკომენდაცია ამ ეტაპზე, რომ თქვენ ექსპერიმენტი დიზაინერი აყენებს საბოლოო მოდიფიკატორის რომ ქარხანა და დაადასტურებენ, რომ შედეგი წარმოებული არიან მოსალოდნელი.

და ბოლოს, კიდევ უფრო ბევრ დეტალები წერილობით XPath წესები, შეარჩიო PMD გამოყენებითი!



translated by DT
Published (Last edited): 27-07-2016 , source: http://pmd.sourceforge.net/pmd-5.0.1/xpathruletutorial.html