精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Eclipse插件開發(fā)中的Java項目模型

開發(fā) 后端
Eclipse插件開發(fā)中的Java項目模型是比較重要的內(nèi)容,也是我們最長接觸到的。本文將詳細的為大家講解Java項目模型。

Java項目模型

Eclipse的項目有很多種,包括Java項目、C++項目、C#項目等,每種項目都有自己的特點。我們最常接觸到的項目就是Java項目,因此我們重點來講解一下Java項目模型。

Java模型是用來對與創(chuàng)建、編輯和構(gòu)建Java程序相關(guān)聯(lián)的對象進行建模的一些類。Java模型類是在org.eclipse.jdt.core中定義的。這些類實現(xiàn)資源的特定于Java的行為,并進一步將Java資源分解成模型元素。

Java模型的繼承結(jié)構(gòu)圖如圖3.13所示。

Java模型的繼承結(jié)構(gòu)圖

圖3.13  Java模型的繼承結(jié)構(gòu)圖

IJavaElement的子類接口還有IMethod、IType等,在這里沒有全部列出。Java模型中的類結(jié)構(gòu)比較簡單,級次也非常少。

下面介紹一下各個接口的主要方法。

(1)   IJavaElement

exists:判斷元素是否存在。處理Java元素與處理資源對象相似。當(dāng)使用Java元素時,實際上是在使用某些底層的模型對象的句柄。必須使用exists()來確定元素是否真正存在于工作空間中。

getElementName:返回元素的名稱。

getJavaModel:返回其對應(yīng)的JavaModel,返回值類型是IJavaModel。

getJavaProject:返回元素對應(yīng)的Java工程,返回值類型是IJavaProject。

getParent:返回父元素,返回值類型是IJavaElement。

getResource:返回元素對應(yīng)的資源,返回值類型是IResource。

(2)   IClassFile

此接口代表編譯后的class二進制文件。

isClass:判斷是否是Java類。

isInterface:判斷是否是接口。

(3)   ICompilationUnit

此接口代表Java源文件。

getAllTypes:返回此文件中定義的所有類型,返回值類型是IType[]。一個Java文件中可以定義多個類型。

getPrimary:返回主類型,返回值類型是ICompilationUnit。

(4)   IJavaModel

此接口表示根 Java 元素,對應(yīng)于工作空間。是所有具有 Java 性質(zhì)的項目的父類。它對于Java項目的作用和IWorkspaceRoot對于IProject的作用相似。

contains:判斷是否存在指定的資源。

getJavaProject:返回指定名字的Java項目,返回值類型是IJavaProject。

getJavaProjects:返回所有的Java項目,返回值類型是IJavaProject[]。

getWorkspace:返回所在的工作空間。

(5)   IJavaProject

此接口表示Java項目。

IJavaElement findElement(IPath path):返回項目的path路徑下的Java元素。

IPackageFragment findPackageFragment(IPath path):返回項目的path路徑下的IPackageFragment。

IPackageFragmentRoot findPackageFragmentRoot(IPath path):返回項目的path路徑下的IPackageFragmentRoot。

findType:根據(jù)一個全名取得此元素的類型,此類有數(shù)個重載方法,返回值類型為IType。

getAllPackageFragmentRoots:返回所有的IPackageFragmentRoot,返回值類型是IPackageFragmentRoot[]。

getOutputLocation:返回輸出路徑,返回值類型是IPath。

getRequiredProjectNames:返回依賴項目,返回值類型是字符串?dāng)?shù)組。

setOutputLocation:設(shè)定輸出路徑。

(6)   IPackageFragment

此接口表示整個包或者包的一部分。

createCompilationUnit:創(chuàng)建一個ICompilationUnit,返回值類型是ICompilationUnit。

getClassFile:返回指定名稱對應(yīng)的IClassFile,返回值類型是IClassFile。

getClassFiles:返回所有的IClassFile,返回值類型是IClassFile[]。

getCompilationUnit:返回指定名稱對應(yīng)的ICompilationUnit,返回值類型是ICompilationUnit。

getCompilationUnits:返回所有ICompilationUnit,返回值類型是ICompilationUnit[]。

getKind:判斷此包是源碼包還是普通包,返回值是int型,如等于IPackage- FragmentRoot.K_SOURCE則是源文件包,如等于IPackageFragmentRoot.K_BINARY則為普通包。

hasSubpackages:是否有子包。

(7)   IPackageFragmentRoot

此接口表示一組包段,并將各段映射至底層資源,它可以是文件夾、JAR或ZIP文件。

createPackageFragment:創(chuàng)建一個IPackageFragment,返回值類型是IPackage- Fragment。

getKind:此包段是源碼包段還是二進制包段,返回值類型是int,如果等于IPackageFragmentRoot.K_SOURCE則是源文件包段,如果等于IPackageFragment- Root.K_BINARY則為二進制包段。

getPackageFragment:根據(jù)包名返回對應(yīng)的IPackageFragment。

常用工具類

(1)   JavaCore(定義在org.eclipse.jdt.core包下)

JavaCore從Plugin繼承,它是JDT插件的生命周期管理器。不過對于第三方插件開發(fā)人員來說,它的重要性更多地體現(xiàn)在它提供的一些工具類方法中。

IJavaElement create(IFile file):從文件創(chuàng)建對應(yīng)的Java元素。

IJavaElement create(IFolder folder):從文件夾創(chuàng)建對應(yīng)的Java元素。

IJavaProject create(IProject project):得到IProject對應(yīng)的IJavaProject。

IJavaElement create(IResource resource):從資源創(chuàng)建對應(yīng)的Java元素。

IJavaModel create(IWorkspaceRoot root):從工作空間根目錄得到對應(yīng)的IJavaModel。

IClassFile createClassFileFrom(IFile file):從文件創(chuàng)建對應(yīng)的IClassFile。

ICompilationUnit createCompilationUnitFrom(IFile file):從文件創(chuàng)建對應(yīng)的ICompilationUnit。

style="LINE-HEIGHT: 17.5pt; TEXT-INDENT: 21pt"(2)   JavaUI(定義在org.eclipse.jdt.ui包下)

JavaUI中定義了常用的Java插件界面相關(guān)的方法。

createPackageDialog:創(chuàng)建一個包選擇對話框,返回值是SelectionDialog。

createTypeDialog:創(chuàng)建一個類型選擇對話框,返回值是SelectionDialog。

IEditorPart openInEditor(IJavaElement element):用編輯器打開指定的Java元素并返回編輯器實例。

revealInEditor(IEditorPart part, IJavaElement element):在編輯器中定位元素element。

插件開發(fā)中經(jīng)常會碰到一些常用的技巧,掌握這些技巧可以極大地提高插件的開發(fā)效率,并且可以減小插件的體積。下面列出一些常見的技巧。

(1)   由一個普通項目得到Java項目

Java項目是一種特殊的項目,需要注意的是IJavaProject并不是從IProject繼承的。不能將一個IProject對象強制轉(zhuǎn)換成一個IJavaProject對象,也不能把一個IJavaProject實例賦值給IProject變量。

由IProject項目得到Java項目的方式:

IJavaProject javaPoject = JavaCore.create(IProject);

由IJavaProject得到IProject的方式:

調(diào)用IJavaProject的IProject getProject();

(2)得到工作空間中的所有Java項目

我們可以首先得到工作空間中的所有項目,然后逐個進行轉(zhuǎn)換。不過這不免麻煩了一些,下面介紹更好的方式。IJavaModel是所有Java項目的根,通過它就可以得到所有的Java項目:

  1. IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();  
  2. IJavaModel jModel = JavaCore.create(root);  
  3. IJavaProject jProject[] = jModel.getJavaProjects(); 

(3)   打開Java編輯器并顯示Java編譯單元的特定成員

代碼如下:

  1. void showMethod(IMember member) {  
  2.     ICompilationUnit cu = member.getCompilationUnit();  
  3.     IEditorPart javaEditor = JavaUI.openInEditor(cu);  
  4.     JavaUI.revealInEditor(javaEditor, member);  

(4)   在工程下創(chuàng)建一個com.cownew包,并創(chuàng)建一個Hello.java文件

(5)   打開【打開類型】對話框

以下代碼段使用 JavaUI 類來打開【打開類型】對話框:

  1. new ProgressMonitorDialog(parent),   
  2. SearchEngine.createWorkspaceScope(), 

用類似方法還可以創(chuàng)建【打開包】和【打開主要類型】對話框。

(6)   打包指定的文件

我們寫一些工具的時候也許需要把文件打成jar包,然后進行發(fā)布到應(yīng)用服務(wù)器等操作,調(diào)用JDT提供的類可簡化這個操作(用到的打Jar包的類都在org.eclipse.ui.jarpackager下):

  1. JarPackageData descriptionnew JarPackageData();  
  2. IPath locationnew Path("C:/cownew.jar");  
  3. description.setJarLocation(location);  
  4. description.setSaveManifest(true);  
  5. description.setManifestMainClass(mainType);  
  6. description.setElements(filestoExport);  
  7. IJarExportRunnable runnable=   
  8. description.createJarExportRunnable(parentShell);  
  9. new ProgressMonitorDialog(parentShell).run(true,true, runnable); 

參數(shù)mainType表示Jar包的main類,filestoExport為要打包的文件。

(7)   自動設(shè)置Java項目的構(gòu)建路徑

有一些插件會將需要的jar包自動設(shè)置到構(gòu)建路徑上,比如使用WTP的新建向?qū)陆╳eb項目的時候就會把web開發(fā)需要的jar包自動放入項目的構(gòu)建路徑,使用PDE的“將項目轉(zhuǎn)換為插件項目”功能后項目的構(gòu)建路徑中就增加了插件依賴項的庫。那么它們是怎么實現(xiàn)的呢?

Java項目的構(gòu)建路徑有如下幾種:源文件夾、二進制庫、依賴項目、類路徑變量和類路徑容器。

源文件夾

圖3.14  源文件夾

構(gòu)建依賴項目

圖3.15  構(gòu)建依賴項目

Jar和類文件夾依賴

圖3.16  Jar和類文件夾依賴

每種不同的構(gòu)建路徑都有不同的作用:源文件夾是把源碼進行構(gòu)建的途徑,二進制庫是導(dǎo)入少量jar包的方式,依賴項目是供多項目分模塊開發(fā)使用的,使用類路徑變量可以避免二進制包的路徑依賴,而類路徑容器則為大量二進制庫的引入提供了方便。

JDT為這些不同的構(gòu)建路徑提供了一個統(tǒng)一的接口:IClassPathEntry,只要調(diào)用IJavaProject的setRawClasspath方法就可以為項目設(shè)定構(gòu)建路徑。

可以看到setRawClasspath方法需要一個IClasspathEntry數(shù)組,數(shù)組中的元素就是要設(shè)置的每一個構(gòu)建路徑。前面提到的JavaCore類提供了一系列的靜態(tài)方法來幫助我們生成不同的IClasspathEntry,而無須關(guān)注生成的細節(jié)。下面來看不同構(gòu)建路徑的添加方式。

①  源文件夾。使用JavaCore.newSourceEntry方法。下面的代碼的作用是構(gòu)造項目MyProject的源文件夾src的類路徑條目:

JavaCore.newSourceEntry(new Path("/MyProject/src"));

②  二進制庫IClasspathEntry。使用JavaCore.newLibraryEntry 方法。下面的代碼就是構(gòu)造MyProject的類文件lib的類路徑條目:

Path("/MyProject/lib"),null, null,false);  

以下類路徑條目具有源代碼連接:

設(shè)定關(guān)聯(lián)源代碼包有利于代碼的跟蹤調(diào)試。

③    依賴項目。使用JavaCore.newProjectEntry方法。下面的代碼就是構(gòu)造依賴項目MyFramework:

IClassPathEntry prjEntry = JavaCore.newProjectEntry(new

Path("/MyFramework"), true);

④  類路徑變量。使用JavaCore.newVariableEntry方法。類路徑變量對于整個工作空間來說是全局的,并且可以通過 JavaCore 方法 getClasspathVariable 和 setClasspathVariable 來處理。

可能會注冊自動的類路徑變量初始化方法,當(dāng)啟動工作空間時,通過擴展點 org.eclipse. jdt.core.classpathVariableInitializer來調(diào)用該類路徑變量初始化方法。

以下類路徑條目指示一個庫,該庫的位置存放在變量HOME中。使用變量SRC_HOME和SRC_ROOT來定義源代碼連接:

IClassPathEntry varEntry = JavaCore.newVariableEntry(

    new Path("HOME/foo.jar"), //庫路徑

    new Path("SRC_HOME/foo_src.zip"), //源碼歸檔路徑

    new Path("SRC_ROOT"), //源碼歸檔根路徑

    true);

JavaCore.setClasspathVariable("HOME", new Path("d:/myInstall"), null);

⑤    類路徑容器。通過 JavaCore的getClasspathContainer和setClasspathContainer兩個方法來處理類路徑容器。 

可能會注冊一個自動的類路徑容器初始化方法,當(dāng)需要綁定容器時,通過擴展點 org.eclipse.jdt.core.classpathContainerInitializer來被動地調(diào)用類路徑容器初始化方法。

以下類路徑條目指示系統(tǒng)類庫容器:

  1. IClassPathEntry varEntry = JavaCore.newContainerEntry(  
  2.                           new Path("JDKLIB/default"),false);  
  3. JavaCore.setClasspathContainer(  
  4. new Path("JDKLIB/default"),  
  5. new IJavaProject[]{ myProject },   
  6.         new IClasspathContainer[] {  
  7.              new IClasspathContainer() {  
  8.                  public IClasspathEntry[] getClasspathEntries() {  
  9.                      return new IClasspathEntry[]{  
  10.                          JavaCore.newLibraryEntry(  
  11. new Path("d:/rt.jar"), null, null, false);  
  12.                      };   
  13.                  }  
  14.                  public String getDescription() {   
  15. return "Basic JDK library container"; }  
  16.                  public int getKind() { return IClasspathContainer.K_SYSTEM; }  
  17.                  public IPath getPath() { return new Path("JDKLIB/basic"); }  
  18.              }             
  19.         },   
  20. null);    

我們只要調(diào)用相應(yīng)的方法創(chuàng)建我們的類路徑條目就可以了,然后把這些條目組成的數(shù)組通過setRawClasspath方法設(shè)定到項目中。需要注意的是如果我們只把要添加的類路徑條目傳入 setRawClasspath方法的話,就會替換原有的項目構(gòu)建路徑,這常常是我們不希望的。可以調(diào)用IJavaProject的 readRawClasspath方法讀取項目已有的設(shè)置,把我們要設(shè)置的構(gòu)建路徑添加到它的后面,然后再調(diào)用setRawClasspath方法設(shè)定新的項目構(gòu)建路徑。

在這個例子中,將要實現(xiàn)一個“為項目添加 lucene支持”的功能,用戶在項目上右擊,選擇菜單中的【為項目添加lucene支持】命令以后,插件就會把lucene的jar包和源碼包復(fù)制到項目的lib目錄下,并且將jar包加入構(gòu)建路徑。如圖3.17所示為增加lucene支持前的項目結(jié)構(gòu)。

圖3.17  增加lucene支持之前的項目結(jié)構(gòu)

用戶在項目上右擊,在彈出的快捷菜單中選擇【為項目添加lucene支持】命令后的項目結(jié)構(gòu)如圖3.18所示。

圖3.18  增加lucene支持之后的項目結(jié)構(gòu)

圖3.19是項目的構(gòu)建路徑。

圖3.19  增加的lucene包

首先新建一個插件工程,并將JDT相關(guān)的依賴項加入。然后添加一個org.eclipse.ui.popupMenus的擴展點,如果不熟悉怎么添加,可以使用插件向?qū)е械摹皬棾霾藛巍毕驅(qū)А?/P>

需要注意contribution的配置,如圖3.20所示。

圖3.20  contribution的配置

此插件只針對Java項目起作用,因此 objectClass中填入org.eclipse.jdt.core.IJavaProject;adaptable選擇true;如果是用向?qū)傻哪敲凑堄涀∏蹇課ameFilter。下面是核心類ActionAddLucene的實現(xiàn)代碼:

  1. System.getProperty("file.separator","/");  
  2. JavaCore.newLibraryEntry(project  
  3. .getFullPath(), project  
  4. LUCENESRCJAR).getFullPath(), null,  
  5.  new IClasspathEntry[oldPaths.length + 1];  
  6. LIB + FILESEPARATOR + LUCENEJAR);  
  7. LIB + FILESEPARATOR + LUCENESRCJAR);  
  8. IClasspathEntry entry)  
  9. e.getMessage(), e)); 

下面解釋一下代碼中的重點部分。

  1. IClasspathEntry[] oldPaths = javaProject.readRawClasspath(); 

讀取項目原有的構(gòu)建路徑條目。

  1. IClasspathEntry luceneLibEntry = JavaCore.newLibraryEntry(  
  2. project.getFile(LIB + FILESEPARATOR + LUCENEJAR).getFullPath(),   
  3. project.getFile(LIB + FILESEPARATOR + LUCENESRCJAR).getFullPath(),  
  4. null, false);    

這一句構(gòu)建lucene的jar包。

第1個參數(shù)是二進制jar包的位置,我們的二進制jar包的位置為項目路徑下的lib/lucene-1.4.3-src.jar。

第2個參數(shù)是jar包對應(yīng)的源碼包的位置。

第3個參數(shù)為源碼包的根路徑,因為有的源碼jar包的源碼根路徑不是jar包的根路徑,比如simplejta的源碼jar包的格式如圖3.21所示。

圖3.21  Jar包的結(jié)構(gòu)

對于這種情況就要指定第2個參數(shù)為“src”,lucene的源碼包的源碼根路徑就是jar包的根路徑,因此我們設(shè)置此參數(shù)為null。

第4個參數(shù)表示是否導(dǎo)出,我們設(shè)置為false。

(3)   URL luceneLib = Activator.getDefault().getBundle().getEntry(RESOUCELIB + FILE- SEPARATOR + LUCENEJAR);

我們把“l(fā)ucene-1.4.3.jar”、 “l(fā)ucene-1.4.3-src.jar”放到我們插件的“resoucelib”目錄下,當(dāng)用戶單擊【為項目添加lucene支持】的時候要把這兩個文件復(fù)制到項目的lib目錄下,因此需要首先讀取插件路徑“resoucelib”目錄下的這兩個jar包。

讀取插件路徑下的文件時我們使用插件Activator類提供的方法即可,比如如下調(diào)用:

就可以讀取到插件根目錄下的文件“config/my.xml”,返回類型是java.net.URL。

(4)   copyURLToFile(luceneLib, project, LIB + FILESEPARATOR + LUCENEJAR);

Activator.getDefault().getBundle().getEntry讀取到的文件位置是URL類型的,我們需要把這個URL對應(yīng)的文件復(fù)制到項目的lib下。下面看一下copyURLToFile的主干代碼:

URL類有一個openStream可以打開文件的輸入流,IFile也有一個接受輸入流的create方法用來創(chuàng)建文件,因此我們只需要把url的輸入流輸出給IFile的create方法即可。

這里我們也可以由url得到其對應(yīng)的磁盤上的路徑,也可以得到IFile對應(yīng)的磁盤上的路徑,然后使用Java IO來進行文件復(fù)制操作。但是這樣做不僅代碼數(shù)量變多了,而且由于使用的不是Eclipse的資源管理API,會帶來無法自動刷新等問題,因此建議盡量使用Eclipse提供的API來完成此功能。

學(xué)習(xí)Eclipse插件開發(fā)的最好的方式就是研讀 Eclipse的源碼,而對插件開發(fā)者最有參考價值的就是JDT(Java Development Tools)的代碼,相信把所有的包研讀一遍以后就會成為插件開發(fā)的高手了。下面是各個主要包的內(nèi)容,讀者可以根據(jù)需要有選擇地進行研讀。

【編輯推薦】

  1. Java語言入門初學(xué)者不得不看的幾條建議
  2. Java項目開發(fā)筆記與開發(fā)過程中的問題總結(jié)
  3. Java EE 6遙遙無期 預(yù)覽版兩極分化
  4. 幾種典型的Java內(nèi)存泄漏
  5. Java內(nèi)存溢出的詳細解決方案
責(zé)任編輯:彭凡 來源: 網(wǎng)易博客
相關(guān)推薦

2009-06-03 16:06:28

Eclipse插件開發(fā)Eclipse

2020-02-07 11:20:47

Java開發(fā)代碼

2009-06-04 20:26:45

2009-06-30 15:59:00

Eclipse插件開發(fā)

2009-06-18 14:28:24

Eclipse中添加M

2009-06-17 17:44:41

Eclipse插件Sp

2009-06-05 14:36:28

Eclipse插件安裝Eclipse教程

2009-06-10 16:19:33

Eclipse開發(fā)PH

2009-08-07 10:00:00

在Eclipse中安裝

2014-11-24 09:49:33

Eclipse

2013-07-23 15:28:38

開發(fā)者Eclipse插件

2010-08-17 13:41:46

Eclipse插件

2012-05-22 01:01:28

EclipseEclipseColo

2013-07-16 15:35:54

Eclipse插件Android開發(fā)學(xué)習(xí)

2011-12-01 09:50:28

2009-09-17 09:44:31

Flex for ec

2010-06-12 16:29:00

BlackBerry開

2012-11-06 10:02:04

JavaJadEclipse

2010-07-08 09:46:32

2009-06-02 14:59:57

eclipse jspeclipse插件配置eclipse插件安裝
點贊
收藏

51CTO技術(shù)棧公眾號

欧美图片一区二区三区| 久久影院电视剧免费观看| 不卡av在线播放| 欧美极品jizzhd欧美仙踪林| 永久免费毛片在线播放| 国产精品嫩草影院av蜜臀| 91日韩在线视频| 日韩欧美不卡视频| 欧美1级片网站| 精品成人一区二区三区四区| av无码精品一区二区三区| 黄色片网站在线观看| 91丨国产丨九色丨pron| 国产视频福利一区| 久久免费激情视频| 我不卡伦不卡影院| 精品中文字幕久久久久久| 在线观看免费av网址| 擼擼色在线看观看免费| 亚洲欧美一区二区三区国产精品| 美女被啪啪一区二区| jizz国产视频| 日本欧美韩国一区三区| 久久久久久亚洲精品| 免费观看特级毛片| 亚洲综合福利| 亚洲国产精品yw在线观看| av亚洲天堂网| 日韩高清中文字幕一区二区| 亚洲综合视频在线| 亚洲成人动漫在线| 亚洲成人影院麻豆| 国产亚洲精品bt天堂精选| 国产伦精品一区二区三区视频孕妇| 一卡二卡在线观看| 日日骚欧美日韩| 97视频在线观看网址| 青娱乐免费在线视频| 98精品视频| 最近中文字幕日韩精品| 国产 欧美 在线| 日韩福利视频一区| 精品精品欲导航| 中文字幕无码毛片免费看| 亚洲成人精品综合在线| 欧美午夜精品一区二区三区| 精品视频无码一区二区三区| 极品美鲍一区| 欧美日韩美女在线| 国产青青在线视频| 最新中文字幕在线播放| 五月婷婷激情综合| 91九色丨porny丨国产jk| 青春草视频在线观看| 一区二区三区毛片| 久久www视频| 亚洲精品天堂| 亚洲综合男人的天堂| 精品人妻人人做人人爽| 好久没做在线观看| 亚洲成人久久影院| 欧美二区在线视频| 亚洲一级少妇| 欧美视频在线不卡| 成 人 黄 色 小说网站 s色| 欧美黄页免费| 91精品在线免费| 99国产精品免费视频| 91成人精品在线| 亚洲国产欧美精品| 亚洲av综合一区二区| 欧美丝袜激情| 久久久精品国产亚洲| 青草影院在线观看| 影音先锋亚洲电影| 欧美整片在线观看| 中文字幕观看视频| 国产制服丝袜一区| 成人h在线播放| 午夜av免费观看| 国产视频一区二区在线| 亚洲一区二区三区免费观看| а√天堂资源地址在线下载| 亚洲成av人在线观看| 免费观看日韩毛片| 国产69精品久久| 日韩欧美在线观看一区二区三区| 久久久男人的天堂| 亚洲免费专区| www.日韩av.com| 国产精选第一页| 日韩国产精品大片| 91视频国产一区| 天天干天天操av| 国产精品嫩草影院av蜜臀| wwwwww欧美| 久久sese| 日韩精品一区二区三区四区| 国产黄色网址在线观看| 亚洲欧洲中文字幕| 欧美一级电影久久| 国产日韩欧美中文字幕| 91色九色蝌蚪| 国产人妻互换一区二区| 涩涩视频在线播放| 欧美一区二区三区男人的天堂| 熟女人妻在线视频| **女人18毛片一区二区| 国产suv精品一区二区| jizz中国女人| 亚洲国产成人一区二区三区| 无码人妻少妇伦在线电影| 视频精品导航| 日韩毛片中文字幕| 欧美极品aaaaabbbbb| 日本不卡的三区四区五区| 国产日产精品一区二区三区四区| 香蕉视频免费在线播放| 色综合久久久网| 人妻 丝袜美腿 中文字幕| 久久中文字幕av| 日本精品性网站在线观看| 好吊色视频一区二区| 最新欧美精品一区二区三区| 一级黄色香蕉视频| 香蕉久久夜色精品国产更新时间| 九九久久久久久久久激情| 中文字幕人妻丝袜乱一区三区| 91麻豆swag| 少妇高潮毛片色欲ava片| 免费精品一区二区三区在线观看| 中文国产亚洲喷潮| 黄色一级视频免费看| 不卡av在线网| 欧美中文字幕在线观看视频 | 91久久国产精品| 国产九九在线| 色欧美乱欧美15图片| 欧美 日本 国产| 亚洲三级影院| 国产精品免费视频一区二区| av免费在线观看网址| 欧美日本一区二区三区四区| www..com.cn蕾丝视频在线观看免费版| 999亚洲国产精| 国产精品美女xx| 色yeye免费人成网站在线观看| 在线播放91灌醉迷j高跟美女| 内射毛片内射国产夫妻| 秋霞午夜鲁丝一区二区老狼| 视频一区国产精品| 日韩精品麻豆| 最近2019中文免费高清视频观看www99 | 91久久香蕉国产日韩欧美9色| 丰满大乳奶做爰ⅹxx视频| 亚洲久久成人| 久久精品成人一区二区三区蜜臀 | 国产精品久久9| 国产午夜在线视频| 欧美性感一区二区三区| 男女全黄做爰文章| 精品一区二区三区不卡| 日本精品免费视频| 一区二区三区欧洲区| 久久久久女教师免费一区| 亚洲人妻一区二区三区| 一本到高清视频免费精品| 亚洲图片另类小说| 蜜臀a∨国产成人精品| 中文网丁香综合网| 亚洲国产aⅴ精品一区二区| 久久久久久久一区二区| 毛片在线播放网站| 欧美日韩另类一区| 久久久国产成人| 91亚洲精品乱码久久久久久蜜桃 | 国产在线拍揄自揄拍无码| 一区二区三区视频播放| 欧洲日韩成人av| 日本不卡在线| 欧美精品一区二区三区视频| 手机看片久久久| 国产精品理论片在线观看| 日本中文字幕精品| 99视频+国产日韩欧美| 水蜜桃亚洲精品| 麻豆视频久久| 日本久久亚洲电影| www.久久ai| 日韩精品在线观| 国产精品福利电影| 精品美女国产在线| 少妇高潮一区二区三区喷水| 成人av电影在线| 999在线观看| 一本不卡影院| 五月天综合婷婷| 日韩深夜福利| 成人信息集中地欧美| 美女的胸无遮挡在线观看| 日韩一二三在线视频播| 性感美女视频一二三| 5566中文字幕一区二区电影| 色屁屁影院www国产高清麻豆| 亚洲女人****多毛耸耸8| 双性尿奴穿贞c带憋尿| 国产乱对白刺激视频不卡| 欧美性猛交久久久乱大交小说| 韩国久久久久| 看全色黄大色大片| 精品美女视频| 韩国成人一区| 日韩一区二区三区高清在线观看| 国产精品久久久久91| 大桥未久在线视频| 欧美成人一区二区三区电影| 波多野结衣一区二区| 日韩精品视频在线播放| 精品人妻一区二区三区麻豆91| 欧美在线不卡视频| 精品不卡一区二区| 午夜电影一区二区三区| 欧美黄色免费在线观看| 综合电影一区二区三区 | 欧美电影三区| 欧美日韩在线一二三| 精品国产一区二区三区不卡蜜臂| 亚洲直播在线一区| 在线高清欧美| 国产一区二区香蕉| 日韩制服一区| 国产精品高潮粉嫩av| 亚洲黄色免费看| 97视频在线播放| 国产资源在线观看入口av| 欧美激情二区三区| 羞羞网站在线免费观看| 久久中文字幕视频| 麻豆av在线导航| 久久精品一区中文字幕| 免费不卡视频| 久久影视电视剧免费网站| 欧美日韩xx| 久久精品电影网站| 国产区在线观看| 久久天天躁狠狠躁老女人| 免费观看久久久久| 乱亲女秽乱长久久久| 成人影欧美片| 欧美高清自拍一区| 青春草免费在线视频| 欧美精品福利在线| 欧美亚洲日本精品| 国产福利精品在线| 97成人超碰| 国产在线观看精品一区二区三区| 久久婷婷五月综合色丁香| 成人av在线网址| 亚洲高清在线一区| 国产一区免费在线观看| 日韩成人av在线资源| 欧美综合77777色婷婷| 不卡av一区二区| 日韩最新中文字幕| 狠狠干成人综合网| 日韩av综合在线观看| 视频在线观看一区二区三区| 黄色手机在线视频| 国产一区三区三区| 无码av免费精品一区二区三区| proumb性欧美在线观看| 亚洲av综合一区二区| 日韩一区欧美小说| 日本特黄一级片| 欧美影院一区二区三区| 在线免费观看一区二区| 日韩欧美色综合网站| 天堂av资源网| 少妇高潮 亚洲精品| 日本高清在线观看视频| 日韩av高清不卡| 亚洲网站三级| 国产一区二区中文字幕免费看| 国产九一精品| 成年丰满熟妇午夜免费视频| 日韩一区二区久久| 亚洲人视频在线| 99久久夜色精品国产网站| 欧美一区二区三区粗大| 亚洲地区一二三色| 亚洲 小说区 图片区| 精品毛片乱码1区2区3区| 国产视频福利在线| 欧美激情视频在线免费观看 欧美视频免费一| 日韩伦理在线一区| 444亚洲人体| 九九热精品视频在线观看| 日韩精品一区二区三区电影| 久久亚洲国产精品一区二区| 欧美熟妇另类久久久久久多毛| 久久影院午夜片一区| 久久久久久久久毛片| 欧美伊人精品成人久久综合97 | 国产91沈先生在线播放| 日韩黄色在线观看| youjizz.com国产| 中文字幕一区在线观看视频| 天堂网一区二区三区| 91精品国产综合久久香蕉的特点| 暖暖视频在线免费观看| 欧美国产日韩视频| 日本免费在线一区| 奇米视频888战线精品播放| 国产精品大片| 精品综合久久久久| 国产亚洲短视频| 偷偷操不一样的久久| 日韩欧美你懂的| 黄网站免费在线观看| 国产精品国产福利国产秒拍 | 成人在线观看免费播放| 久久综合久久久| 亚洲美女一区| 国内精品免费视频| 亚洲激情网站免费观看| 夜夜躁很很躁日日躁麻豆| 亚洲小视频在线观看| 国产美女精品写真福利视频| av资源站久久亚洲| 亚洲一区色图| 激情文学亚洲色图| 国产精品国产三级国产普通话99 | 精品国产免费一区二区三区香蕉| 黄色网址在线免费观看| 成人激情在线观看| 欧美a级成人淫片免费看| 在线免费视频a| 日本一区二区三区四区| 波多野结衣人妻| 亚洲性猛交xxxxwww| 成人啊v在线| 日韩精品无码一区二区三区| 日韩极品在线观看| 51妺嘿嘿午夜福利| 欧美性受xxxx黑人xyx性爽| 国产爆初菊在线观看免费视频网站 | 亚洲精品久久久久| 草草在线观看| 九九热久久66| 久久久噜噜噜久久狠狠50岁| 丰满圆润老女人hd| 在线视频国内一区二区| 国产高清美女一级毛片久久| 国产精品亚洲自拍| 午夜av一区| 中文字幕1区2区| 午夜精品久久久久久久久| 日韩在线观看视频一区二区三区| 亚洲97在线观看| 亚洲香蕉视频| 国产免费又粗又猛又爽| 亚洲图片欧美激情| 亚洲国产精品无码久久| 亚洲**2019国产| 九九热精品视频在线观看| 狠狠干狠狠操视频| 亚洲高清免费视频| 免费在线观看一级毛片| 国产精品成人一区二区三区吃奶 | www.激情网| 北岛玲一区二区三区四区| 久久青青草原亚洲av无码麻豆| 在线国产精品播放| 日韩中文字幕| 日韩a在线播放| 国产精品久99| 高h放荡受浪受bl| 日本一区二区在线播放| 91精品天堂福利在线观看 | 国产精品素人一区二区| 国产情侣激情自拍| 97色伦亚洲国产| 久久人体视频| 性色av蜜臀av浪潮av老女人| 欧美亚洲国产一区二区三区| 亚洲资源一区| 日本午夜精品电影| 国产精品资源在线看| 国产精品视频123| 久久久精品国产一区二区| 香蕉视频一区| 男人操女人下面视频| 日本精品免费观看高清观看| 欧美午夜大胆人体| 色婷婷精品国产一区二区三区| 成人免费高清视频| 亚洲字幕av一区二区三区四区| 91黑丝高跟在线| 最新欧美人z0oozo0| 日韩精品电影一区二区|